diff options
-rw-r--r-- | src/cmd/gc/go.y | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index fd02a328e..0a7c7bc07 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -56,7 +56,7 @@ %type <node> simple_stmt osimple_stmt semi_stmt %type <node> expr uexpr pexpr expr_list oexpr oexpr_list expr_list_r %type <node> exprsym3_list_r exprsym3 -%type <node> name onew_name new_name new_name_list_r +%type <node> name onew_name new_name new_name_list_r new_field %type <node> vardcl_list_r vardcl Avardcl Bvardcl %type <node> interfacedcl_list_r interfacedcl %type <node> structdcl_list_r structdcl embed @@ -958,6 +958,12 @@ new_name: $$ = newname($1); } +new_field: + sym2 + { + $$ = newname($1); + } + new_type: sym1 { @@ -980,8 +986,16 @@ sym1: sym | keyword +/* + * keywords that can be field names + * pretty much any name can be allowed + * limited only by good taste + */ sym2: sym1 +| LTYPE +| LFUNC +| LVAR /* * keywords that can be variables @@ -1402,12 +1416,12 @@ interfacedcl_list_r: } structdcl: - new_name ',' structdcl + new_field ',' structdcl { $$ = nod(ODCLFIELD, $1, N); $$ = nod(OLIST, $$, $3); } -| new_name type oliteral +| new_field type oliteral { $$ = nod(ODCLFIELD, $1, N); $$->type = $2; @@ -2000,7 +2014,7 @@ hidden_importsym: * to check whether the rest of the grammar is free of * reduce/reduce conflicts, comment this section out by * removing the slash on the next line. - */ + * lpack: LATYPE { |