Jacek Caban : vbscipt: Allow ':' to be a separator in select case statement.
Alexandre Julliard
julliard at winehq.org
Mon Mar 10 14:38:29 CDT 2014
Module: wine
Branch: master
Commit: aa045d51b33fabad949a339ba0c3d73342499b0b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=aa045d51b33fabad949a339ba0c3d73342499b0b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sat Mar 8 14:52:56 2014 +0100
vbscipt: Allow ':' to be a separator in select case statement.
---
dlls/vbscript/parser.y | 12 +++++++++---
dlls/vbscript/tests/lang.vbs | 20 ++++++++++++++++++++
2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/dlls/vbscript/parser.y b/dlls/vbscript/parser.y
index 3004c3b..cd69f5d 100644
--- a/dlls/vbscript/parser.y
+++ b/dlls/vbscript/parser.y
@@ -205,7 +205,7 @@ SimpleStatement
{ $$ = new_forto_statement(ctx, $2, $4, $6, $7, $9); CHECK_ERROR; }
| tFOR tEACH Identifier tIN Expression tNL StatementsNl_opt tNEXT
{ $$ = new_foreach_statement(ctx, $3, $5, $7); }
- | tSELECT tCASE Expression tNL CaseClausules tEND tSELECT
+ | tSELECT tCASE Expression StSep CaseClausules tEND tSELECT
{ $$ = new_select_statement(ctx, $3, $5); }
MemberExpression
@@ -273,8 +273,8 @@ Else_opt
CaseClausules
: /* empty */ { $$ = NULL; }
- | tCASE tELSE tNL StatementsNl { $$ = new_case_clausule(ctx, NULL, $4, NULL); }
- | tCASE ExpressionList tNL StatementsNl_opt CaseClausules
+ | tCASE tELSE StSep StatementsNl { $$ = new_case_clausule(ctx, NULL, $4, NULL); }
+ | tCASE ExpressionList StSep StatementsNl_opt CaseClausules
{ $$ = new_case_clausule(ctx, $2, $4, $5); }
Arguments_opt
@@ -442,6 +442,12 @@ ArgumentDecl
Identifier
: tIdentifier { $$ = $1; }
| tPROPERTY { $$ = propertyW; }
+
+/* Some statements accept both new line and ':' as a separator */
+StSep
+ : tNL
+ | ':'
+
%%
static int parser_error(parser_ctx_t *ctx, const char *str)
diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index 46b34c4..374a986 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
@@ -224,6 +224,10 @@ if false then x = y : if true then call ok(false, "embedded if called")
if false then x=1 else x=2 end if
+x = false
+if false then x = true : x = true
+Call ok(x = false, "x <> false")
+
if false then
ok false, "if false called"
end if
@@ -538,6 +542,22 @@ end select
select case 0
end select
+x = false
+select case 2
+ case 3,1,2,4: x = true
+ case 5,6,7
+ Call ok(false, "unexpected case")
+end select
+Call ok(x, "wrong case")
+
+x = false
+select case 2: case 5,6,7: Call ok(false, "unexpected case")
+ case 2,1,2,4
+ x = true
+ case else: Call ok(false, "unexpected case else")
+end select
+Call ok(x, "wrong case")
+
if false then
Sub testsub
x = true
More information about the wine-cvs
mailing list