X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=blobdiff_plain;f=codeb%2Fparser.y;h=cda1e7bfcf500e6b653db7512b7b98c621338dd3;hp=014175549e545ec4e86f746d890e0c2137e4df2d;hb=128163389fedc8bc6029a0efd522ba286eff0c9a;hpb=e212d1c8820ca8e797abec8f8377adfdbea25485 diff --git a/codeb/parser.y b/codeb/parser.y index 0141755..cda1e7b 100644 --- a/codeb/parser.y +++ b/codeb/parser.y @@ -172,8 +172,17 @@ Statement: statinout() xxputsin(@Expr.s@,) xxputsin(@Statseq.s@,) - @i @Statement.node@ = TREENULL; + + @i @Statement.node@ = new_node(O_IF, @Expr.node@, TREENULL); @i @Statement.vars@ = 0; + + @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); + /* TODO: kann ich mir das test wirklich wegan and davor sparen? */ + printf("\ttest %s1, %%rax\n\tjz if_end\n", "$"); + } + @gen @revorder(1) printf("if_end:\n"); @} | IF Expr THEN Statseq ELSE Statseq END @@ -199,6 +208,7 @@ Statement: @{ statinout() xxputsin(@Expr.s@,) + @i @Statement.vars@ = 0; @i @Statement.node@ = new_node(O_RET, @Expr.node@, TREENULL); @reg @Statement.node@->reg = @Expr.node@->reg = next_reg((char *)NULL, @Expr.gparamges@);