enum {
O_RET=1,
- O_NOT,
+ O_NULL,
O_SUB,
O_MUL,
O_OR,
O_LESS,
O_EQ,
O_ID,
- O_ADD
+ O_ADD,
+ O_NUM,
+ O_FIELD,
+ O_MTWO,
+ O_MFOUR,
+ O_MEIGHT,
+ O_MONE
};
static char *o_names[] = {
"",
"O_RET",
- "O_NOT",
+ "O_NULL",
"O_SUB",
"O_MUL",
"O_OR",
"O_LESS",
"O_EQ",
"O_ID",
- "O_ADD"
+ "O_ADD",
+ "O_NUM",
+ "O_FIELD",
+ "O_MTWO",
+ "O_MFOUR",
+ "O_MEIGHT",
+ "O_MONE"
};
struct treenode {
struct treenode *parent;
int skip;
int param_index;
+ int exprcount;
+ int soffset;
};
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