f88851f0d32076977f87bf17d6af5e6a0d932a53
[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_NULL,
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         O_FIELD,
24         O_MTWO,
25         O_MFOUR,
26         O_MEIGHT,
27         O_MONE
28 };
29
30 static char *o_names[] = {
31         "",
32         "O_RET",
33         "O_NULL",
34         "O_SUB",
35         "O_MUL",
36         "O_OR",
37         "O_LESS",
38         "O_EQ",
39         "O_ID",
40         "O_ADD",
41         "O_NUM",
42         "O_FIELD",
43         "O_MTWO",
44         "O_MFOUR",
45         "O_MEIGHT",
46         "O_MONE"
47 };
48
49 struct treenode {
50         int op;
51         struct treenode *kids[2];
52         STATEPTR_TYPE label;
53         char *name;
54         long val;
55         char *reg;
56         struct treenode *parent;
57         int skip;
58         int param_index;
59         int exprcount;
60         int soffset;
61 };
62
63 typedef struct treenode *treenodep;
64
65 #define NODEPTR_TYPE treenodep
66 #define OP_LABEL(p) ((p)->op)
67 #define LEFT_CHILD(p) ((p)->kids[0])
68 #define RIGHT_CHILD(p) ((p)->kids[1])
69 #define STATE_LABEL(p) ((p)->label)
70 #define PANIC printf
71
72 struct treenode *new_node(int op, struct treenode *l, struct treenode *r, int exprcount);
73 struct treenode *new_number(long val, int exprcount);
74 struct treenode *new_param(int op, char *name, struct treenode *l, struct treenode *r, int param_index, int exprcount);
75 struct treenode *new_field(char *name, struct treenode *l, struct treenode *r, int soffset, int exprcount);
76 void write_tree(struct treenode *node, int ident);
77
78 #endif