From 304e9fe0d41715b59468b58dad5f3e457565e764 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Sun, 21 Sep 2008 15:41:25 +0200 Subject: [PATCH] jscript: Added String.toString implementation. --- dlls/jscript/string.c | 23 +++++++++++++++++++++-- dlls/jscript/tests/api.js | 7 +++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index d8673b3d60d..657aa67cd21 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -88,11 +88,30 @@ static HRESULT String_length(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARA return S_OK; } +/* ECMA-262 3rd Edition 15.5.4.2 */ static HRESULT String_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + StringInstance *string; + + TRACE("\n"); + + if(!is_class(dispex, JSCLASS_STRING)) { + WARN("this is not a string object\n"); + return E_FAIL; + } + + string = (StringInstance*)dispex; + + if(retv) { + BSTR str = SysAllocString(string->str); + if(!str) + return E_OUTOFMEMORY; + + V_VT(retv) = VT_BSTR; + V_BSTR(retv) = str; + } + return S_OK; } static HRESULT String_valueOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 14d4dea22c1..0db84b1dd5a 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -26,6 +26,13 @@ ok(getVT("".length) == "VT_I4", "\"\".length = " + "".length); ok("abc".length === 3, "\"abc\".length = " + "abc".length); ok(String.prototype.length === 0, "String.prototype.length = " + String.prototype.length); +tmp = "".toString(); +ok(tmp === "", "''.toString() = " + tmp); +tmp = "test".toString(); +ok(tmp === "test", "''.toString() = " + tmp); +tmp = "test".toString(3); +ok(tmp === "test", "''.toString(3) = " + tmp); + tmp = "abc".charAt(0); ok(tmp === "a", "'abc',charAt(0) = " + tmp); tmp = "abc".charAt(1);