vbscript: Added do while..loop statement implementation.
This commit is contained in:
parent
3d34925802
commit
1f5c56d1a8
|
@ -661,6 +661,7 @@ static HRESULT compile_statement(compile_ctx_t *ctx, statement_t *stat)
|
|||
hres = push_instr(ctx, OP_stop) == -1 ? E_OUTOFMEMORY : S_OK;
|
||||
break;
|
||||
case STAT_WHILE:
|
||||
case STAT_WHILELOOP:
|
||||
hres = compile_while_statement(ctx, (while_statement_t*)stat);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -100,7 +100,8 @@ typedef enum {
|
|||
STAT_IF,
|
||||
STAT_SET,
|
||||
STAT_STOP,
|
||||
STAT_WHILE
|
||||
STAT_WHILE,
|
||||
STAT_WHILELOOP
|
||||
} statement_type_t;
|
||||
|
||||
typedef struct _statement_t {
|
||||
|
|
|
@ -156,6 +156,8 @@ Statement
|
|||
| IfStatement { $$ = $1; }
|
||||
| tWHILE Expression tNL StatementsNl_opt tWEND
|
||||
{ $$ = new_while_statement(ctx, STAT_WHILE, $2, $4); CHECK_ERROR; }
|
||||
| tDO tWHILE Expression tNL StatementsNl_opt tLOOP
|
||||
{ $$ = new_while_statement(ctx, STAT_WHILELOOP, $3, $5); CHECK_ERROR; }
|
||||
| FunctionDecl { $$ = new_function_statement(ctx, $1); CHECK_ERROR; }
|
||||
| tEXIT tFUNCTION { $$ = new_statement(ctx, STAT_EXITFUNC, 0); CHECK_ERROR; }
|
||||
| tEXIT tPROPERTY { $$ = new_statement(ctx, STAT_EXITPROP, 0); CHECK_ERROR; }
|
||||
|
|
|
@ -212,6 +212,19 @@ call ok((x and y), "x or y is false after while")
|
|||
while false
|
||||
wend
|
||||
|
||||
x = false
|
||||
y = false
|
||||
do while not (x and y)
|
||||
if x then
|
||||
y = true
|
||||
end if
|
||||
x = true
|
||||
loop
|
||||
call ok((x and y), "x or y is false after while")
|
||||
|
||||
do while false
|
||||
loop
|
||||
|
||||
if false then
|
||||
Sub testsub
|
||||
x = true
|
||||
|
|
Loading…
Reference in New Issue