Module: wine Branch: master Commit: c1372814695510564f53645346c1eab8b1dc0d0c URL: http://source.winehq.org/git/wine.git/?a=commit;h=c1372814695510564f53645346...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 17 23:34:56 2008 +0200
jscript: Added to_string(VT_I4) implementation.
---
dlls/jscript/jsutils.c | 39 +++++++++++++++++++++++++++++++++++++-- dlls/jscript/tests/lang.js | 5 +++++ 2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c index 19c3b8d..7184cb9 100644 --- a/dlls/jscript/jsutils.c +++ b/dlls/jscript/jsutils.c @@ -253,19 +253,54 @@ HRESULT to_int32(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, INT *ret) return S_OK; }
+static BSTR int_to_bstr(INT i) +{ + WCHAR buf[12], *p; + BOOL neg = FALSE; + + if(!i) { + static const WCHAR zeroW[] = {'0',0}; + return SysAllocString(zeroW); + } + + if(i < 0) { + neg = TRUE; + i = -i; + } + + p = buf + sizeof(buf)/sizeof(*buf)-1; + *p-- = 0; + while(i) { + *p-- = i%10 + '0'; + i /= 10; + } + + if(neg) + *p = '-'; + else + p++; + + return SysAllocString(p); +} + /* ECMA-262 3rd Edition 9.8 */ HRESULT to_string(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, BSTR *str) { switch(V_VT(v)) { + case VT_I4: + *str = int_to_bstr(V_I4(v)); + break; + case VT_BSTR: *str = SysAllocString(V_BSTR(v)); - return S_OK; + break;
default: FIXME("unsupported vt %d\n", V_VT(v)); + return E_NOTIMPL; }
- return E_NOTIMPL; + return *str ? S_OK : E_OUTOFMEMORY; }
/* ECMA-262 3rd Edition 9.9 */ diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index afb71bf..e2b5800 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -312,6 +312,10 @@ ok(+true === 1, "+true !== 1"); ok(+false === 0, "+false !== 0"); ok(+null === 0, "+null !== 0");
+ok("" + 0 === "0", """ + 0 !== "0""); +ok("" + 123 === "123", """ + 123 !== "123""); +ok("" + (-5) === "-5", """ + (-5) !== "-5""); + ok(1 < 3.4, "1 < 3.4 failed"); ok(!(3.4 < 1), "3.4 < 1"); ok("abc" < "abcd", "abc < abcd failed"); @@ -544,5 +548,6 @@ ok(tmp.length === 7, "tmp.length !== 7"); ok(tmp["0"] === undefined, "tmp[0] is not undefined"); ok(tmp["3"] === 2, "tmp[3] !== 2"); ok(tmp["6"] === true, "tmp[6] !== true"); +ok(tmp[2] === 1, "tmp[2] !== 1");
reportSuccess();