Jacek Caban : jscript: Added Number.toString implementation.

Alexandre Julliard julliard at winehq.org
Mon Sep 22 07:04:02 CDT 2008


Module: wine
Branch: master
Commit: c3e2a6f9d7897d9615e35ebcc971723238d11376
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c3e2a6f9d7897d9615e35ebcc971723238d11376

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Sep 21 15:37:32 2008 +0200

jscript: Added Number.toString implementation.

---

 dlls/jscript/number.c     |   32 ++++++++++++++++++++++++++++++--
 dlls/jscript/tests/api.js |    3 +++
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/dlls/jscript/number.c b/dlls/jscript/number.c
index ebdbcf7..5106deb 100644
--- a/dlls/jscript/number.c
+++ b/dlls/jscript/number.c
@@ -39,11 +39,39 @@ static const WCHAR propertyIsEnumerableW[] =
     {'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
 static const WCHAR isPrototypeOfW[] = {'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
 
+/* ECMA-262 3rd Edition    15.7.4.2 */
 static HRESULT Number_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    NumberInstance *number;
+    BSTR str;
+    HRESULT hres;
+
+    TRACE("\n");
+
+    if(!is_class(dispex, JSCLASS_NUMBER)) {
+        FIXME("throw TypeError\n");
+        return E_FAIL;
+    }
+
+    number = (NumberInstance*)dispex;
+
+    if(arg_cnt(dp) != 0) {
+        FIXME("unsupported args\n");
+        return E_NOTIMPL;
+    }
+
+    hres = to_string(dispex->ctx, &number->num, ei, &str);
+    if(FAILED(hres))
+        return hres;
+
+    if(retv) {
+        V_VT(retv) = VT_BSTR;
+        V_BSTR(retv) = str;
+    }else {
+        SysFreeString(str);
+    }
+    return S_OK;
 }
 
 static HRESULT Number_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 715b8dd..2e426be 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -85,5 +85,8 @@ tmp = arr.toString("test");
 ok(tmp === "1,2,,false,,,a", "arr.toString() = " + tmp);
 
 var num = new Number(2);
+ok(num.toString() === "2", "num(2).toString !== 2");
+var num = new Number();
+ok(num.toString() === "0", "num().toString !== 0");
 
 reportSuccess();




More information about the wine-cvs mailing list