]> Cypherpunks repositories - gostls13.git/commitdiff
range clause must have = or :=
authorKen Thompson <ken@golang.org>
Mon, 15 Dec 2008 21:44:27 +0000 (13:44 -0800)
committerKen Thompson <ken@golang.org>
Mon, 15 Dec 2008 21:44:27 +0000 (13:44 -0800)
:= illegal in for-increment

R=r
OCL=21204
CL=21204

src/cmd/gc/go.h
src/cmd/gc/go.y
src/lib/json/generic.go
src/lib/json/generic_test.go
test/ken/range.go

index 858afc1c153f6c5e28efe9efc60700ec6ddb23c0..a85d6f76042dcc36e9b4293f93a688cbffd7c0ad 100644 (file)
@@ -197,6 +197,7 @@ struct      Node
        uchar   method;         // OCALLMETH name
        uchar   iota;           // OLITERAL made from iota
        uchar   embedded;       // ODCLFIELD embedded type
+       uchar   colas;          // OAS resulting from :=
 
        // most nodes
        Node*   left;
index 6bab8402f6db4bc43867d34fcd9410969c64a336..429d2f32b5b573bc10d864977b77418e27c66518 100644 (file)
@@ -419,6 +419,7 @@ simple_stmt:
                $$ = rev($1);
                $$ = colas($$, $3);
                $$ = nod(OAS, $$, $3);
+               $$->colas = 1;
                addtotop($$);
        }
 |      LPRINT '(' oexpr_list ')'
@@ -554,9 +555,6 @@ compound_stmt:
                popdcl();
        }
 
-ocolas:
-|      LCOLAS
-
 orange_stmt:
        osimple_stmt
 |      exprsym3_list_r '=' LRANGE expr
@@ -570,12 +568,12 @@ orange_stmt:
                $$ = nod(ORANGE, $$, $6);
                $$->etype = 0;
        }
-|      exprsym3_list_r ocolas LRANGE expr
+|      exprsym3_list_r LCOLAS LRANGE expr
        {
                $$ = nod(ORANGE, $1, $4);
                $$->etype = 1;
        }
-|      exprsym3 ':' exprsym3 ocolas LRANGE expr
+|      exprsym3 ':' exprsym3 LCOLAS LRANGE expr
        {
                $$ = nod(OLIST, $1, $3);
                $$ = nod(ORANGE, $$, $6);
@@ -592,6 +590,8 @@ for_header:
                        break;
                }
                // init ; test ; incr
+               if($5 != N && $5->colas != 0)
+                       yyerror("cannot declare in the for-increment");
                $$ = nod(OFOR, N, N);
                $$->ninit = $1;
                $$->ntest = $3;
index 9324b6479306eaa310d3a0ec954d65f24f3c3e66..abdcd9546c966d553e53bb5a0a05c2725cdf4f27 100644 (file)
@@ -114,7 +114,7 @@ func (j *Map) Get(s string) Json {
 func (j *Map) String() string {
        s := "{";
        first := true;
-       for k,v range j.m {
+       for k,v := range j.m {
                if first {
                        first = false;
                } else {
@@ -188,7 +188,7 @@ export func Equal(a, b Json) bool {
                if len(m) != len(b.(*Map).m) {
                        return false;
                }
-               for k,v range m {
+               for k,v := range m {
                        if !Equal(v, b.Get(k)) {
                                return false;
                        }
index a061af0321c2e471aa72b922228455f6191fe72a..0851c1c4a01a7d0d43e0f71682fa959ba50262c0 100644 (file)
@@ -64,7 +64,7 @@ export func TestJsonMap(t *testing.T) {
        if mapv == nil {
                t.Fatalf("StringToJson(%#q) => nil, %v, %v", mapstr, ok, errtok);
        }
-       for k,v range values {
+       for k,v := range values {
                if v1 := mapv.Get(k); !Equal(v1, v) {
                        t.Errorf("MapTest: Walk(%#q) => %v, want %v", k, v1, v);
                }
index c8a646dd3025c14deb0fc799165afa1d041b150e..fc866672c0ff4f526368d0142ed359aae1ff2951 100644 (file)
@@ -40,7 +40,7 @@ main()
         * key only
         */
        i = 0;
-       for k range a {
+       for k := range a {
                v := a[k];
                if v != f(k) {
                        panicln("key array range", k, v, a[k]);
@@ -52,7 +52,7 @@ main()
        }
 
        i = 0;
-       for k range p {
+       for k := range p {
                v := p[k];
                if v != f(k) {
                        panicln("key pointer range", k, v, p[k]);
@@ -64,7 +64,7 @@ main()
        }
 
        i = 0;
-       for k range m {
+       for k := range m {
                v := m[k];
                if v != f(k) {
                        panicln("key map range", k, v, m[k]);
@@ -79,7 +79,7 @@ main()
         * key:value
         */
        i = 0;
-       for k:v range a {
+       for k:v := range a {
                if v != f(k) {
                        panicln("key:value array range", k, v, a[k]);
                }
@@ -90,7 +90,7 @@ main()
        }
 
        i = 0;
-       for k:v range p {
+       for k:v := range p {
                if v != f(k) {
                        panicln("key:value pointer range", k, v, p[k]);
                }
@@ -101,7 +101,7 @@ main()
        }
 
        i = 0;
-       for k:v range m {
+       for k:v := range m {
                if v != f(k) {
                        panicln("key:value map range", k, v, m[k]);
                }