Module: wine Branch: master Commit: 3925f13023161e9beda334a61b026ba78c58df4b URL: http://source.winehq.org/git/wine.git/?a=commit;h=3925f13023161e9beda334a61b...
Author: Jacek Caban jacek@codeweavers.com Date: Sun Sep 21 15:43:32 2008 +0200
jscript: Added String constructor implementation.
---
dlls/jscript/string.c | 35 +++++++++++++++++++++++++++++++++-- dlls/jscript/tests/api.js | 7 +++++++ 2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index d6a7a71..656b9ec 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -701,8 +701,39 @@ static const builtin_info_t String_info = { static HRESULT StringConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + HRESULT hres; + + switch(flags) { + case DISPATCH_CONSTRUCT: { + DispatchEx *ret; + + if(arg_cnt(dp)) { + BSTR str; + + hres = to_string(dispex->ctx, get_arg(dp, 0), ei, &str); + if(FAILED(hres)) + return hres; + + hres = create_string(dispex->ctx, str, SysStringLen(str), &ret); + SysFreeString(str); + }else { + hres = create_string(dispex->ctx, NULL, 0, &ret); + } + + if(FAILED(hres)) + return hres; + + V_VT(retv) = VT_DISPATCH; + V_DISPATCH(retv) = (IDispatch*)_IDispatchEx_(ret); + break; + } + + default: + FIXME("unimplemented flags: %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; }
static HRESULT string_alloc(script_ctx_t *ctx, BOOL use_constr, StringInstance **ret) diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 8237ddb..f86ea1a 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -59,6 +59,13 @@ ok(tmp === "test", "''.valueOf() = " + tmp); tmp = "test".valueOf(3); ok(tmp === "test", "''.valueOf(3) = " + tmp);
+var str = new String("test"); +ok(str.toString() === "test", "str.toString() = " + str.toString()); +var str = new String(); +ok(str.toString() === "", "str.toString() = " + str.toString()); +var str = new String("test", "abc"); +ok(str.toString() === "test", "str.toString() = " + str.toString()); + tmp = "abc".charAt(0); ok(tmp === "a", "'abc',charAt(0) = " + tmp); tmp = "abc".charAt(1);