vbscript: Added VT_R8 support to to_int.

This commit is contained in:
Jacek Caban 2012-09-26 14:36:15 +02:00 committed by Alexandre Julliard
parent 5c211059a0
commit 1fc2896c7c
3 changed files with 34 additions and 0 deletions

View File

@ -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;

View File

@ -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))

View File

@ -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;