X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=codea%2Ftree.c;h=19d750c25b4de270e887f873daabdd35388431ae;hb=146f7d2d6955e2a436bbd33e9bd4126776451103;hp=e480fa7a0943983b56fb41187df7dc6074f78cfe;hpb=f7e4c1db1ca6885f09103799c59da9dbe969dec5;p=uebersetzerbau-ss10.git diff --git a/codea/tree.c b/codea/tree.c index e480fa7..19d750c 100644 --- a/codea/tree.c +++ b/codea/tree.c @@ -14,12 +14,12 @@ static struct treenode *_new_plain(int op) new->parent = TREENULL; new->label = NULL; new->name = new->reg = (char *)NULL; - new->val = new->skip = 0; + new->val = new->skip = new->exprcount = 0; new->param_index = -1; return new; } -struct treenode *new_node(int op, struct treenode *l, struct treenode *r) +struct treenode *new_node(int op, struct treenode *l, struct treenode *r, int exprcount) { struct treenode *new = _new_plain(op); @@ -30,12 +30,13 @@ struct treenode *new_node(int op, struct treenode *l, struct treenode *r) new->kids[0] = l; new->kids[1] = r; new->name = (char *)NULL; + new->exprcount = exprcount; return new; } -struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int param_index) +struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int param_index, int exprcount) { - struct treenode *new = new_node(op, l, r); + struct treenode *new = new_node(op, l, r, exprcount); #ifdef DDTREE fprintf(stderr, "new_param: %i (index)\n", param_index); @@ -44,13 +45,14 @@ struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int p return new; } -struct treenode *new_number(long val) +struct treenode *new_number(long val, int exprcount) { struct treenode *new = _new_plain(O_NUM); #ifdef DDTREE fprintf(stderr, "new_number: %i\n", val); #endif new->val = val; + new->exprcount = exprcount; return new; } @@ -65,7 +67,7 @@ static void write_indent(int i) void write_tree(struct treenode *node, int indent) { write_indent(indent); - fprintf(stderr, "%s @ %%%s\n", o_names[node->op], node->reg); + fprintf(stderr, "%s @ %%%s (%i)\n", o_names[node->op], node->reg, node->exprcount); if(node->kids[0] != TREENULL) { write_tree(node->kids[0], indent+1); }