begin: ret # 0 # printf("\n");
begin: assign # 0 #
begin: ifstat # 0 #
-begin: args # 0 #
+begin: expr # 0 #
assign: O_ASSIGN(expr, O_ID) # 1 # KIDREG2PARM(1); printf("\tmovq %%%s, %%%s\n", BN_REG, KID_REG(1));
@i @Statement.node@ = new_node(O_EXPR, @Expr.node@, TREENULL);
@reg @Statement.node@->reg = @Expr.node@->reg = next_reg((char *)NULL, @Expr.gparamges@);
- @gen write_tree(@Statement.node@, 0); burm_label(@Statement.node@); burm_reduce(@Statement.node@, 1);
+ @gen {
+ just_calls(@Statement.node@);
+ }
@}
| IF Expr THEN Statseq END
}
}
+void just_calls(struct treenode *node)
+{
+ if(node == TREENULL) {
+ return;
+ } else if(node->op == O_CALL) {
+ write_tree(node, 0); burm_label(node); burm_reduce(node, 1);
+ } else {
+ just_calls(node->kids[0]);
+ just_calls(node->kids[1]);
+ }
+}
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