cmd: When 'if' condition is not met, ignore the next commands in the list.

Signed-off-by: Carlos Rafael Ramirez <crramirez@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Carlos Rafael Ramirez 2016-10-31 18:57:33 -05:00 committed by Alexandre Julliard
parent aa55206626
commit 55be713d76
3 changed files with 27 additions and 0 deletions

View File

@ -1574,6 +1574,9 @@ static void WCMD_part_execute(CMD_LIST **cmdList, const WCHAR *firstcmd,
} }
} }
if (curPosition == *cmdList) *cmdList = (*cmdList)->nextcommand; if (curPosition == *cmdList) *cmdList = (*cmdList)->nextcommand;
} else if (!processThese) {
if (curPosition == *cmdList) *cmdList = (*cmdList)->nextcommand;
WINE_TRACE("Ignore the next command as well (next = %p)\n", *cmdList);
} else { } else {
WINE_TRACE("Found end of this IF statement (next = %p)\n", *cmdList); WINE_TRACE("Found end of this IF statement (next = %p)\n", *cmdList);
break; break;

View File

@ -836,6 +836,17 @@ if 1 GEQ "10" (echo 1 GEQ "10") else echo foo
if "1" GEQ "10" (echo 1 GEQ "10") else echo foo if "1" GEQ "10" (echo 1 GEQ "10") else echo foo
if '1' GEQ "10" (echo '1' GEQ "10") else echo foo if '1' GEQ "10" (echo '1' GEQ "10") else echo foo
if "10" GEQ "10" (echo "10" GEQ "10") if "10" GEQ "10" (echo "10" GEQ "10")
echo --- unconditional ampersand after if one line
if "0"=="0" echo 1 & echo 2 & echo 3 else echo 4
echo ---
echo x & if "0"=="1" echo 1 & echo 2
echo ---
echo x & if "0"=="1" echo 1 & echo 2 & echo 3
echo ---
echo x & if "0"=="1" (echo 1 & echo 2 & echo 3)
echo ---
echo x & if "0"=="1" echo 1 & echo 2 & echo 3 else echo 4
echo ---
goto :endIfCompOpsSubroutines goto :endIfCompOpsSubroutines
rem IF subroutines helpers rem IF subroutines helpers

View File

@ -645,6 +645,19 @@ foo
foo foo
'1' GEQ "10" '1' GEQ "10"
"10" GEQ "10" "10" GEQ "10"
--- unconditional ampersand after if one line
1@space@
2@space@
3 else echo 4
---
x@space@
---
x@space@
---
x@space@
---
x@space@
---
------------ Testing for ------------ ------------ Testing for ------------
--- plain FOR --- plain FOR
A A