- @i @Term.node@ = new_node(O_ID, TREENULL, TREENULL); {
- struct symbol *tmp;
- if((tmp = tab_lookup(@Term.s@, @IDENT.name@, S_PARM)) != TREENULL) {
- @Term.node@->param_index = tmp->param_index;
+
+ @i @Term.exprcount@ = 0; fprintf(stderr, "(Term)- IDENT\n");
+ @i @Term.imm@ = 0;
+ @i {
+ @Term.node@ = TREENULL;
+ if(tab_lookup(@Term.s@, @IDENT.name@, S_VAR|S_PARM) == SYMNULL) {
+ /* es handelt sich um ein feldzugriff auf this */
+ @Term.node@ = new_field(@IDENT.name@, new_param(O_ID, strdup("this"), TREENULL, TREENULL, 0, @Term.exprcount@), TREENULL, tab_lookup(@Term.s@, @IDENT.name@, S_FIELD) == SYMNULL ? -1 : tab_lookup(@Term.s@, @IDENT.name@, S_FIELD)->soffset, @Term.exprcount@);
+ } else { /* param oder var */
+ @Term.node@ = new_param(O_ID, @IDENT.name@, TREENULL, TREENULL, tab_lookup(@Term.s@, @IDENT.name@, S_PARM) == SYMNULL ? -1 : tab_lookup(@Term.s@, @IDENT.name@, S_PARM)->param_index, @Term.exprcount@);