Jacek Caban : vbscript: Added interp_xor implementation.

Alexandre Julliard julliard at winehq.org
Wed Sep 14 12:25:41 CDT 2011


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

Author: Jacek Caban <jacek at 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")




More information about the wine-cvs mailing list