git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed number parsing
[swftools.git]
/
lib
/
as3
/
parser.y
diff --git
a/lib/as3/parser.y
b/lib/as3/parser.y
index
61bbdfc
..
6055295
100644
(file)
--- a/
lib/as3/parser.y
+++ b/
lib/as3/parser.y
@@
-128,6
+128,7
@@
%type <multiname> TYPE
%type <token> VAR
%type <token> VARIABLE
%type <multiname> TYPE
%type <token> VAR
%type <token> VARIABLE
+%type <code> VAR_READ
%type <token> NEW
%type <token> X_IDENTIFIER
%type <token> MODIFIER
%type <token> NEW
%type <token> X_IDENTIFIER
%type <token> MODIFIER
@@
-606,10
+607,10
@@
VARIABLE_DECLARATION : MODIFIERS VAR T_IDENTIFIER MAYBETYPE MAYBEEXPRESSION {
MAYBEEXPRESSION : '=' EXPRESSION {$$=$2;}
| {$$=code_new();}
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 : 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
E : NEW {$$ = abc_pushundefined(0); /* FIXME */}
E : T_REGEXP {$$ = abc_pushundefined(0); /* FIXME */}
E : FUNCTIONCALL
@@
-653,6
+654,12
@@
MAYBE_EXPRESSION_LIST : EXPRESSION_LIST
EXPRESSION_LIST : EXPRESSION {$$=list_new();list_append($$,$1);}
EXPRESSION_LIST : EXPRESSION_LIST ',' EXPRESSION {list_append($$,$3);}
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
VARIABLE : T_IDENTIFIER
VARIABLE : VARIABLE '.' T_IDENTIFIER
VARIABLE : VARIABLE ".." T_IDENTIFIER // descendants