jscript: Improve to_string implementation.
This commit is contained in:
parent
a5d9536542
commit
15b07c2a36
@ -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 nullW[] = {'n','u','l','l',0};
|
||||||
const WCHAR trueW[] = {'t','r','u','e',0};
|
const WCHAR trueW[] = {'t','r','u','e',0};
|
||||||
const WCHAR falseW[] = {'f','a','l','s','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)) {
|
switch(V_VT(v)) {
|
||||||
case VT_EMPTY:
|
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));
|
*str = int_to_bstr(V_I4(v));
|
||||||
break;
|
break;
|
||||||
case VT_R8: {
|
case VT_R8: {
|
||||||
VARIANT strv;
|
if(isnan(V_R8(v)))
|
||||||
HRESULT hres;
|
*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;
|
V_VT(&strv) = VT_EMPTY;
|
||||||
hres = VariantChangeTypeEx(&strv, v, MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT), 0, VT_BSTR);
|
hres = VariantChangeTypeEx(&strv, v, MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT), 0, VT_BSTR);
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
*str = V_BSTR(&strv);
|
*str = V_BSTR(&strv);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case VT_BSTR:
|
case VT_BSTR:
|
||||||
*str = SysAllocString(V_BSTR(v));
|
*str = SysAllocString(V_BSTR(v));
|
||||||
|
@ -566,6 +566,13 @@ ok(tmp === 0, "(new Number()).valueOf = " + tmp);
|
|||||||
tmp = Number.prototype.valueOf();
|
tmp = Number.prototype.valueOf();
|
||||||
ok(tmp === 0, "Number.prototype.valueOf = " + tmp);
|
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);
|
tmp = Math.min(1);
|
||||||
ok(tmp === 1, "Math.min(1) = " + tmp);
|
ok(tmp === 1, "Math.min(1) = " + tmp);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user