mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
gc: fix shift/reduce conflict in go.y export syntax
Fixes #771. R=ken2 CC=golang-dev https://golang.org/cl/1267042
This commit is contained in:
parent
9fc9246bf3
commit
8c2bc4419b
5 changed files with 44 additions and 4 deletions
|
@ -74,6 +74,8 @@
|
||||||
%type <node> indcl interfacetype structtype ptrtype
|
%type <node> indcl interfacetype structtype ptrtype
|
||||||
%type <node> recvchantype non_recvchantype othertype fnret_type fntype
|
%type <node> recvchantype non_recvchantype othertype fnret_type fntype
|
||||||
|
|
||||||
|
%type <val> hidden_tag
|
||||||
|
|
||||||
%type <sym> hidden_importsym hidden_pkg_importsym
|
%type <sym> hidden_importsym hidden_pkg_importsym
|
||||||
|
|
||||||
%type <node> hidden_constant hidden_literal hidden_dcl
|
%type <node> hidden_constant hidden_literal hidden_dcl
|
||||||
|
@ -1709,12 +1711,12 @@ hidden_dcl:
|
||||||
}
|
}
|
||||||
|
|
||||||
hidden_structdcl:
|
hidden_structdcl:
|
||||||
sym hidden_type oliteral
|
sym hidden_type hidden_tag
|
||||||
{
|
{
|
||||||
$$ = nod(ODCLFIELD, newname($1), typenod($2));
|
$$ = nod(ODCLFIELD, newname($1), typenod($2));
|
||||||
$$->val = $3;
|
$$->val = $3;
|
||||||
}
|
}
|
||||||
| '?' hidden_type oliteral
|
| '?' hidden_type hidden_tag
|
||||||
{
|
{
|
||||||
Sym *s;
|
Sym *s;
|
||||||
|
|
||||||
|
@ -1728,6 +1730,15 @@ hidden_structdcl:
|
||||||
$$->val = $3;
|
$$->val = $3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hidden_tag:
|
||||||
|
{
|
||||||
|
$$.ctype = CTxxx;
|
||||||
|
}
|
||||||
|
| ':' LLITERAL // extra colon avoids conflict with "" looking like beginning of "".typename
|
||||||
|
{
|
||||||
|
$$ = $2;
|
||||||
|
}
|
||||||
|
|
||||||
hidden_interfacedcl:
|
hidden_interfacedcl:
|
||||||
sym '(' ohidden_funarg_list ')' ohidden_funres
|
sym '(' ohidden_funarg_list ')' ohidden_funres
|
||||||
{
|
{
|
||||||
|
|
|
@ -1295,8 +1295,12 @@ Tpretty(Fmt *fp, Type *t)
|
||||||
fmtprint(fp, "... %T", t->type->type);
|
fmtprint(fp, "... %T", t->type->type);
|
||||||
} else
|
} else
|
||||||
fmtprint(fp, "%T", t->type);
|
fmtprint(fp, "%T", t->type);
|
||||||
if(t->note)
|
if(t->note) {
|
||||||
fmtprint(fp, " \"%Z\"", t->note);
|
fmtprint(fp, " ");
|
||||||
|
if(exporting)
|
||||||
|
fmtprint(fp, ":");
|
||||||
|
fmtprint(fp, "\"%Z\"", t->note);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case TFORW:
|
case TFORW:
|
||||||
|
|
10
test/fixedbugs/bug282.dir/p1.go
Normal file
10
test/fixedbugs/bug282.dir/p1.go
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
// Copyright 2010 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package p1
|
||||||
|
|
||||||
|
type T struct {
|
||||||
|
f func() "x"
|
||||||
|
}
|
||||||
|
|
8
test/fixedbugs/bug282.dir/p2.go
Normal file
8
test/fixedbugs/bug282.dir/p2.go
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
// Copyright 2010 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package p2
|
||||||
|
|
||||||
|
import _ "./p1"
|
||||||
|
|
7
test/fixedbugs/bug282.go
Normal file
7
test/fixedbugs/bug282.go
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// $G $D/$F.dir/p1.go && $G $D/$F.dir/p2.go
|
||||||
|
|
||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
ignored
|
Loading…
Reference in a new issue