Module: wine Branch: master Commit: 75be5eee639d1d0fd3542cc744d15b0f20f43e0e URL: http://source.winehq.org/git/wine.git/?a=commit;h=75be5eee639d1d0fd3542cc744...
Author: Zhan Jianyu nasa4836@gmail.com Date: Tue May 21 21:30:06 2013 +0800
vbscript: Implemented builtin function CBool.
---
dlls/vbscript/global.c | 36 ++++++++++++++++++++++++++++++++++-- dlls/vbscript/tests/api.vbs | 8 ++++++++ 2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 49dcb50..fbd8601 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -114,6 +114,16 @@ static HRESULT return_int(VARIANT *res, int val) return S_OK; }
+static HRESULT return_bool(VARIANT *res, int val) +{ + if(res) { + V_VT(res) = VT_BOOL; + V_BOOL(res) = val != 0 ? VARIANT_TRUE : VARIANT_FALSE; + } + + return S_OK; +} + static inline HRESULT return_double(VARIANT *res, double val) { if(res) { @@ -400,8 +410,30 @@ static HRESULT Global_CLng(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARI
static HRESULT Global_CBool(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) { - FIXME("\n"); - return E_NOTIMPL; + int val; + TRACE("%s\n", debugstr_variant(arg)); + + assert(args_cnt == 1); + + switch(V_VT(arg)) { + case VT_I2: + val = V_I2(arg); + break; + case VT_I4: + val = V_I4(arg); + break; + case VT_R4: + val = V_R4(arg) > 0.0 || V_R4(arg) < 0.0; + break; + case VT_R8: + val = V_R8(arg) > 0.0 || V_R8(arg) < 0.0; + break; + default: + ERR("Not a numeric vaule: %s\n", debugstr_variant(arg)); + return E_FAIL; + } + + return return_bool(res, val); }
static HRESULT Global_CByte(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 1151071..3c496b1 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -456,4 +456,12 @@ Call ok(getVT(CInt(36.50)) = "VT_I2", "getVT(CInt(36.50)) = " & getVT(CInt(36.50 Call ok(CInt(36.75) = 37, "CInt(36.75) = " & CInt(36.75)) Call ok(getVT(CInt(36.75)) = "VT_I2", "getVT(CInt(36.75)) = " & getVT(CInt(36.75)))
+ +Call ok(CBool(5) = true, "CBool(5) = " & CBool(5)) +Call ok(getVT(CBool(5)) = "VT_BOOL", "getVT(CBool(5)) = " & getVT(CBool(5))) +Call ok(CBool(0) = false, "CBool(0) = " & CBool(0)) +Call ok(getVT(CBool(0)) = "VT_BOOL", "getVT(CBool(0)) = " & getVT(CBool(0))) +Call ok(CBool(-5) = true, "CBool(-5) = " & CBool(-5)) +Call ok(getVT(CBool(-5)) = "VT_BOOL", "getVT(CBool(-5)) = " & getVT(CBool(-5))) + Call reportSuccess()