X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gesamt_arm%2Ftree.h;fp=gesamt_arm%2Ftree.h;h=8a651e73cb195e1d94699af6877f910c6a815b60;hb=67902869dbe033c80351a8e5d07bf55ed91b6c34;hp=0000000000000000000000000000000000000000;hpb=16705cf56da9f03c383319e63ffe3fe01613bd24;p=uebersetzerbau-ss10.git diff --git a/gesamt_arm/tree.h b/gesamt_arm/tree.h new file mode 100644 index 0000000..8a651e7 --- /dev/null +++ b/gesamt_arm/tree.h @@ -0,0 +1,60 @@ +#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