mirror of https://github.com/golang/go.git
parent
af065a0c77
commit
b0f627a6e1
|
|
@ -1021,6 +1021,12 @@ convtype:
|
|||
// array literal
|
||||
$$ = aindex($2, $4);
|
||||
}
|
||||
| '[' LDDD ']' type
|
||||
{
|
||||
// array literal of nelem
|
||||
$$ = aindex(N, $4);
|
||||
$$->bound = -100;
|
||||
}
|
||||
| LMAP '[' type ']' type
|
||||
{
|
||||
// map literal
|
||||
|
|
|
|||
|
|
@ -3556,23 +3556,24 @@ arraylit(Node *n)
|
|||
Iter saver;
|
||||
Type *t;
|
||||
Node *var, *r, *a, *nas, *nnew;
|
||||
int idx;
|
||||
int idx, b;
|
||||
|
||||
t = n->type;
|
||||
if(t->etype != TARRAY)
|
||||
fatal("arraylit: not array");
|
||||
|
||||
if(t->bound >= 0)
|
||||
fatal("arraylit: literal fixed arrays not implemented");
|
||||
|
||||
var = nod(OXXX, N, N);
|
||||
tempname(var, t);
|
||||
|
||||
nnew = nod(OMAKE, N, N);
|
||||
nnew->type = t;
|
||||
b = t->bound;
|
||||
if(b < 0 && b != -100) {
|
||||
// slice
|
||||
nnew = nod(OMAKE, N, N);
|
||||
nnew->type = t;
|
||||
|
||||
nas = nod(OAS, var, nnew);
|
||||
addtop = list(addtop, nas);
|
||||
nas = nod(OAS, var, nnew);
|
||||
addtop = list(addtop, nas);
|
||||
}
|
||||
|
||||
idx = 0;
|
||||
r = listfirst(&saver, &n->left);
|
||||
|
|
@ -3580,6 +3581,10 @@ arraylit(Node *n)
|
|||
r = N;
|
||||
while(r != N) {
|
||||
// build list of var[c] = expr
|
||||
if(b >= 0 && idx >= b) {
|
||||
yyerror("literal array initializer out of bounds");
|
||||
break;
|
||||
}
|
||||
a = nodintconst(idx);
|
||||
a = nod(OINDEX, var, a);
|
||||
a = nod(OAS, a, r);
|
||||
|
|
@ -3587,7 +3592,13 @@ arraylit(Node *n)
|
|||
idx++;
|
||||
r = listnext(&saver);
|
||||
}
|
||||
nnew->left = nodintconst(idx);
|
||||
if(b == -100) {
|
||||
// compiler counted closed array
|
||||
b = idx;
|
||||
t->bound = b;
|
||||
}
|
||||
if(b < 0)
|
||||
nnew->left = nodintconst(idx);
|
||||
return var;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ time make
|
|||
) || exit $?
|
||||
|
||||
(xcd ../doc/progs
|
||||
time run
|
||||
time ./run
|
||||
) || exit $?
|
||||
|
||||
(xcd ../test
|
||||
|
|
|
|||
Loading…
Reference in New Issue