Jacek Caban : vbscript: Fixed parsing if statements with empty body.

Alexandre Julliard julliard at winehq.org
Tue Sep 18 14:04:29 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep 18 12:25:14 2012 +0200

vbscript: Fixed parsing if statements with empty body.

---

 dlls/vbscript/parser.y       |    6 +++---
 dlls/vbscript/tests/lang.vbs |   16 ++++++++++++++++
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/dlls/vbscript/parser.y b/dlls/vbscript/parser.y
index baac315..d5a9934 100644
--- a/dlls/vbscript/parser.y
+++ b/dlls/vbscript/parser.y
@@ -228,7 +228,7 @@ Step_opt
     | tSTEP Expression                      { $$ = $2; }
 
 IfStatement
-    : tIF Expression tTHEN tNL StatementsNl ElseIfs_opt Else_opt tEND tIF
+    : tIF Expression tTHEN tNL StatementsNl_opt ElseIfs_opt Else_opt tEND tIF
                                             { $$ = new_if_statement(ctx, $2, $5, $6, $7); CHECK_ERROR; }
     | tIF Expression tTHEN Statement        { $$ = new_if_statement(ctx, $2, $4, NULL, NULL); CHECK_ERROR; }
     | tIF Expression tTHEN Statement tELSE Statement EndIf_opt
@@ -247,12 +247,12 @@ ElseIfs
     | ElseIf ElseIfs                        { $1->next = $2; $$ = $1; }
 
 ElseIf
-    : tELSEIF Expression tTHEN tNL StatementsNl
+    : tELSEIF Expression tTHEN tNL StatementsNl_opt
                                             { $$ = new_elseif_decl(ctx, $2, $5); }
 
 Else_opt
     : /* empty */                           { $$ = NULL; }
-    | tELSE tNL StatementsNl                { $$ = $3; }
+    | tELSE tNL StatementsNl_opt            { $$ = $3; }
 
 CaseClausules
     : /* empty */                          { $$ = NULL; }
diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index 90d5304..fd93df6 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
@@ -290,6 +290,22 @@ while not (x and y)
 wend
 call ok((x and y), "x or y is false after while")
 
+if false then
+' empty body
+end if
+
+if false then
+    x = false
+elseif true then
+' empty body
+end if
+
+if false then
+    x = false
+else
+' empty body
+end if
+
 while false
 wend
 




More information about the wine-cvs mailing list