Module: wine Branch: master Commit: f17b35fdebf34a0c271d9b8f5f49e4b25d1012b2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f17b35fdebf34a0c271d9b8f5f...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 14 13:00:02 2011 +0200
vbscript: Added interp_xor implementation.
---
dlls/vbscript/interp.c | 22 ++++++++++++++++++++-- dlls/vbscript/tests/lang.vbs | 5 +++++ 2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index e166b21..8a875ee 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -614,8 +614,26 @@ static HRESULT interp_or(exec_ctx_t *ctx)
static HRESULT interp_xor(exec_ctx_t *ctx) { - FIXME("\n"); - return E_NOTIMPL; + variant_val_t r, l; + VARIANT v; + HRESULT hres; + + TRACE("\n"); + + hres = stack_pop_val(ctx, &r); + if(FAILED(hres)) + return hres; + + hres = stack_pop_val(ctx, &l); + if(SUCCEEDED(hres)) { + hres = VarXor(l.v, r.v, &v); + release_val(&l); + } + release_val(&r); + if(FAILED(hres)) + return hres; + + return stack_push(ctx, &v); }
static HRESULT interp_eqv(exec_ctx_t *ctx) diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index c6a336d..329df36 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -97,6 +97,11 @@ call ok(false and false or true, "false and false or true is false?") call ok(true or false and false, "true or false and false is false?") call ok(null or true, "null or true is false")
+call ok(true xor false, "true xor false is false?") +call ok(not (false xor false), "false xor false is true?") +call ok(not (true or false xor true), "true or false xor true is true?") +call ok(not (true xor false or true), "true xor false or true is true?") + x = 3 Call ok(2+2 = 4, "2+2 = " & (2+2)) Call ok(false + 6 + true = 5, "false + 6 + true <> 5")