codea: a-b-c-d sollte jetzt passen... trick: a-b-c-d = a-(b+c+d)
[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         O_ADD
22 };
23
24 static char *o_names[] = {
25         "",
26         "O_RET",
27         "O_NOT",
28         "O_SUB",
29         "O_MUL",
30         "O_OR",
31         "O_LESS",
32         "O_EQ",
33         "O_ID",
34         "O_ADD"
35 };
36
37 struct treenode {
38         int op;
39         struct treenode *kids[2];
40         STATEPTR_TYPE label;
41         char *name;
42         long val;
43         char *reg;
44         struct treenode *parent;
45         int skip;
46         int param_index;
47 };
48
49 typedef struct treenode *treenodep;
50
51 #define NODEPTR_TYPE treenodep
52 #define OP_LABEL(p) ((p)->op)
53 #define LEFT_CHILD(p) ((p)->kids[0])
54 #define RIGHT_CHILD(p) ((p)->kids[1])
55 #define STATE_LABEL(p) ((p)->label)
56 #define PANIC printf
57
58 struct treenode *new_node(int op, struct treenode *l, struct treenode *r);
59
60 #endif