gesamt: methodenaufrufe der art 'ID(...)'
[uebersetzerbau-ss10.git] / gesamt / tree.c
index 4dcf0d76361f91f5efc5da5f6bd026341a6febb5..7d70718c5e748ea1894630bb2ff738181eda3579 100644 (file)
@@ -15,11 +15,16 @@ static struct treenode *_new_plain(int op)
        new->parent = TREENULL;
        new->label = NULL;
        new->name = new->reg = (char *)NULL;
-       new->val = 0;
+       new->val = new->paramges = new->vars = 0;
        new->param_index = -1;
        return new;
 }
 
+struct treenode *new_nothing(void)
+{
+       return new_node(O_NOTHING, TREENULL, TREENULL);
+}
+
 struct treenode *new_node(int op, struct treenode *l, struct treenode *r)
 {
        struct treenode *new = TREENULL;
@@ -63,7 +68,20 @@ struct treenode *new_field(char *name, struct treenode *l, struct treenode *r, i
        return new;
 }
 
-struct treenode *new_call(char *name, struct treenode *l, struct treenode *r)
+struct treenode *new_arg(struct treenode *l, struct treenode *r, int soffset)
+{
+       struct treenode *new = new_node(O_ARG, l, r);
+
+#ifdef DDTREE
+       fprintf(stderr, "new_arg: %i (soffset)\n", soffset);
+#endif
+       new->soffset = soffset;
+       new->name = (char *) malloc(10);
+       sprintf(new->name, "%i", soffset);
+       return new;
+}
+
+struct treenode *new_call(char *name, struct treenode *l, struct treenode *r, int paramges, int vars)
 {
        struct treenode *new = new_node(O_CALL, l, r);
 
@@ -71,6 +89,8 @@ struct treenode *new_call(char *name, struct treenode *l, struct treenode *r)
        fprintf(stderr, "new_call\n");
 #endif
        new->name = name;
+       new->paramges = paramges;
+       new->vars = vars;
        return new;
 }