]> Cypherpunks repositories - gostls13.git/commitdiff
fix implicit star for range on *map, *[].
authorRuss Cox <rsc@golang.org>
Wed, 20 May 2009 21:24:23 +0000 (14:24 -0700)
committerRuss Cox <rsc@golang.org>
Wed, 20 May 2009 21:24:23 +0000 (14:24 -0700)
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

src/cmd/gc/walk.c

index 34d29e0a11c65ca8124e6d1422ccfacb385ad21d..3013faf19ee9c97d759a0d84a098db0a259b76dc 100644 (file)
@@ -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;