From 2e4b8d94cdbc044755fb291a148be3aff29b83ec Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Thu, 16 Oct 2008 13:29:03 -0700 Subject: [PATCH] diagnosed some incorrect inputs for method receivers. R=r OCL=17304 CL=17304 --- src/cmd/gc/go.y | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index d36b74621c..656bc64867 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -754,8 +754,6 @@ uexpr: } | '&' uexpr { - if($2->op == OCONV && !func) - yyerror("& of composite literal at top level"); $$ = nod(OADDR, $2, N); } | '+' uexpr @@ -1181,13 +1179,11 @@ xfndcl: { maxarg = 0; stksize = 0; - func++; } fndcl fnbody { $$ = $3; $$->nbody = $4; funcbody($$); - func--; } fndcl: @@ -1207,15 +1203,22 @@ fndcl: b0stack = dclstack; // mark base for fn literals $$ = nod(ODCLFUNC, N, N); - t = ismethod($2->type); - if(t != T) - $$->nname = methodname($4, t); - else + if(listcount($2) == 1) { + t = ismethod($2->type); $$->nname = $4; - $$->type = functype($2, $6, $8); - funchdr($$); + if(t != T) + $$->nname = methodname($4, t); + $$->type = functype($2, $6, $8); + funchdr($$); + addmethod($4, $$->type, 1); + } else { + /* declare it as a function */ + yyerror("unknown method receiver"); + $$->nname = $4; + $$->type = functype(N, $6, $8); + funchdr($$); + } - addmethod($4, $$->type, 1); } fntype: -- 2.50.0