codea: immediate values gehen auch fuer subtraktion
[uebersetzerbau-ss10.git] / codea / tree.c
index 8807c785bcbd42de98f3997bbce7cc1a4342a0ec..1490ae6302c0b58891775605fa0977f7a26229f6 100644 (file)
@@ -6,9 +6,22 @@
 #define DDTREE
 #endif
 
-struct treenode *new_node(int op, struct treenode *l, struct treenode *r)
+static struct treenode *_new_plain(int op)
 {
        struct treenode *new = (TREECAST) malloc(TREESIZE);
+       new->op = op;
+       new->kids[0] = new->kids[1] = TREENULL;
+       new->parent = TREENULL;
+       new->label = NULL;
+       new->name = new->reg = (char *)NULL;
+       new->val = new->skip = 0;
+       new->param_index = -1;
+       return new;
+}
+
+struct treenode *new_node(int op, struct treenode *l, struct treenode *r)
+{
+       struct treenode *new = _new_plain(op);
 
 #ifdef DDTREE
        fprintf(stderr, "new_node: %i (%s)\n", op, o_names[op]);
@@ -16,8 +29,17 @@ struct treenode *new_node(int op, struct treenode *l, struct treenode *r)
 
        new->kids[0] = l;
        new->kids[1] = r;
-       new->op = op;
        new->name = (char *)NULL;
        return new;
 }
 
+struct treenode *new_number(long val)
+{
+       struct treenode *new = _new_plain(O_NUM);
+#ifdef DDTREE
+       fprintf(stderr, "new_number: %i\n", val);
+#endif
+       new->val = val;
+       return new;
+}
+