X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Fparser.y;h=67f800d34e34b7d4ac78a3321f6bb0a57fc7fd48;hb=5564aa996b3d6fc258138a7bafc4537431db1c48;hp=ed5b001b5a4ff303c83b028a40a8c94b63f47d27;hpb=71b5bc980e9f3fa962167da70043f0b16e253906;p=swftools.git diff --git a/lib/as3/parser.y b/lib/as3/parser.y index ed5b001..67f800d 100644 --- a/lib/as3/parser.y +++ b/lib/as3/parser.y @@ -33,7 +33,7 @@ #include "code.h" #include "opcodes.h" #include "compiler.h" -#include "ast.h" +#include "expr.h" extern int a3_lex(); @@ -193,7 +193,7 @@ extern int a3_lex(); %type EXPRESSION NONCOMMAEXPRESSION %type MAYBEEXPRESSION %type DELETE -%type E +%type E COMMA_EXPRESSION %type FOR FOR_IN IF WHILE DO_WHILE MAYBEELSE BREAK RETURN CONTINUE TRY %type INNERFUNCTION %type USE_NAMESPACE @@ -2993,16 +2993,21 @@ RETURN: "return" EXPRESSION { // ----------------------- expression types ------------------------------------- -NONCOMMAEXPRESSION : E %prec below_minus {$$ = node_read($1);} -EXPRESSION : E %prec below_minus {$$ = node_read($1);} -EXPRESSION : EXPRESSION ',' E %prec below_minus { - $$.c = $1.c; - $$.c = cut_last_push($$.c); - typedcode_t v = node_read($3); - $$.c = code_append($$.c,v.c); - $$.t = v.t; +NONCOMMAEXPRESSION : E %prec below_minus { + $$ = node_read($1); +} +EXPRESSION : COMMA_EXPRESSION { + $$ = node_read($1); +} +COMMA_EXPRESSION : E %prec below_minus { + $$ = mkmultinode(&node_comma, $1); +} +COMMA_EXPRESSION : COMMA_EXPRESSION ',' E %prec below_minus { + $$ = multinode_extend($1, $3); +} +VOIDEXPRESSION : E %prec below_minus { + $$ = node_exec($1); } -VOIDEXPRESSION : E %prec below_minus { $$=node_exec($1); } VOIDEXPRESSION : VOIDEXPRESSION ',' E %prec below_minus { $$ = $1; $$ = code_append($$, node_exec($3)); @@ -3107,7 +3112,7 @@ E : E "is" E {$$ = mknode2(&node_is, $1, $3);} E : "typeof" '(' E ')' {$$ = mknode1(&node_typeof, $3);} E : "void" E {$$ = mknode1(&node_void, $2);} E : "void" { $$ = mkconstnode(constant_new_undefined());} -E : '(' EXPRESSION ')' { /*allow commas in here, too */ $$=mkcodenode($2);} +E : '(' COMMA_EXPRESSION ')' { $$=$2;} E : '-' E {$$ = mknode1(&node_neg, $2);} E : E '[' E ']' {$$ = mknode2(&node_arraylookup, $1,$3);} E : E "*=" E {$$ = mknode2(&node_muleq, $1, $3);}