Dmitry Kislyuk : vbscript: Allow colons at the end of first line of loops.

Alexandre Julliard julliard at winehq.org
Wed May 3 16:06:10 CDT 2017


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

Author: Dmitry Kislyuk <dimaki at rocketmail.com>
Date:   Wed May  3 12:36:25 2017 +0200

vbscript: Allow colons at the end of first line of loops.

Signed-off-by: Dmitry Kislyuk <dimaki at rocketmail.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/vbscript/parser.y       | 12 ++++++------
 dlls/vbscript/tests/lang.vbs | 32 +++++++++++++++++++++++++++++++-
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/dlls/vbscript/parser.y b/dlls/vbscript/parser.y
index 9606592..6b303ee 100644
--- a/dlls/vbscript/parser.y
+++ b/dlls/vbscript/parser.y
@@ -180,15 +180,15 @@ SimpleStatement
                                             { $1->args = $2; $$ = new_assign_statement(ctx, $1, $4); CHECK_ERROR; }
     | tDIM DimDeclList                      { $$ = new_dim_statement(ctx, $2); CHECK_ERROR; }
     | IfStatement                           { $$ = $1; }
-    | tWHILE Expression tNL StatementsNl_opt tWEND
+    | tWHILE Expression StSep StatementsNl_opt tWEND
                                             { $$ = new_while_statement(ctx, STAT_WHILE, $2, $4); CHECK_ERROR; }
-    | tDO DoType Expression tNL StatementsNl_opt tLOOP
+    | tDO DoType Expression StSep StatementsNl_opt tLOOP
                                             { $$ = new_while_statement(ctx, $2 ? STAT_WHILELOOP : STAT_UNTIL, $3, $5);
                                               CHECK_ERROR; }
-    | tDO tNL StatementsNl_opt tLOOP DoType Expression
+    | tDO StSep StatementsNl_opt tLOOP DoType Expression
                                             { $$ = new_while_statement(ctx, $5 ? STAT_DOWHILE : STAT_DOUNTIL, $6, $3);
                                               CHECK_ERROR; }
-    | tDO tNL StatementsNl_opt tLOOP        { $$ = new_while_statement(ctx, STAT_DOWHILE, NULL, $3); CHECK_ERROR; }
+    | tDO StSep StatementsNl_opt tLOOP      { $$ = new_while_statement(ctx, STAT_DOWHILE, NULL, $3); CHECK_ERROR; }
     | FunctionDecl                          { $$ = new_function_statement(ctx, $1); CHECK_ERROR; }
     | tEXIT tDO                             { $$ = new_statement(ctx, STAT_EXITDO, 0); CHECK_ERROR; }
     | tEXIT tFOR                            { $$ = new_statement(ctx, STAT_EXITFOR, 0); CHECK_ERROR; }
@@ -201,9 +201,9 @@ SimpleStatement
     | tON tERROR tRESUME tNEXT              { $$ = new_onerror_statement(ctx, TRUE); CHECK_ERROR; }
     | tON tERROR tGOTO '0'                  { $$ = new_onerror_statement(ctx, FALSE); CHECK_ERROR; }
     | tCONST ConstDeclList                  { $$ = new_const_statement(ctx, $2); CHECK_ERROR; }
-    | tFOR Identifier '=' Expression tTO Expression Step_opt tNL StatementsNl_opt tNEXT
+    | tFOR Identifier '=' Expression tTO Expression Step_opt StSep StatementsNl_opt tNEXT
                                             { $$ = new_forto_statement(ctx, $2, $4, $6, $7, $9); CHECK_ERROR; }
-    | tFOR tEACH Identifier tIN Expression tNL StatementsNl_opt tNEXT
+    | tFOR tEACH Identifier tIN Expression StSep StatementsNl_opt tNEXT
                                             { $$ = new_foreach_statement(ctx, $3, $5, $7); }
     | tSELECT tCASE Expression StSep CaseClausules tEND tSELECT
                                             { $$ = new_select_statement(ctx, $3, $5); }
diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index b23b709..23402cd 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
@@ -325,6 +325,11 @@ end if
 while false
 wend
 
+x = 0
+WHILE x < 3 : x = x + 1
+Wend
+Call ok(x = 3, "x not equal to 3")
+
 x = false
 y = false
 do while not (x and y)
@@ -343,6 +348,11 @@ do while true
     ok false, "exit do didn't work"
 loop
 
+x = 0
+Do While x < 2 : x = x + 1
+Loop
+Call ok(x = 2, "x not equal to 2")
+
 x = false
 y = false
 do until x and y
@@ -361,6 +371,11 @@ do until false
     ok false, "exit do didn't work"
 loop
 
+x = 0
+Do: :: x = x + 2
+Loop Until x = 4
+Call ok(x = 4, "x not equal to 4")
+
 x = false
 do
     if x then exit do
@@ -368,6 +383,14 @@ do
 loop
 call ok(x, "x is false after do..loop?")
 
+x = 0
+Do :If x = 6 Then
+        Exit Do
+    End If
+    x = x + 3
+Loop
+Call ok(x = 6, "x not equal to 6")
+
 x = false
 y = false
 do
@@ -451,6 +474,11 @@ for x = 5 to 8 step z
 next
 Call ok(y = "for7: 5 6 7 8", "y = " & y)
 
+z = 0
+For x = 10 To 18 Step 2 : : z = z + 1
+Next
+Call ok(z = 5, "z not equal to 5")
+
 y = "for8:"
 for x = 5 to 8
     y = y & " " & x
@@ -482,11 +510,13 @@ wend
 Call collectionObj.reset()
 y = 0
 x = 10
-for each x in collectionObj
+z = 0
+for each x in collectionObj : z = z + 2
     y = y+1
     Call ok(x = y, "x <> y")
 next
 Call ok(y = 3, "y = " & y)
+Call ok(z = 6, "z = " & z)
 Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
 
 Call collectionObj.reset()




More information about the wine-cvs mailing list