codea: bissl refactor, TODO(vorerst): stack fuer snafu_03.0 oder mehr refactor?
[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         O_NUM
23 };
24
25 static char *o_names[] = {
26         "",
27         "O_RET",
28         "O_NOT",
29         "O_SUB",
30         "O_MUL",
31         "O_OR",
32         "O_LESS",
33         "O_EQ",
34         "O_ID",
35         "O_ADD",
36         "O_NUM"
37 };
38
39 struct treenode {
40         int op;
41         struct treenode *kids[2];
42         STATEPTR_TYPE label;
43         char *name;
44         long val;
45         char *reg;
46         struct treenode *parent;
47         int skip;
48         int param_index;
49 };
50
51 typedef struct treenode *treenodep;
52
53 #define NODEPTR_TYPE treenodep
54 #define OP_LABEL(p) ((p)->op)
55 #define LEFT_CHILD(p) ((p)->kids[0])
56 #define RIGHT_CHILD(p) ((p)->kids[1])
57 #define STATE_LABEL(p) ((p)->label)
58 #define PANIC printf
59
60 struct treenode *new_node(int op, struct treenode *l, struct treenode *r);
61 struct treenode *new_number(long val);
62 struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int param_index);
63
64 #endif