Module: wine Branch: master Commit: 1fc2896c7c57e6feb8dbcf6156da1f505ad2668e URL: http://source.winehq.org/git/wine.git/?a=commit;h=1fc2896c7c57e6feb8dbcf6156...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 26 14:36:15 2012 +0200
vbscript: Added VT_R8 support to to_int.
---
dlls/vbscript/global.c | 9 +++++++++ dlls/vbscript/tests/api.vbs | 12 ++++++++++++ dlls/vbscript/vbscript.h | 13 +++++++++++++ 3 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 0facdf0..6e62a34 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -125,6 +125,15 @@ static HRESULT to_int(VARIANT *v, int *ret) case VT_I4: *ret = V_I4(v); break; + case VT_R8: { + double n = round(V_R8(v)); + if(!is_int32(n)) { + FIXME("%lf is out of int range\n", n); + return E_FAIL; + } + *ret = n; + break; + } default: FIXME("not supported %s\n", debugstr_variant(v)); return E_NOTIMPL; diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index f7b4295..5efde28 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -124,6 +124,15 @@ Call ok(isNull(x), "InStr returned " & x) x = InStr(2, null, "abcd") Call ok(isNull(x), "InStr returned " & x)
+x = InStr(1.3, "abcd", "bc") +Call ok(x = 2, "InStr returned " & x) + +x = InStr(2.3, "abcd", "bc") +Call ok(x = 2, "InStr returned " & x) + +x = InStr(2.6, "abcd", "bc") +Call ok(x = 0, "InStr returned " & x) + Sub TestMid(str, start, len, ex) x = Mid(str, start, len) Call ok(x = ex, "Mid(" & str & ", " & start & ", " & len & ") = " & x & " expected " & ex) @@ -182,6 +191,9 @@ Call ok(Len(empty) = 0, "Len(empty) = " & Len(empty)) Call ok(Space(1) = " ", "Space(1) = " & Space(1) & """") Call ok(Space(0) = "", "Space(0) = " & Space(0) & """") Call ok(Space(5) = " ", "Space(5) = " & Space(5) & """") +Call ok(Space(5.2) = " ", "Space(5.2) = " & Space(5.2) & """") +Call ok(Space(5.8) = " ", "Space(5.8) = " & Space(5.8) & """") +Call ok(Space(5.5) = " ", "Space(5.5) = " & Space(5.5) & """")
Sub TestRound(val, exval, vt) Call ok(Round(val) = exval, "Round(" & val & ") = " & Round(val)) diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h index 77cf0e7..41982da 100644 --- a/dlls/vbscript/vbscript.h +++ b/dlls/vbscript/vbscript.h @@ -343,6 +343,19 @@ TID_LIST
HRESULT get_typeinfo(tid_t,ITypeInfo**) DECLSPEC_HIDDEN;
+#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif + +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif + +static inline BOOL is_int32(double d) +{ + return INT32_MIN <= d && d <= INT32_MAX && (double)(int)d == d; +} + HRESULT WINAPI VBScriptFactory_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
const char *debugstr_variant(const VARIANT*) DECLSPEC_HIDDEN;