Module: wine Branch: master Commit: f3d24fdda90c0e7255df49c80b451143bd6afa5a URL: http://source.winehq.org/git/wine.git/?a=commit;h=f3d24fdda90c0e7255df49c80b...
Author: Piotr Caban piotr.caban@gmail.com Date: Fri Jul 24 09:36:23 2009 +0200
jscript: Throw more SyntaxErrors in parser.
---
dlls/jscript/parser.y | 18 +++++++++++------- dlls/jscript/tests/api.js | 2 ++ 2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y index 50092e5..a0ae471 100644 --- a/dlls/jscript/parser.y +++ b/dlls/jscript/parser.y @@ -202,7 +202,7 @@ static source_elements_t *source_elements_add_statement(source_elements_t*,state %type <statement> Finally %type <statement_list> StatementList StatementList_opt %type <parameter_list> FormalParameterList FormalParameterList_opt -%type <expr> Expression Expression_opt +%type <expr> Expression Expression_opt Expression_err %type <expr> ExpressionNoIn ExpressionNoIn_opt %type <expr> FunctionExpression %type <expr> AssignmentExpression AssignmentExpressionNoIn @@ -381,16 +381,16 @@ ExpressionStatement
/* ECMA-262 3rd Edition 12.5 */ IfStatement - : kIF left_bracket Expression right_bracket Statement kELSE Statement + : kIF left_bracket Expression_err right_bracket Statement kELSE Statement { $$ = new_if_statement(ctx, $3, $5, $7); } - | kIF left_bracket Expression right_bracket Statement %prec LOWER_THAN_ELSE + | kIF left_bracket Expression_err right_bracket Statement %prec LOWER_THAN_ELSE { $$ = new_if_statement(ctx, $3, $5, NULL); }
/* ECMA-262 3rd Edition 12.6 */ IterationStatement - : kDO Statement kWHILE left_bracket Expression right_bracket semicolon_opt + : kDO Statement kWHILE left_bracket Expression_err right_bracket semicolon_opt { $$ = new_while_statement(ctx, TRUE, $5, $2); } - | kWHILE left_bracket Expression right_bracket Statement + | kWHILE left_bracket Expression_err right_bracket Statement { $$ = new_while_statement(ctx, FALSE, $3, $5); } | kFOR left_bracket ExpressionNoIn_opt { if(!explicit_error(ctx, $3, ';')) YYABORT; } @@ -404,9 +404,9 @@ IterationStatement { if(!explicit_error(ctx, $7, ';')) YYABORT; } semicolon Expression_opt right_bracket Statement { $$ = new_for_statement(ctx, $4, NULL, $7, $10, $12); } - | kFOR left_bracket LeftHandSideExpression kIN Expression right_bracket Statement + | kFOR left_bracket LeftHandSideExpression kIN Expression_err right_bracket Statement { $$ = new_forin_statement(ctx, NULL, $3, $5, $7); } - | kFOR left_bracket kVAR VariableDeclarationNoIn kIN Expression right_bracket Statement + | kFOR left_bracket kVAR VariableDeclarationNoIn kIN Expression_err right_bracket Statement { $$ = new_forin_statement(ctx, $4, NULL, $6, $8); }
/* ECMA-262 3rd Edition 12.7 */ @@ -493,6 +493,10 @@ Expression_opt : /* empty */ { $$ = NULL; } | Expression { $$ = $1; }
+Expression_err + : Expression { $$ = $1; } + | error { set_error(ctx, IDS_SYNTAX_ERROR); YYABORT; } + /* ECMA-262 3rd Edition 11.14 */ Expression : AssignmentExpression { $$ = $1; } diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 720e7c0..53b7f92 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1331,5 +1331,7 @@ exception_test(function() {eval("while(true");}, "SyntaxError", -2146827282); exception_test(function() {test = function() {}}, "ReferenceError", -2146823280); exception_test(function() {eval("for(i=0")}, "SyntaxError", -2146827284); exception_test(function() {eval("for(i=0;i<10")}, "SyntaxError", -2146827284); +exception_test(function() {eval("while(")}, "SyntaxError", -2146827286); +exception_test(function() {eval("if(")}, "SyntaxError", -2146827286);
reportSuccess();