gesamt: bei leeren expression, baum bis zum ersten O_CALL durchwandern
authorBernhard Urban <lewurm@gmail.com>
Wed, 9 Jun 2010 20:42:27 +0000 (22:42 +0200)
committerBernhard Urban <lewurm@gmail.com>
Wed, 9 Jun 2010 20:42:27 +0000 (22:42 +0200)
gesamt/code.bfe
gesamt/parser.y
gesamt/tree.c
gesamt/tree.h

index 11c67347e8d92fcad8aae5667f03ca14789e1ce7..a95ed5b6996ca83b07df25c842bad44043b77c4c 100644 (file)
@@ -287,7 +287,7 @@ void gen_sub_field(struct treenode *bnode)
 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));
index 4b453522a9469260b8bae5883f8300abb1a2caf3..88b808e7cfc0155da7d18a3ff137644bc125e4f8 100644 (file)
@@ -200,7 +200,9 @@ Statement:
                @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
index 7d70718c5e748ea1894630bb2ff738181eda3579..1c3f88841305506d57885490be2ddc9366e7e315 100644 (file)
@@ -147,3 +147,14 @@ void write_tree(struct treenode *node, int indent)
        }
 }
 
+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]);
+       }
+}
index 8a651e73cb195e1d94699af6877f910c6a815b60..e7fd68f9297d8ae2e6771dd12b19963fef0ed5bc 100644 (file)
@@ -56,5 +56,6 @@ struct treenode *new_call(char *name, struct treenode *l, struct treenode *r, in
 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