4c4a0d91a44feb59bbc0c41b32ec09a844af50f7
[uebersetzerbau-ss10.git] / codea / tree.h
1 #ifndef __TREE_H
2 #define __TREE_H
3
4 #define TREENULL (struct treenode *)NULL
5 #define TREESIZE (sizeof(struct treenode))
6 #define TREECAST struct treenode *
7
8 #ifndef BFEHAX
9 typedef struct burm_state *STATEPTR_TYPE;
10 #endif
11
12 enum {
13         O_RET=1,
14         O_NOT,
15         O_SUB,
16         O_MUL,
17         O_OR,
18         O_LESS,
19         O_EQ,
20         O_ID
21 };
22
23 static char *o_names[] = {
24         "",
25         "O_RET",
26         "O_NOT",
27         "O_SUB",
28         "O_MUL",
29         "O_OR",
30         "O_LESS",
31         "O_EQ",
32         "O_ID"
33 };
34
35 struct treenode {
36         int op;
37         struct treenode *kids[2];
38         STATEPTR_TYPE label;
39         char *name;
40         long val;
41         char *reg;
42         struct treenode *parent;
43         int skip;
44         int param_index;
45 };
46
47 typedef struct treenode *treenodep;
48
49 #define NODEPTR_TYPE treenodep
50 #define OP_LABEL(p) ((p)->op)
51 #define LEFT_CHILD(p) ((p)->kids[0])
52 #define RIGHT_CHILD(p) ((p)->kids[1])
53 #define STATE_LABEL(p) ((p)->label)
54 #define PANIC printf
55
56 struct treenode *new_node(int op, struct treenode *l, struct treenode *r);
57
58 #endif