codea: super mega opt fuer einen sub spezialfall
[uebersetzerbau-ss10.git] / codea / tree.h
index 152b7c1a215407923784d22c04b7f01a312e6ded..f88851f0d32076977f87bf17d6af5e6a0d932a53 100644 (file)
@@ -10,12 +10,40 @@ typedef struct burm_state *STATEPTR_TYPE;
 #endif
 
 enum {
-       O_RETURN=1
+       O_RET=1,
+       O_NULL,
+       O_SUB,
+       O_MUL,
+       O_OR,
+       O_LESS,
+       O_EQ,
+       O_ID,
+       O_ADD,
+       O_NUM,
+       O_FIELD,
+       O_MTWO,
+       O_MFOUR,
+       O_MEIGHT,
+       O_MONE
 };
 
-static char o_names[100][100] = {
+static char *o_names[] = {
        "",
-       "O_RETURN"
+       "O_RET",
+       "O_NULL",
+       "O_SUB",
+       "O_MUL",
+       "O_OR",
+       "O_LESS",
+       "O_EQ",
+       "O_ID",
+       "O_ADD",
+       "O_NUM",
+       "O_FIELD",
+       "O_MTWO",
+       "O_MFOUR",
+       "O_MEIGHT",
+       "O_MONE"
 };
 
 struct treenode {
@@ -28,6 +56,8 @@ struct treenode {
        struct treenode *parent;
        int skip;
        int param_index;
+       int exprcount;
+       int soffset;
 };
 
 typedef struct treenode *treenodep;
@@ -39,6 +69,10 @@ typedef struct treenode *treenodep;
 #define STATE_LABEL(p) ((p)->label)
 #define PANIC printf
 
-struct treenode *new_node(int op, struct treenode *l, struct treenode *r);
+struct treenode *new_node(int op, struct treenode *l, struct treenode *r, int exprcount);
+struct treenode *new_number(long val, int exprcount);
+struct treenode *new_param(int op, char *name, struct treenode *l, struct treenode *r, int param_index, int exprcount);
+struct treenode *new_field(char *name, struct treenode *l, struct treenode *r, int soffset, int exprcount);
+void write_tree(struct treenode *node, int ident);
 
 #endif