another step toward eliminating forward declarations.
introduce NodeList* type in compiler to replace OLIST.
this clarifies where lists can and cannot occur.
list append and concatenation are now cheap.
the _r rules are gone from yacc.
rev and unrev are gone.
no more lists of lists.
the representation of assignments is a bit clunkier.
split into OAS (1=1) and OAS2 (2 or more on one side).
delete dead chanrecv3 code.
delay construction of func types.
R=ken
OCL=31745
CL=31762
diff --git a/src/cmd/8g/ggen.c b/src/cmd/8g/ggen.c
index a4bd4ca..3a44d64 100644
--- a/src/cmd/8g/ggen.c
+++ b/src/cmd/8g/ggen.c
@@ -24,7 +24,7 @@
throwreturn = sysfunc("throwreturn");
}
- if(fn->nbody == N)
+ if(fn->nbody == nil)
return;
// set up domain for labels
@@ -40,7 +40,7 @@
t = structfirst(&save, getoutarg(curfn->type));
while(t != T) {
if(t->nname != N)
- curfn->nbody = list(nod(OAS, t->nname, N), curfn->nbody);
+ curfn->nbody = concat(list1(nod(OAS, t->nname, N)), curfn->nbody);
t = structnext(&save);
}
}
@@ -64,8 +64,8 @@
afunclit(&ptxt->from);
ginit();
- gen(curfn->enter);
- gen(curfn->nbody);
+ genlist(curfn->enter);
+ genlist(curfn->nbody);
gclean();
checklabels();
@@ -200,7 +200,7 @@
i = &tmpi;
}
- gen(n->right); // args
+ genlist(n->list); // assign the args
// Can regalloc now; i is known to be addable,
// so the agen will be easy.
@@ -255,7 +255,7 @@
cgen(n->left, &afun);
}
- gen(n->right); // assign the args
+ genlist(n->list); // assign the args
t = n->left->type;
setmaxarg(t);
@@ -360,7 +360,7 @@
void
cgen_ret(Node *n)
{
- gen(n->left); // copy out args
+ genlist(n->list); // copy out args
if(hasdefer)
ginscall(deferreturn, 0);
gins(ARET, N, N);