Commit e4e47c01 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

jscript: Added constructor invokation from Function object support.

parent bea575c9
...@@ -185,6 +185,28 @@ static HRESULT invoke_function(FunctionInstance *function, LCID lcid, DISPPARAMS ...@@ -185,6 +185,28 @@ static HRESULT invoke_function(FunctionInstance *function, LCID lcid, DISPPARAMS
return invoke_source(function, this_obj, lcid, dp, retv, ei, caller); return invoke_source(function, this_obj, lcid, dp, retv, ei, caller);
} }
static HRESULT invoke_constructor(FunctionInstance *function, LCID lcid, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
{
DispatchEx *this_obj;
VARIANT var;
HRESULT hres;
hres = create_object(function->dispex.ctx, &function->dispex, &this_obj);
if(FAILED(hres))
return hres;
hres = invoke_source(function, (IDispatch*)_IDispatchEx_(this_obj), lcid, dp, retv, ei, caller);
jsdisp_release(this_obj);
if(FAILED(hres))
return hres;
VariantClear(&var);
V_VT(retv) = VT_DISPATCH;
V_DISPATCH(retv) = (IDispatch*)_IDispatchEx_(this_obj);
return S_OK;
}
static HRESULT invoke_value_proc(FunctionInstance *function, LCID lcid, WORD flags, DISPPARAMS *dp, static HRESULT invoke_value_proc(FunctionInstance *function, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller) VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
{ {
...@@ -301,6 +323,12 @@ static HRESULT Function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR ...@@ -301,6 +323,12 @@ static HRESULT Function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR
return invoke_function(function, lcid, dp, retv, ei, caller); return invoke_function(function, lcid, dp, retv, ei, caller);
case DISPATCH_CONSTRUCT:
if(function->value_proc)
return invoke_value_proc(function, lcid, flags, dp, retv, ei, caller);
return invoke_constructor(function, lcid, dp, retv, ei, caller);
default: default:
FIXME("not implemented flags %x\n", flags); FIXME("not implemented flags %x\n", flags);
return E_NOTIMPL; return E_NOTIMPL;
......
...@@ -79,4 +79,7 @@ ok(typeof(this) === "object", "typeof(this) is not object"); ...@@ -79,4 +79,7 @@ ok(typeof(this) === "object", "typeof(this) is not object");
ok(testFunc1(true, "test") === true, "testFunc1 not returned true"); ok(testFunc1(true, "test") === true, "testFunc1 not returned true");
var obj1 = new Object();
ok(typeof(obj1) === "object", "typeof(obj1) is not object");
reportSuccess(); reportSuccess();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment