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:
Russ Cox 2010-05-24 16:55:23 -07:00
parent 9fc9246bf3
commit 8c2bc4419b
5 changed files with 44 additions and 4 deletions

View file

@ -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
{ {

View file

@ -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:

View 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"
}

View 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
View 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