jscript: Improve to_string implementation.

This commit is contained in:
Piotr Caban 2009-07-15 12:50:43 +02:00 committed by Alexandre Julliard
parent a5d9536542
commit 15b07c2a36
2 changed files with 24 additions and 8 deletions

View File

@ -512,6 +512,8 @@ HRESULT to_string(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, BSTR *str)
const WCHAR nullW[] = {'n','u','l','l',0};
const WCHAR trueW[] = {'t','r','u','e',0};
const WCHAR falseW[] = {'f','a','l','s','e',0};
const WCHAR NaNW[] = {'N','a','N',0};
const WCHAR InfinityW[] = {'-','I','n','f','i','n','i','t','y',0};
switch(V_VT(v)) {
case VT_EMPTY:
@ -524,16 +526,23 @@ HRESULT to_string(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, BSTR *str)
*str = int_to_bstr(V_I4(v));
break;
case VT_R8: {
VARIANT strv;
HRESULT hres;
if(isnan(V_R8(v)))
*str = SysAllocString(NaNW);
else if(isinf(V_R8(v)))
*str = SysAllocString(V_R8(v)<0 ? InfinityW : InfinityW+1);
else {
VARIANT strv;
HRESULT hres;
V_VT(&strv) = VT_EMPTY;
hres = VariantChangeTypeEx(&strv, v, MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT), 0, VT_BSTR);
if(FAILED(hres))
return hres;
V_VT(&strv) = VT_EMPTY;
hres = VariantChangeTypeEx(&strv, v, MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT), 0, VT_BSTR);
if(FAILED(hres))
return hres;
*str = V_BSTR(&strv);
return S_OK;
*str = V_BSTR(&strv);
return S_OK;
}
break;
}
case VT_BSTR:
*str = SysAllocString(V_BSTR(v));

View File

@ -566,6 +566,13 @@ ok(tmp === 0, "(new Number()).valueOf = " + tmp);
tmp = Number.prototype.valueOf();
ok(tmp === 0, "Number.prototype.valueOf = " + tmp);
num = new Number(NaN);
ok(num.toString() === "NaN", "num.toString() = " + num.toString());
num = new Number(-Infinity);
ok(num.toString() === "-Infinity", "num.toString() = " + num.toString());
num = new Number(Infinity);
ok(num.toString() === "Infinity", "num.toString() = " + num.toString());
tmp = Math.min(1);
ok(tmp === 1, "Math.min(1) = " + tmp);