From: Russ Cox Date: Wed, 20 May 2009 21:24:23 +0000 (-0700) Subject: fix implicit star for range on *map, *[]. X-Git-Tag: weekly.2009-11-06~1594 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=47e5152790e6dab326237259e4898da22917342a;p=gostls13.git fix implicit star for range on *map, *[]. do not update lineno from ONAME nodes, because they have declaration lineno not use. show actual name in top-level statement error. before runtime.a:7: x.go:5: walkstate: NAME not a top level statement after x.go:14: walkstate: runtime.Goexit not a top level statement R=ken OCL=29113 CL=29116 --- diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 34d29e0a11..3013faf19e 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -114,7 +114,8 @@ loop: return; more = N; - lineno = n->lineno; + if(n->op != ONAME) + lineno = n->lineno; switch(n->op) { case OLIST: @@ -123,7 +124,10 @@ loop: break; default: - yyerror("walkstate: %O not a top level statement", n->op); + if(n->op == ONAME) + yyerror("walkstate: %S not a top level statement", n->sym); + else + yyerror("walkstate: %O not a top level statement", n->op); case OASOP: case OAS: @@ -3355,11 +3359,7 @@ dorange(Node *nn) if(nn->op != ORANGE) fatal("dorange not ORANGE"); - implicitstar(&nn->right); k = nn->left; - m = nn->right; - local = nn->etype; - v = N; if(k->op == OLIST) { v = k->right; @@ -3368,7 +3368,11 @@ dorange(Node *nn) n = nod(OFOR, N, N); - walktype(m, Erv); + walktype(nn->right, Erv); + implicitstar(&nn->right); + m = nn->right; + local = nn->etype; + t = m->type; if(t == T) goto out;