codea: print tree (bessere debugausgabe)
[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
57 static void write_indent(int i)
58 {
59         int a;
60         for(a = 0; a < i; a++) {
61                 fprintf(stderr, "| ");
62         }
63 }
64
65 void write_tree(struct treenode *node, int indent)
66 {
67         write_indent(indent);
68         fprintf(stderr, "%s @ %%%s\n", o_names[node->op], node->reg);
69         if(node->kids[0] != TREENULL) {
70                 write_tree(node->kids[0], indent+1);
71         }
72         if(node->kids[1] != TREENULL) {
73                 write_tree(node->kids[1], indent+1);
74         }
75 }
76