mirror of
https://github.com/golang/go
synced 2024-11-11 19:41:36 -07:00
fix stringrange test
R=ken OCL=27353 CL=27353
This commit is contained in:
parent
907509de4a
commit
a62467af93
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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!
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user