Piotr Caban : jscript: Added "Expected ')'" error.

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


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

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Fri Jul 24 09:36:13 2009 +0200

jscript: Added "Expected ')'" error.

---

 dlls/jscript/jscript_En.rc |    1 +
 dlls/jscript/parser.y      |   28 ++++++++++++++++------------
 dlls/jscript/resource.h    |    1 +
 dlls/jscript/tests/api.js  |    3 +++
 4 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/dlls/jscript/jscript_En.rc b/dlls/jscript/jscript_En.rc
index 325df41..d2470c7 100644
--- a/dlls/jscript/jscript_En.rc
+++ b/dlls/jscript/jscript_En.rc
@@ -28,6 +28,7 @@ STRINGTABLE DISCARDABLE
     IDS_ARG_NOT_OPT         "Argument not optional"
     IDS_SYNTAX_ERROR        "Syntax error"
     IDS_LBRACKET            "Expected '('"
+    IDS_RBRACKET            "Expected ')'"
     IDS_NOT_FUNC            "Function expected"
     IDS_NOT_DATE            "'[object]' is not a date object"
     IDS_NOT_NUM             "Number expected"
diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y
index 3777478..bcb2c24 100644
--- a/dlls/jscript/parser.y
+++ b/dlls/jscript/parser.y
@@ -267,7 +267,7 @@ SourceElements
 
 /* ECMA-262 3rd Edition    13 */
 FunctionExpression
-        : KFunction Identifier_opt left_bracket FormalParameterList_opt ')' '{' FunctionBody '}'
+        : KFunction Identifier_opt left_bracket FormalParameterList_opt right_bracket '{' FunctionBody '}'
                                 { $$ = new_function_expression(ctx, $2, $4, $7, $1, $8-$1+1); }
 
 KFunction
@@ -380,24 +380,24 @@ ExpressionStatement
 
 /* ECMA-262 3rd Edition    12.5 */
 IfStatement
-        : kIF left_bracket Expression ')' Statement kELSE Statement
+        : kIF left_bracket Expression right_bracket Statement kELSE Statement
                                 { $$ = new_if_statement(ctx, $3, $5, $7); }
-        | kIF left_bracket Expression ')' Statement %prec LOWER_THAN_ELSE
+        | kIF left_bracket Expression 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 ')' semicolon_opt
+        : kDO Statement kWHILE left_bracket Expression right_bracket semicolon_opt
                                 { $$ = new_while_statement(ctx, TRUE, $5, $2); }
-        | kWHILE left_bracket Expression ')' Statement
+        | kWHILE left_bracket Expression right_bracket Statement
                                 { $$ = new_while_statement(ctx, FALSE, $3, $5); }
-        | kFOR left_bracket ExpressionNoIn_opt ';' Expression_opt ';' Expression_opt ')' Statement
+        | kFOR left_bracket ExpressionNoIn_opt ';' Expression_opt ';' Expression_opt right_bracket Statement
                                 { $$ = new_for_statement(ctx, NULL, $3, $5, $7, $9); }
-        | kFOR left_bracket kVAR VariableDeclarationListNoIn ';' Expression_opt ';' Expression_opt ')' Statement
+        | kFOR left_bracket kVAR VariableDeclarationListNoIn ';' Expression_opt ';' Expression_opt right_bracket Statement
                                 { $$ = new_for_statement(ctx, $4, NULL, $6, $8, $10); }
-        | kFOR left_bracket LeftHandSideExpression kIN Expression ')' Statement
+        | kFOR left_bracket LeftHandSideExpression kIN Expression right_bracket Statement
                                 { $$ = new_forin_statement(ctx, NULL, $3, $5, $7); }
-        | kFOR left_bracket kVAR VariableDeclarationNoIn kIN Expression ')' Statement
+        | kFOR left_bracket kVAR VariableDeclarationNoIn kIN Expression right_bracket Statement
                                 { $$ = new_forin_statement(ctx, $4, NULL, $6, $8); }
 
 /* ECMA-262 3rd Edition    12.7 */
@@ -417,7 +417,7 @@ ReturnStatement
 
 /* ECMA-262 3rd Edition    12.10 */
 WithStatement
-        : kWITH left_bracket Expression ')' Statement
+        : kWITH left_bracket Expression right_bracket Statement
                                 { $$ = new_with_statement(ctx, $3, $5); }
 
 /* ECMA-262 3rd Edition    12.12 */
@@ -427,7 +427,7 @@ LabelledStatement
 
 /* ECMA-262 3rd Edition    12.11 */
 SwitchStatement
-        : kSWITCH left_bracket Expression ')' CaseBlock
+        : kSWITCH left_bracket Expression right_bracket CaseBlock
                                 { $$ = new_switch_statement(ctx, $3, $5); }
 
 /* ECMA-262 3rd Edition    12.11 */
@@ -472,7 +472,7 @@ TryStatement
 
 /* ECMA-262 3rd Edition    12.14 */
 Catch
-        : kCATCH left_bracket tIdentifier ')' Block
+        : kCATCH left_bracket tIdentifier right_bracket Block
                                 { $$ = new_catch_block(ctx, $3, $5); }
 
 /* ECMA-262 3rd Edition    12.14 */
@@ -802,6 +802,10 @@ left_bracket
         : '('
         | error                 { set_error(ctx, IDS_LBRACKET); YYABORT; }
 
+right_bracket
+        : ')'
+        | error                 { set_error(ctx, IDS_RBRACKET); YYABORT; }
+
 %%
 
 static BOOL allow_auto_semicolon(parser_ctx_t *ctx)
diff --git a/dlls/jscript/resource.h b/dlls/jscript/resource.h
index c0e73f9..5fcbbae 100644
--- a/dlls/jscript/resource.h
+++ b/dlls/jscript/resource.h
@@ -24,6 +24,7 @@
 #define IDS_ARG_NOT_OPT                     0x01c1
 #define IDS_SYNTAX_ERROR                    0x03EA
 #define IDS_LBRACKET                        0x03ED
+#define IDS_RBRACKET                        0x03EE
 #define IDS_NOT_FUNC                        0x138A
 #define IDS_NOT_DATE                        0x138E
 #define IDS_NOT_NUM                         0x1389
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index efc8578..3ccb362 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1325,5 +1325,8 @@ exception_test(function() {eval("while");}, "SyntaxError", -2146827283);
 exception_test(function() {eval("for");}, "SyntaxError", -2146827283);
 exception_test(function() {eval("with");}, "SyntaxError", -2146827283);
 exception_test(function() {eval("switch");}, "SyntaxError", -2146827283);
+exception_test(function() {eval("if(false");}, "SyntaxError", -2146827282);
+exception_test(function() {eval("for(i=0; i<10; i++");}, "SyntaxError", -2146827282);
+exception_test(function() {eval("while(true");}, "SyntaxError", -2146827282);
 
 reportSuccess();




More information about the wine-cvs mailing list