Jacek Caban : vbscript: Added interp_neg implementation.

Alexandre Julliard julliard at winehq.org
Mon Sep 12 11:43:00 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Sep 12 12:31:47 2011 +0200

vbscript: Added interp_neg implementation.

---

 dlls/vbscript/interp.c       |   16 ++++++++++++++--
 dlls/vbscript/tests/lang.vbs |    6 ++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index a70ca5f..67230da 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -393,8 +393,20 @@ static HRESULT interp_concat(exec_ctx_t *ctx)
 
 static HRESULT interp_neg(exec_ctx_t *ctx)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    variant_val_t val;
+    VARIANT v;
+    HRESULT hres;
+
+    hres = stack_pop_val(ctx, &val);
+    if(FAILED(hres))
+        return hres;
+
+    hres = VarNeg(val.v, &v);
+    release_val(&val);
+    if(FAILED(hres))
+        return hres;
+
+    return stack_push(ctx, &v);
 }
 
 static const instr_func_t op_funcs[] = {
diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index dc64c91..9b1d771 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
@@ -35,6 +35,10 @@ Call ok(0 = 0.0, "0 <> 0.0")
 Call ok(16 = &h10&, "16 <> &h10&")
 Call ok(010 = 10, "010 <> 10")
 Call ok(10. = 10, "10. <> 10")
+Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")
+Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")
+Call ok(--1 = 1, "--1 = " & --1)
+Call ok(-empty = 0, "-empty = " & (-empty))
 
 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
@@ -53,6 +57,8 @@ Call ok(getVT(&h10000&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
 Call ok(getVT(&H10000&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
 Call ok(getVT(&hffFFffFF&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
+Call ok(getVT(-empty) = "VT_I2", "getVT(-empty) = " & getVT(-empty))
+Call ok(getVT(-null) = "VT_NULL", "getVT(-null) = " & getVT(-null))
 
 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
 Call ok("ab " & null = "ab ", """ab"" & null = " & ("ab " & null))




More information about the wine-cvs mailing list