Module: wine Branch: master Commit: dcaf066936a6718c2084a05a495ad609b55cb5db URL: http://source.winehq.org/git/wine.git/?a=commit;h=dcaf066936a6718c2084a05a49...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Sep 17 01:05:55 2009 +0200
jscript: Added Object function invocation implementation.
---
dlls/jscript/object.c | 23 ++++++++++++++++++++++- dlls/jscript/tests/api.js | 12 ++++++++++++ 2 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index 8170e71..66e4b53 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -163,13 +163,34 @@ static const builtin_info_t Object_info = { };
static HRESULT ObjectConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, - VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) + VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller) { HRESULT hres;
TRACE("\n");
switch(flags) { + case DISPATCH_METHOD: + if(arg_cnt(dp)) { + VARIANT *arg = get_arg(dp,0); + + if(V_VT(arg) != VT_EMPTY && V_VT(arg) != VT_NULL) { + IDispatch *disp; + + hres = to_object(dispex->ctx, arg, &disp); + if(FAILED(hres)) + return hres; + + if(retv) { + V_VT(retv) = VT_DISPATCH; + V_DISPATCH(retv) = disp; + }else { + IDispatch_Release(disp); + } + return S_OK; + } + } + /* fall through */ case DISPATCH_CONSTRUCT: { DispatchEx *obj;
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index d3e08c8..291154c 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -88,6 +88,17 @@ ok(tmp.f() === "[object RegExp]", "tmp.f() = " + tmp.f()); (tmp = new String).f = Object.prototype.toString; ok(tmp.f() === "[object String]", "tmp.f() = " + tmp.f());
+ok(Object(1) instanceof Number, "Object(1) is not instance of Number"); +ok(Object("") instanceof String, "Object('') is not instance of String"); +ok(Object(false) instanceof Boolean, "Object(false) is not instance of Boolean"); + +obj = new Object(); +ok(Object(obj) === obj, "Object(obj) !== obj"); + +ok(typeof(Object()) === "object", "typeof(Object()) !== 'object'"); +ok(typeof(Object(undefined)) === "object", "typeof(Object(undefined)) !== 'object'"); +ok(typeof(Object(null)) === "object", "typeof(Object(null)) !== 'object'"); + var obj = new Object(); obj.toString = function (x) { ok(arguments.length === 0, "arguments.length = " + arguments.length); @@ -95,6 +106,7 @@ obj.toString = function (x) { }; ok((tmp = obj.toLocaleString()) === "test", "obj.toLocaleString() = " + tmp); ok((tmp = obj.toLocaleString(1)) === "test", "obj.toLocaleString(1) = " + tmp); +ok(obj === obj.valueOf(), "obj !== obj.valueOf");
ok("".length === 0, """.length = " + "".length); ok(getVT("".length) == "VT_I4", """.length = " + "".length);