codea: bissl refactor, TODO(vorerst): stack fuer snafu_03.0 oder mehr refactor?
[uebersetzerbau-ss10.git] / codea / tree.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "tree.h"
4
5 #if 0
6 #define DDTREE
7 #endif
8
9 static struct treenode *_new_plain(int op)
10 {
11         struct treenode *new = (TREECAST) malloc(TREESIZE);
12         new->op = op;
13         new->kids[0] = new->kids[1] = TREENULL;
14         new->parent = TREENULL;
15         new->label = NULL;
16         new->name = new->reg = (char *)NULL;
17         new->val = new->skip = 0;
18         new->param_index = -1;
19         return new;
20 }
21
22 struct treenode *new_node(int op, struct treenode *l, struct treenode *r)
23 {
24         struct treenode *new = _new_plain(op);
25
26 #ifdef DDTREE
27         fprintf(stderr, "new_node: %i (%s)\n", op, o_names[op]);
28 #endif
29
30         new->kids[0] = l;
31         new->kids[1] = r;
32         new->name = (char *)NULL;
33         return new;
34 }
35
36 struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int param_index)
37 {
38         struct treenode *new = new_node(op, l, r);
39
40 #ifdef DDTREE
41         fprintf(stderr, "new_param: %i (index)\n", param_index);
42 #endif
43         new->param_index = param_index;
44         return new;
45 }
46
47 struct treenode *new_number(long val)
48 {
49         struct treenode *new = _new_plain(O_NUM);
50 #ifdef DDTREE
51         fprintf(stderr, "new_number: %i\n", val);
52 #endif
53         new->val = val;
54         return new;
55 }
56