// Constructor/Destructor JvmtiGetLoadedClassesClosure() { JvmtiGetLoadedClassesClosure* that = get_this(); assert(that == NULL, "JvmtiGetLoadedClassesClosure in use"); _initiatingLoader = NULL; _count = 0; _list = NULL; _index = 0; set_this(this); }
~JvmtiGetLoadedClassesClosure() { JvmtiGetLoadedClassesClosure* that = get_this(); assert(that != NULL, "JvmtiGetLoadedClassesClosure not found"); set_this(NULL); _initiatingLoader = NULL; _count = 0; if (_list != NULL) { FreeHeap(_list); _list = NULL; } _index = 0; }
static HRESULT invoke_prop_func(DispatchEx *This, DispatchEx *jsthis, dispex_prop_t *prop, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller) { HRESULT hres; switch(prop->type) { case PROP_BUILTIN: if(flags == DISPATCH_CONSTRUCT && (prop->flags & DISPATCH_METHOD)) { WARN("%s is not a constructor\n", debugstr_w(prop->name)); return E_INVALIDARG; } return prop->u.p->invoke(jsthis, lcid, flags, dp, retv, ei, caller); case PROP_PROTREF: return invoke_prop_func(This->prototype, jsthis, This->prototype->props+prop->u.ref, lcid, flags, dp, retv, ei, caller); case PROP_VARIANT: { DISPPARAMS new_dp; if(V_VT(&prop->u.var) != VT_DISPATCH) { FIXME("invoke vt %d\n", V_VT(&prop->u.var)); return E_FAIL; } TRACE("call %s %p\n", debugstr_w(prop->name), V_DISPATCH(&prop->u.var)); hres = set_this(&new_dp, dp, (IDispatch*)_IDispatchEx_(jsthis)); if(FAILED(hres)) return hres; hres = disp_call(V_DISPATCH(&prop->u.var), DISPID_VALUE, lcid, flags, &new_dp, retv, ei, caller); if(new_dp.rgvarg != dp->rgvarg) { heap_free(new_dp.rgvarg); if(new_dp.cNamedArgs > 1) heap_free(new_dp.rgdispidNamedArgs); } return hres; } default: ERR("type %d\n", prop->type); } return E_FAIL; }