Piotr Caban : jscript: Add Error_toString implementation.

Alexandre Julliard julliard at winehq.org
Tue Jul 21 09:34:07 CDT 2009


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

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Mon Jul 20 18:17:57 2009 +0200

jscript: Add Error_toString implementation.

---

 dlls/jscript/error.c      |   15 +++++++++++++--
 dlls/jscript/tests/api.js |   10 ++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c
index 4ae52cf..b122c39 100644
--- a/dlls/jscript/error.c
+++ b/dlls/jscript/error.c
@@ -54,11 +54,22 @@ static HRESULT Error_message(DispatchEx *dispex, LCID lcid, WORD flags,
     }
 }
 
+/* ECMA-262 3rd Edition    15.11.4.4 */
 static HRESULT Error_toString(DispatchEx *dispex, LCID lcid, WORD flags,
         DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    static const WCHAR str[] = {'[','o','b','j','e','c','t',' ','E','r','r','o','r',']',0};
+
+    TRACE("\n");
+
+    if(retv) {
+        V_VT(retv) = VT_BSTR;
+        V_BSTR(retv) = SysAllocString(str);
+        if(!V_BSTR(retv))
+            return E_OUTOFMEMORY;
+    }
+
+    return S_OK;
 }
 
 static HRESULT Error_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags,
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index f2387b5..18e6141 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1253,6 +1253,8 @@ ok(err.valueOf === Object.prototype.valueOf, "err.valueOf !== Object.prototype.v
 ok(Error.prototype.name === "Error", "Error.prototype.name = " + Error.prototype.name);
 ok(err.name === "Error", "err.name = " + err.name);
 EvalError.prototype.message = "test";
+ok(err.toString !== Object.prototype.toString, "err.toString === Object.prototype.toString");
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
 err = new EvalError();
 ok(EvalError.prototype.name === "EvalError", "EvalError.prototype.name = " + EvalError.prototype.name);
 ok(err.name === "EvalError", "err.name = " + err.name);
@@ -1260,22 +1262,30 @@ ok(err.toString === Error.prototype.toString, "err.toString !== Error.prototype.
 ok(err.message === "", "err.message != ''");
 err.message = date;
 ok(err.message === date, "err.message != date");
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
+ok(err.toString !== Object.prototype.toString, "err.toString === Object.prototype.toString");
 err = new RangeError();
 ok(RangeError.prototype.name === "RangeError", "RangeError.prototype.name = " + RangeError.prototype.name);
 ok(err.name === "RangeError", "err.name = " + err.name);
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
 err = new ReferenceError();
 ok(ReferenceError.prototype.name === "ReferenceError", "ReferenceError.prototype.name = " + ReferenceError.prototype.name);
 ok(err.name === "ReferenceError", "err.name = " + err.name);
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
 err = new SyntaxError();
 ok(SyntaxError.prototype.name === "SyntaxError", "SyntaxError.prototype.name = " + SyntaxError.prototype.name);
 ok(err.name === "SyntaxError", "err.name = " + err.name);
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
 err = new TypeError();
 ok(TypeError.prototype.name === "TypeError", "TypeError.prototype.name = " + TypeError.prototype.name);
 ok(err.name === "TypeError", "err.name = " + err.name);
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
 err = new URIError();
 ok(URIError.prototype.name === "URIError", "URIError.prototype.name = " + URIError.prototype.name);
 ok(err.name === "URIError", "err.name = " + err.name);
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
 err = new Error("message");
 ok(err.message === "message", "err.message !== 'message'");
+ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
 
 reportSuccess();




More information about the wine-cvs mailing list