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_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_MONE", "O_ASSIGN", "O_IF", "O_BOOL", "O_CALL",
+ "O_ARG", "O_NOTHING", "O_EXPR"
};
struct treenode {
struct treenode *parent;
int param_index;
int soffset;
+ int paramges;
+ int vars;
};
typedef struct treenode *treenodep;
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);
+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);
+void just_calls(struct treenode *node);
#endif