Piotr Caban : jscript: Throw more SyntaxErrors in parser.

Alexandre Julliard julliard at winehq.org
Fri Jul 24 08:49:39 CDT 2009


Module: wine
Branch: master
Commit: f3d24fdda90c0e7255df49c80b451143bd6afa5a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f3d24fdda90c0e7255df49c80b451143bd6afa5a

Author: Piotr Caban <piotr.caban at 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();




More information about the wine-cvs mailing list