Commit a62467af authored by Russ Cox's avatar Russ Cox

fix stringrange test

R=ken
OCL=27353
CL=27353
parent 907509de
...@@ -500,7 +500,6 @@ void ...@@ -500,7 +500,6 @@ void
stringpool(Node *n) stringpool(Node *n)
{ {
Pool *p; Pool *p;
int w;
if(n->op != OLITERAL || n->val.ctype != CTSTR) { if(n->op != OLITERAL || n->val.ctype != CTSTR) {
if(n->val.ctype == CTNIL) if(n->val.ctype == CTNIL)
......
...@@ -3197,7 +3197,7 @@ Node* ...@@ -3197,7 +3197,7 @@ Node*
dorange(Node *nn) dorange(Node *nn)
{ {
Node *k, *v, *m; 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; Type *t, *th;
int local; int local;
...@@ -3339,9 +3339,17 @@ strng: ...@@ -3339,9 +3339,17 @@ strng:
hk = nod(OXXX, N, N); // hidden key hk = nod(OXXX, N, N); // hidden key
tempname(hk, types[TINT]); tempname(hk, types[TINT]);
ohk = nod(OXXX, N, N); // old hidden key
tempname(ohk, types[TINT]);
ha = nod(OXXX, N, N); // hidden string ha = nod(OXXX, N, N); // hidden string
tempname(ha, t); tempname(ha, t);
hv = N;
if(v != N) {
hv = nod(OXXX, N, N); // hidden value
tempname(hv, types[TINT]);
}
if(local) { if(local) {
k = old2new(k, types[TINT]); k = old2new(k, types[TINT]);
...@@ -3353,27 +3361,22 @@ strng: ...@@ -3353,27 +3361,22 @@ strng:
a = nod(OAS, ha, m); a = nod(OAS, ha, m);
n->ninit = a; n->ninit = a;
// kh = 0 // ohk = 0
a = nod(OAS, hk, nodintconst(0)); a = nod(OAS, ohk, nodintconst(0));
n->ninit = list(n->ninit, a); n->ninit = list(n->ninit, a);
// k = hk // hk[,hv] = stringiter(ha,hk)
a = nod(OAS, k, hk);
n->ninit = list(n->ninit, a);
// hk[,v] = stringiter(ha,hk)
if(v != N) { if(v != N) {
// hk,v = stringiter2(ha, hk) // hk,v = stringiter2(ha, hk)
on = syslook("stringiter2", 0); on = syslook("stringiter2", 0);
// argtype(on, v->type); // argtype(on, v->type);
a = list(ha, hk); a = list(ha, nodintconst(0));
a = nod(OCALL, on, a); a = nod(OCALL, on, a);
a = nod(OAS, list(hk, v), a); a = nod(OAS, list(hk, hv), a);
} else { } else {
// hk = stringiter(ha, hk) // hk = stringiter(ha, hk)
on = syslook("stringiter", 0); on = syslook("stringiter", 0);
a = list(ha, hk); a = list(ha, nodintconst(0));
a = nod(OCALL, on, a); a = nod(OCALL, on, a);
a = nod(OAS, hk, a); a = nod(OAS, hk, a);
} }
...@@ -3382,18 +3385,13 @@ strng: ...@@ -3382,18 +3385,13 @@ strng:
// while(hk != 0) // while(hk != 0)
n->ntest = nod(ONE, hk, nodintconst(0)); n->ntest = nod(ONE, hk, nodintconst(0));
// k = hk // hk[,hv] = stringiter(ha,hk)
a = nod(OAS, k, hk);
n->nincr = a;
// hk[,v] = stringiter(ha,hk)
if(v != N) { if(v != N) {
// hk,v = stringiter2(ha, hk) // hk,hv = stringiter2(ha, hk)
on = syslook("stringiter2", 0); on = syslook("stringiter2", 0);
// argtype(on, v->type);
a = list(ha, hk); a = list(ha, hk);
a = nod(OCALL, on, a); a = nod(OCALL, on, a);
a = nod(OAS, list(hk, v), a); a = nod(OAS, list(hk, hv), a);
} else { } else {
// hk = stringiter(ha, hk) // hk = stringiter(ha, hk)
on = syslook("stringiter", 0); on = syslook("stringiter", 0);
...@@ -3403,6 +3401,16 @@ strng: ...@@ -3403,6 +3401,16 @@ strng:
} }
n->nincr = list(n->nincr, a); 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); addtotop(n);
goto out; goto out;
......
...@@ -67,10 +67,6 @@ panic PC=xxx ...@@ -67,10 +67,6 @@ panic PC=xxx
=========== ./sigchld.go =========== ./sigchld.go
survived SIGCHLD survived SIGCHLD
=========== ./stringrange.go
after loop i is 18 not 17
FAIL
=========== ./turing.go =========== ./turing.go
Hello World! Hello World!
......
...@@ -40,8 +40,22 @@ func main() { ...@@ -40,8 +40,22 @@ func main() {
fmt.Println("after loop i is", i, "not", len(s)-1); fmt.Println("after loop i is", i, "not", len(s)-1);
ok = false; 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 { if !ok {
fmt.Println("FAIL"); fmt.Println("BUG: stringrange");
sys.Exit(1) sys.Exit(1)
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment