begin: ret # 0 # printf("// end\n");
ret: O_RET(expr) # 1 # move(bnode->reg, "rax"); ret();
-expr: O_ID # 1 # if(bnode->param_index!=0) move(param_reg(bnode->param_index), bnode->reg);
+expr: O_ID # 1 # if(bnode->param_index > -1) move(param_reg(bnode->param_index), bnode->reg);
%%
FeldID:
IDENT FeldID
@{
- @i @FeldID.0.f@ = tab_add_symbol(@FeldID.1.f@, @IDENT.name@, S_FIELD, 1, 0);
+ @i @FeldID.0.f@ = tab_add_symbol(@FeldID.1.f@, @IDENT.name@, S_FIELD, 1, -1);
@}
|
@{
/* tab_clone ist hier noetig, vgl. folgendes statement
* > var x := x - 1; */
- @i @Statement.sout@ = tab_add_symbol(tab_clone(@Statement.sin@), @IDENT.name@, S_VAR, 1, 0);
+ @i @Statement.sout@ = tab_add_symbol(tab_clone(@Statement.sin@), @IDENT.name@, S_VAR, 1, -1);
xxputsin(@Expr.s@,)
@i @Statement.node@ = TREENULL;
@}
| THIS
@{
- @i @Term.node@ = TREENULL;
+ @i @Term.node@ = new_node(O_ID, TREENULL, TREENULL); @Term.node@->param_index = 0;
@reg fprintf(stderr, "wtf4\n");
@}