]> Cypherpunks.ru repositories - gostls13.git/commitdiff
fix stringrange test
authorRuss Cox <rsc@golang.org>
Mon, 13 Apr 2009 12:31:44 +0000 (05:31 -0700)
committerRuss Cox <rsc@golang.org>
Mon, 13 Apr 2009 12:31:44 +0000 (05:31 -0700)
R=ken
OCL=27353
CL=27353

src/cmd/gc/obj.c
src/cmd/gc/walk.c
test/golden.out
test/stringrange.go

index aa7631bd88a17367ee22c756253761129204bb0a..037cd4d4822ee7f8d0e79abd5a809a160a794bb0 100644 (file)
@@ -500,7 +500,6 @@ void
 stringpool(Node *n)
 {
        Pool *p;
-       int w;
 
        if(n->op != OLITERAL || n->val.ctype != CTSTR) {
                if(n->val.ctype == CTNIL)
index fb8b7ca0025f2f963a4ab1d807ec8dcbc624cfe9..5f05c323f273c1f8f9af6e35ccbe2434ae2b7bcb 100644 (file)
@@ -3197,7 +3197,7 @@ Node*
 dorange(Node *nn)
 {
        Node *k, *v, *m;
-       Node *n, *hv, *hc, *ha, *hk, *on, *r, *a;
+       Node *n, *hv, *hc, *ha, *hk, *ohk, *on, *r, *a;
        Type *t, *th;
        int local;
 
@@ -3339,9 +3339,17 @@ strng:
        hk = nod(OXXX, N, N);           // hidden key
        tempname(hk, types[TINT]);
 
+       ohk = nod(OXXX, N, N);          // old hidden key
+       tempname(ohk, types[TINT]);
+
        ha = nod(OXXX, N, N);           // hidden string
        tempname(ha, t);
 
+       hv = N;
+       if(v != N) {
+               hv = nod(OXXX, N, N);           // hidden value
+               tempname(hv, types[TINT]);
+       }
 
        if(local) {
                k = old2new(k, types[TINT]);
@@ -3353,27 +3361,22 @@ strng:
        a = nod(OAS, ha, m);
        n->ninit = a;
 
-       // kh = 0
-       a = nod(OAS, hk, nodintconst(0));
+       // ohk = 0
+       a = nod(OAS, ohk, nodintconst(0));
        n->ninit = list(n->ninit, a);
 
-       // k = hk
-       a = nod(OAS, k, hk);
-       n->ninit = list(n->ninit, a);
-
-
-       // hk[,v] = stringiter(ha,hk)
+       // hk[,hv] = stringiter(ha,hk)
        if(v != N) {
                // hk,v = stringiter2(ha, hk)
                on = syslook("stringiter2", 0);
 //             argtype(on, v->type);
-               a = list(ha, hk);
+               a = list(ha, nodintconst(0));
                a = nod(OCALL, on, a);
-               a = nod(OAS, list(hk, v), a);
+               a = nod(OAS, list(hk, hv), a);
        } else {
                // hk = stringiter(ha, hk)
                on = syslook("stringiter", 0);
-               a = list(ha, hk);
+               a = list(ha, nodintconst(0));
                a = nod(OCALL, on, a);
                a = nod(OAS, hk, a);
        }
@@ -3382,18 +3385,13 @@ strng:
        // while(hk != 0)
        n->ntest = nod(ONE, hk, nodintconst(0));
 
-       // k = hk
-       a = nod(OAS, k, hk);
-       n->nincr = a;
-
-       // hk[,v] = stringiter(ha,hk)
+       // hk[,hv] = stringiter(ha,hk)
        if(v != N) {
-               // hk,v = stringiter2(ha, hk)
+               // hk,hv = stringiter2(ha, hk)
                on = syslook("stringiter2", 0);
-//             argtype(on, v->type);
                a = list(ha, hk);
                a = nod(OCALL, on, a);
-               a = nod(OAS, list(hk, v), a);
+               a = nod(OAS, list(hk, hv), a);
        } else {
                // hk = stringiter(ha, hk)
                on = syslook("stringiter", 0);
@@ -3403,6 +3401,16 @@ strng:
        }
        n->nincr = list(n->nincr, a);
 
+       // k,ohk[,v] = ohk,hk,[,hv]
+       a = nod(OAS, k, ohk);
+       n->nbody = a;
+       a = nod(OAS, ohk, hk);
+       n->nbody = list(n->nbody, a);
+       if(v != N) {
+               a = nod(OAS, v, hv);
+               n->nbody = list(n->nbody, a);
+       }
+
        addtotop(n);
        goto out;
 
index 7cb408b8e2ad95f4b4b4fcbda14b7b26b5f51e84..b3cc4fb54334c0ad8c1a430cb1aeb92f3625ef6c 100644 (file)
@@ -67,10 +67,6 @@ panic PC=xxx
 =========== ./sigchld.go
 survived SIGCHLD
 
-=========== ./stringrange.go
-after loop i is 18 not 17
-FAIL
-
 =========== ./turing.go
 Hello World!
 
index 66d25e1f4f178e127992c16fd6fa0d8001fdb71d..4d581d70f2eaebeba78d9408370f800426f78024 100644 (file)
@@ -40,8 +40,22 @@ func main() {
                fmt.Println("after loop i is", i, "not", len(s)-1);
                ok = false;
        }
+
+       i = 12345;
+       c = 23456;
+       for i, c = range "" {
+       }
+       if i != 12345 {
+               fmt.Println("range empty string assigned to index:", i);
+               ok = false;
+       }
+       if c != 23456 {
+               fmt.Println("range empty string assigned to value:", c);
+               ok = false;
+       }
+
        if !ok {
-               fmt.Println("FAIL");
+               fmt.Println("BUG: stringrange");
                sys.Exit(1)
        }
 }