Zhan Jianyu : vbscript: Implemented builtin function CBool.
Alexandre Julliard
julliard at winehq.org
Tue May 21 13:56:27 CDT 2013
Module: wine
Branch: master
Commit: 75be5eee639d1d0fd3542cc744d15b0f20f43e0e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=75be5eee639d1d0fd3542cc744d15b0f20f43e0e
Author: Zhan Jianyu <nasa4836 at 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()
More information about the wine-cvs
mailing list