1
0
mirror of https://github.com/golang/go synced 2024-11-25 01:57:56 -07: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:
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> recvchantype non_recvchantype othertype fnret_type fntype
%type <val> hidden_tag
%type <sym> hidden_importsym hidden_pkg_importsym
%type <node> hidden_constant hidden_literal hidden_dcl
@ -1709,12 +1711,12 @@ hidden_dcl:
}
hidden_structdcl:
sym hidden_type oliteral
sym hidden_type hidden_tag
{
$$ = nod(ODCLFIELD, newname($1), typenod($2));
$$->val = $3;
}
| '?' hidden_type oliteral
| '?' hidden_type hidden_tag
{
Sym *s;
@ -1728,6 +1730,15 @@ hidden_structdcl:
$$->val = $3;
}
hidden_tag:
{
$$.ctype = CTxxx;
}
| ':' LLITERAL // extra colon avoids conflict with "" looking like beginning of "".typename
{
$$ = $2;
}
hidden_interfacedcl:
sym '(' ohidden_funarg_list ')' ohidden_funres
{

View File

@ -1295,8 +1295,12 @@ Tpretty(Fmt *fp, Type *t)
fmtprint(fp, "... %T", t->type->type);
} else
fmtprint(fp, "%T", t->type);
if(t->note)
if(t->note) {
fmtprint(fp, " ");
if(exporting)
fmtprint(fp, ":");
fmtprint(fp, "\"%Z\"", t->note);
}
return 0;
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