From 1e72bc8718ae35867b8ecdbdb7ac3efbb52a3ad5 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Mon, 6 Jul 2009 10:38:41 +0200 Subject: [PATCH] jscript: Added Bool_toString implementation. --- dlls/jscript/bool.c | 28 ++++++++++++++++++++++++++-- dlls/jscript/tests/api.js | 5 +++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/dlls/jscript/bool.c b/dlls/jscript/bool.c index be367873d3a..e7cf22fac55 100644 --- a/dlls/jscript/bool.c +++ b/dlls/jscript/bool.c @@ -36,11 +36,35 @@ 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.6.4.2 */ static HRESULT Bool_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + static const WCHAR trueW[] = {'t','r','u','e',0}; + static const WCHAR falseW[] = {'f','a','l','s','e',0}; + + TRACE("\n"); + + if(!is_class(dispex, JSCLASS_BOOLEAN)) { + FIXME("throw TypeError\n"); + return E_FAIL; + } + + if(retv) { + BoolInstance *bool = (BoolInstance*)dispex; + BSTR val; + + if(bool->val) val = SysAllocString(trueW); + else val = SysAllocString(falseW); + + if(!val) + return E_OUTOFMEMORY; + + V_VT(retv) = VT_BSTR; + V_BSTR(retv) = val; + } + + return S_OK; } static HRESULT Bool_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index b76e94bd071..c789cc0d489 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1080,4 +1080,9 @@ ok(Math.floor(Math.SQRT1_2*100) === 70, "Math.SQRT1_2 = " + Math.SQRT1_2); Math.SQRT1_2 = "test"; ok(Math.floor(Math.SQRT1_2*100) === 70, "modified Math.SQRT1_2 = " + Math.SQRT1_2); +var bool = new Boolean(); +ok(bool.toString() === "false", "bool.toString() = " + bool.toString()); +var bool = new Boolean("false"); +ok(bool.toString() === "true", "bool.toString() = " + bool.toString()); + reportSuccess();