[hackers] [scc] cc2: pass op type to newnode() || Quentin Rameau

From: <git_AT_suckless.org>
Date: Mon, 9 May 2016 17:00:22 +0200 (CEST)

commit a662ba437aec0bcbd206ebd4637474a203dbe358
Author: Quentin Rameau <quinq_AT_fifth.space>
AuthorDate: Mon May 9 14:15:47 2016 +0200
Commit: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
CommitDate: Mon May 9 16:50:43 2016 +0200

    cc2: pass op type to newnode()
    
    Using newnode(int op) saves us a few temporary variables as we almost
    always assign an op after creating a new node.

diff --git a/cc2/arch/qbe/cgen.c b/cc2/arch/qbe/cgen.c
index 70ba9d6..84411e6 100644
--- a/cc2/arch/qbe/cgen.c
+++ b/cc2/arch/qbe/cgen.c
_AT_@ -107,11 +107,10 @@ tmpnode(Node *np)
 static Node *
 load(Node *np)
 {
- Node *new;
         int op;
+ Node *new = tmpnode(newnode(ONOP));
         Type *tp = &np->type;
 
- new = tmpnode(newnode());
         new->left = np;
         new->type = *tp;
 
_AT_@ -191,7 +190,7 @@ cast(Node *nd, Node *ns)
                 switch (ts->size) {
                 case 1:
                 case 2:
- tmp = tmpnode(newnode());
+ tmp = tmpnode(newnode(ONOP));
                         tmp->type = (ts->flags&SIGNF) ? int32type : uint32type;
                         tmp->left = ns;
                         nd->left = ns = cast(tmp, ns);
_AT_@ -228,9 +227,7 @@ cgen(Node *np)
         if (np->label) {
                 setlabel(np->label);
                 if (np->next == NULL) {
- Node *tmp = newnode();
- tmp->op = ORET;
- addstmt(tmp);
+ addstmt(newnode(ORET));
                         prevstmt();
                 }
         }
diff --git a/cc2/cc2.h b/cc2/cc2.h
index 5ca106e..cd90a20 100644
--- a/cc2/cc2.h
+++ b/cc2/cc2.h
_AT_@ -208,7 +208,7 @@ extern void apply(Node *(*fun)(Node *));
 extern void cleannodes(void);
 extern void delnode(Node *np);
 extern void deltree(Node *np);
-extern Node *newnode(void);
+extern Node *newnode(int op);
 extern Node *addstmt(Node *np);
 extern Node *prevstmt(void), *nextstmt(void);
 
diff --git a/cc2/node.c b/cc2/node.c
index 56b64fd..adccf1c 100644
--- a/cc2/node.c
+++ b/cc2/node.c
_AT_@ -23,7 +23,7 @@ static Node *freep;
 static int inhome;
 
 Node *
-newnode(void)
+newnode(int op)
 {
         struct arena *ap;
         Node *np;
_AT_@ -42,7 +42,10 @@ newnode(void)
         np = freep;
         freep = np->left;
 
- return memset(np, 0, sizeof(*np));
+ memset(np, 0, sizeof(*np));
+ np->op = op;
+
+ return np;
 }
 
 Node *
diff --git a/cc2/parser.c b/cc2/parser.c
index 09b2353..9fe2722 100644
--- a/cc2/parser.c
+++ b/cc2/parser.c
_AT_@ -179,15 +179,12 @@ getname(char *t, union tokenop u)
 static void
 symbol(char *token, union tokenop u)
 {
- Node *np;
- Symbol *sym;
+ Node *np = newnode(u.op & 0xFF);
+ Symbol *sym = getsym(atoi(token+1));
 
         sclass = u.op >> 8;
- np = newnode();
- sym = getsym(atoi(token+1));
         np->u.sym = sym;
         np->type = sym->type;
- np->op = u.op & 0xFF;
         push(np);
 }
 
_AT_@ -207,20 +204,20 @@ static void
 constant(char *token, union tokenop u)
 {
         static char letters[] = "0123456789ABCDEF";
- Node *np = newnode();
+ Node *np;
         TUINT v;
         unsigned c;
 
         ++token;
         if (*token == OSTRING) {
                 ++token;
- np->op = OSTRING;
+ np = newnode(OSTRING);
                 np->type.flags = STRF;
                 np->type.size = strlen(token);
                 np->type.align = int8type.align;
                 np->u.s = xstrdup(token);
         } else {
- np->op = OCONST;
+ np = newnode(OCONST);
                 np->type = *gettype(token++);
                 for (v = 0; c = *token++; v += c) {
                         v <<= 4;
_AT_@ -234,8 +231,8 @@ constant(char *token, union tokenop u)
 static void
 assign(char *token, union tokenop u)
 {
- int subop, op = u.op;
- Node *np = newnode();
+ int subop;
+ Node *np = newnode(u.op);
 
         switch (subop = *++token) {
         case '/':
_AT_@ -258,7 +255,6 @@ assign(char *token, union tokenop u)
         }
 
         np->u.subop = subop;
- np->op = op;
         np->type = *gettype(token);
         np->right = pop();
         np->left = pop();
_AT_@ -268,18 +264,12 @@ assign(char *token, union tokenop u)
 static void
 ternary(char *token, union tokenop u)
 {
- Node *ask, *colon;
- Type *tp;
-
- tp = gettype(token+1);
+ Node *ask = newnode(OCOLON), *colon = newnode(OASK);
+ Type *tp = gettype(token+1);
 
- colon = newnode();
- colon->op = OCOLON;
         colon->right = pop();
         colon->left = pop();
 
- ask = newnode();
- ask->op = OASK;
         ask->type = *tp;
         ask->left = pop();
         push(ask);
_AT_@ -328,10 +318,8 @@ repeat:
 static void
 oreturn(char *token, union tokenop u)
 {
- Node *np;
+ Node *np = newnode(u.op);
 
- np = newnode();
- np->op = u.op;
         eval(strtok(NULL, "\t\n"));
         if (!empty())
                 np->left = pop();
_AT_@ -341,10 +329,8 @@ oreturn(char *token, union tokenop u)
 static void
 jump(char *token, union tokenop u)
 {
- Node *np, *aux;
+ Node *aux, *np = newnode(u.op);
 
- np = newnode();
- np->op = u.op;
         eval(strtok(NULL, "\t\n"));
 
         if (u.op != OJMP)
_AT_@ -358,10 +344,8 @@ jump(char *token, union tokenop u)
 static void
 casetbl(char *token, union tokenop u)
 {
- Node *np, *aux;
+ Node *np = newnode(u.op);
 
- np = newnode();
- np->op = u.op;
         eval(strtok(NULL, "\t\n"));
         np->left = pop();
         push(np);
_AT_@ -370,19 +354,14 @@ casetbl(char *token, union tokenop u)
 static void
 loop(char *token, union tokenop u)
 {
- Node *np;
-
- np = newnode();
- np->op = u.op;
- push(np);
+ push(newnode(u.op));
 }
 
 static void
 unary(char *token, union tokenop u)
 {
- Node *np = newnode();
+ Node *np = newnode(u.op);
 
- np->op = u.op;
         np->type = *gettype(token+1);
         np->left = pop();
         np->right = NULL;
_AT_@ -392,7 +371,7 @@ unary(char *token, union tokenop u)
 static void
 call(char *token, union tokenop u)
 {
- Node *np, *par, *fun;
+ Node *np, *par, *fun = newnode(u.op);
 
         for (par = NULL;; par = np) {
                 np = pop();
_AT_@ -400,8 +379,7 @@ call(char *token, union tokenop u)
                         break;
                 np->right = par;
         }
- fun = newnode();
- fun->op = u.op;
+
         fun->type = *gettype(token+1);
         fun->left = np;
         fun->right = par;
_AT_@ -411,9 +389,8 @@ call(char *token, union tokenop u)
 static void
 binary(char *token, union tokenop u)
 {
- Node *np = newnode();
+ Node *np = newnode(u.op);
 
- np->op = u.op;
         np->type = *gettype(token+1);
         np->right = pop();
         np->left = pop();
Received on Mon May 09 2016 - 17:00:22 CEST

This archive was generated by hypermail 2.3.0 : Mon May 09 2016 - 17:12:31 CEST