From 8e1ccb8be6efd4b31fac18ae9c31454311848da0 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 12 Sep 2011 12:31:47 +0200 Subject: [PATCH] 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 a70ca5f667f..67230da38d4 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 dc64c91c9c1..9b1d7718a66 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))