#ifndef __TREE_H #define __TREE_H #define TREENULL (struct treenode *)NULL #define TREESIZE (sizeof(struct treenode)) #define TREECAST struct treenode * #ifndef BFEHAX typedef struct burm_state *STATEPTR_TYPE; #endif enum { O_RET=1, O_NULL, O_SUB, O_MUL, O_OR=5, O_LESS, O_EQ, O_ID, O_ADD, O_NUM=10, O_FIELD, O_MTWO, O_MFOUR, O_MEIGHT, O_MONE=15, O_ASSIGN, O_IF, O_BOOL, O_CALL, O_ARG=20, O_NOTHING, O_EXPR }; static char *o_names[] = { "", "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", "O_ASSIGN", "O_IF", "O_BOOL", "O_CALL", "O_ARG", "O_NOTHING", "O_EXPR" }; struct treenode { int op; struct treenode *kids[2]; STATEPTR_TYPE label; char *name; long val; char *reg; struct treenode *parent; int param_index; int soffset; int paramges; int vars; }; typedef struct treenode *treenodep; #define NODEPTR_TYPE treenodep #define OP_LABEL(p) ((p)->op) #define LEFT_CHILD(p) ((p)->kids[0]) #define RIGHT_CHILD(p) ((p)->kids[1]) #define STATE_LABEL(p) ((p)->label) #define PANIC printf struct treenode *new_node(int op, struct treenode *l, struct treenode *r); struct treenode *new_number(long val); struct treenode *new_param(int op, char *name, struct treenode *l, struct treenode *r, int param_index); struct treenode *new_field(char *name, struct treenode *l, struct treenode *r, int soffset); struct treenode *new_call(char *name, struct treenode *l, struct treenode *r, int paramges, int vars); struct treenode *new_arg(struct treenode *l, struct treenode *r, int soffset); struct treenode *new_nothing(void); void write_tree(struct treenode *node, int ident); #endif