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