%type <multiname> TYPE
%type <token> VAR
%type <token> VARIABLE
+%type <code> VAR_READ
%type <token> NEW
%type <token> X_IDENTIFIER
%type <token> MODIFIER
MAYBEEXPRESSION : '=' EXPRESSION {$$=$2;}
| {$$=code_new();}
-EXPRESSION : E %prec prec_none {$$ = $1;} //precendence below '-x'
+EXPRESSION : E %prec prec_none /*precendence below '-x'*/ {$$ = $1;}
E : CONSTANT
-E : VARIABLE %prec T_IDENTIFIER {$$ = abc_pushundefined(0); /* FIXME */}
+E : VAR_READ %prec T_IDENTIFIER {$$ = $1;}
E : NEW {$$ = abc_pushundefined(0); /* FIXME */}
E : T_REGEXP {$$ = abc_pushundefined(0); /* FIXME */}
E : FUNCTIONCALL
EXPRESSION_LIST : EXPRESSION {$$=list_new();list_append($$,$1);}
EXPRESSION_LIST : EXPRESSION_LIST ',' EXPRESSION {list_append($$,$3);}
+VAR_READ : T_IDENTIFIER {
+ int i = array_find(state->vars, $1->text);
+ if(i<0)
+ syntaxerror("unknown variable");
+ $$ = abc_getlocal(0, i);
+}
VARIABLE : T_IDENTIFIER
VARIABLE : VARIABLE '.' T_IDENTIFIER
VARIABLE : VARIABLE ".." T_IDENTIFIER // descendants