vbscript: Added interp_new implementation.

This commit is contained in:
Jacek Caban 2011-09-15 14:18:29 +02:00 committed by Alexandre Julliard
parent 408a1bf682
commit fb57bc21b8
4 changed files with 29 additions and 3 deletions

View File

@ -447,8 +447,29 @@ static HRESULT interp_set_member(exec_ctx_t *ctx)
static HRESULT interp_new(exec_ctx_t *ctx)
{
const WCHAR *arg = ctx->instr->arg1.bstr;
FIXME("%s\n", debugstr_w(arg));
return E_NOTIMPL;
class_desc_t *class_desc;
vbdisp_t *obj;
VARIANT v;
HRESULT hres;
TRACE("%s\n", debugstr_w(arg));
for(class_desc = ctx->script->classes; class_desc; class_desc = class_desc->next) {
if(!strcmpiW(class_desc->name, arg))
break;
}
if(!class_desc) {
FIXME("Class %s not found\n", debugstr_w(arg));
return E_FAIL;
}
hres = create_vbdisp(&obj);
if(FAILED(hres))
return hres;
V_VT(&v) = VT_DISPATCH;
V_DISPATCH(&v) = (IDispatch*)&obj->IDispatchEx_iface;
return stack_push(ctx, &v);
}
static HRESULT interp_jmp(exec_ctx_t *ctx)

View File

@ -358,6 +358,10 @@ Call ok(x, "x is not set to true by SetVal?")
set x = testObj
Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
Dim obj
Set obj = New EmptyClass
Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
Class EmptyClass
End Class

View File

@ -184,7 +184,7 @@ static IDispatchExVtbl DispatchExVtbl = {
DispatchEx_GetNameSpaceParent
};
static HRESULT create_vbdisp(vbdisp_t **ret)
HRESULT create_vbdisp(vbdisp_t **ret)
{
vbdisp_t *vbdisp;

View File

@ -74,6 +74,7 @@ typedef enum {
VBDISP_ANY
} vbdisp_invoke_type_t;
HRESULT create_vbdisp(vbdisp_t**);
HRESULT disp_get_id(IDispatch*,BSTR,DISPID*);
HRESULT disp_call(script_ctx_t*,IDispatch*,DISPID,DISPPARAMS*,VARIANT*);
HRESULT disp_propput(script_ctx_t*,IDispatch*,DISPID,VARIANT*);