diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index f648f073bc8..173335062f5 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -416,6 +416,7 @@ static int stack_pop_bool(exec_ctx_t *ctx, BOOL *b) { variant_val_t val; HRESULT hres; + VARIANT_BOOL vb; hres = stack_pop_val(ctx, &val); if(FAILED(hres)) @@ -436,6 +437,12 @@ static int stack_pop_bool(exec_ctx_t *ctx, BOOL *b) case VT_I4: *b = V_I4(val.v); break; + case VT_BSTR: + hres = VarBoolFromStr(V_BSTR(val.v), ctx->script->lcid, 0, &vb); + if(FAILED(hres)) + return hres; + *b=vb; + break; default: FIXME("unsupported for %s\n", debugstr_variant(val.v)); release_val(&val); diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index d7865301784..ceaf63f7e8d 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -357,6 +357,22 @@ while empty ok false, "while empty executed" wend +x = 0 +if "0" then + ok false, "if ""0"" executed" +else + x = 1 +end if +Call ok(x = 1, "if ""0"" else not executed") + +x = 0 +if "-1" then + x = 1 +else + ok false, "if ""-1"" else executed" +end if +Call ok(x = 1, "if ""-1"" not executed") + x = 0 WHILE x < 3 : x = x + 1 : Wend Call ok(x = 3, "x not equal to 3")