Jacek Caban : vbscript: Use VariantChangeType in to_int.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 21 13:37:11 CDT 2014
Module: wine
Branch: master
Commit: 15dfae71a12f4937c363156849213881c879c684
URL: http://source.winehq.org/git/wine.git/?a=commit;h=15dfae71a12f4937c363156849213881c879c684
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Jul 21 16:05:14 2014 +0200
vbscript: Use VariantChangeType in to_int.
---
dlls/vbscript/global.c | 54 +++++++++++----------------------------------
dlls/vbscript/tests/api.vbs | 3 +++
2 files changed, 16 insertions(+), 41 deletions(-)
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c
index af7a27d..610de43 100644
--- a/dlls/vbscript/global.c
+++ b/dlls/vbscript/global.c
@@ -142,41 +142,15 @@ static inline HRESULT return_date(VARIANT *res, double date)
HRESULT to_int(VARIANT *v, int *ret)
{
- if(V_VT(v) == (VT_BYREF|VT_VARIANT))
- v = V_VARIANTREF(v);
-
- switch(V_VT(v)) {
- case VT_I2:
- *ret = V_I2(v);
- break;
- case VT_I4:
- *ret = V_I4(v);
- break;
- case VT_R8: {
- double n = floor(V_R8(v)+0.5);
- INT32 i;
-
- if(!is_int32(n)) {
- FIXME("%lf is out of int range\n", n);
- return E_FAIL;
- }
-
- /* Round half to even */
- i = n;
- if(i%2 && n-V_R8(v) == 0.5)
- i--;
+ VARIANT r;
+ HRESULT hres;
- *ret = i;
- break;
- }
- case VT_BOOL:
- *ret = V_BOOL(v) ? -1 : 0;
- break;
- default:
- FIXME("not supported %s\n", debugstr_variant(v));
- return E_NOTIMPL;
- }
+ V_VT(&r) = VT_EMPTY;
+ hres = VariantChangeType(&r, v, 0, VT_I4);
+ if(FAILED(hres))
+ return hres;
+ *ret = V_I4(&r);
return S_OK;
}
@@ -400,24 +374,22 @@ static HRESULT Global_CInt(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARI
static HRESULT Global_CLng(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
{
- VARIANT v;
+ int i;
HRESULT hres;
TRACE("%s\n", debugstr_variant(arg));
assert(args_cnt == 1);
- V_VT(&v) = VT_EMPTY;
- hres = VariantChangeType(&v, arg, 0, VT_I4);
+ hres = to_int(arg, &i);
if(FAILED(hres))
return hres;
-
if(!res)
return DISP_E_BADVARTYPE;
- else {
- *res = v;
- return S_OK;
- }
+
+ V_VT(res) = VT_I4;
+ V_I4(res) = i;
+ return S_OK;
}
static HRESULT Global_CBool(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 813f5e8..38e5e76 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -136,6 +136,7 @@ Call ok(Chr(120) = "x", "Chr(120) = " & Chr(120))
Call ok(Chr(0) <> "", "Chr(0) = """"")
Call ok(Chr(120.5) = "x", "Chr(120.5) = " & Chr(120.5))
Call ok(Chr(119.5) = "x", "Chr(119.5) = " & Chr(119.5))
+Call ok(Chr("120") = "x", "Chr(""120"") = " & Chr("120"))
sub testChrError
on error resume next
@@ -321,6 +322,7 @@ Call ok(Space(5.5) = " ", "Space(5.5) = " & Space(5.5) & """")
Call ok(Space(4.5) = " ", "Space(4.5) = " & Space(4.5) & """")
Call ok(Space(0.5) = "", "Space(0.5) = " & Space(0.5) & """")
Call ok(Space(1.5) = " ", "Space(1.5) = " & Space(1.5) & """")
+Call ok(Space("1") = " ", "Space(""1"") = " & Space("1") & """")
Sub TestStrReverse(str, ex)
Call ok(StrReverse(str) = ex, "StrReverse(" & str & ") = " & StrReverse(str))
@@ -341,6 +343,7 @@ TestLeft "test", 0, ""
TestLeft 123, 2, "12"
TestLeft "123456", 1.5, "12"
TestLeft "123456", 2.5, "12"
+TestLeft "test", "2", "te"
if isEnglishLang then TestLeft true, 2, "Tr"
Sub TestRight(str, len, ex)
More information about the wine-cvs
mailing list