Instead of class-specific destructors. Also some other minor clean up.
From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/engine.c | 2 +- dlls/jscript/json.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 66bd5a98ff1..5bc9f4de20e 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -3317,7 +3317,7 @@ static HRESULT bind_event_target(script_ctx_t *ctx, function_code_t *func, jsdis disp = get_object(v); hres = IDispatch_QueryInterface(disp, &IID_IBindEventHandler, (void**)&target); if(SUCCEEDED(hres)) { - hres = IBindEventHandler_BindHandler(target, func->name, (IDispatch*)&func_obj->IDispatchEx_iface); + hres = IBindEventHandler_BindHandler(target, func->name, to_disp(func_obj)); IBindEventHandler_Release(target); if(FAILED(hres)) WARN("BindEvent failed: %08lx\n", hres); diff --git a/dlls/jscript/json.c b/dlls/jscript/json.c index a8c026b8587..ee0fe87827c 100644 --- a/dlls/jscript/json.c +++ b/dlls/jscript/json.c @@ -315,7 +315,7 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx, goto ret; if(FAILED(jsdisp_get_id(obj, str, 0, &id))) continue; - proc_ctx->hres = disp_delete((IDispatch*)&obj->IDispatchEx_iface, id, &b); + proc_ctx->hres = disp_delete(to_disp(obj), id, &b); }else { proc_ctx->hres = jsdisp_define_data_property(obj, str, PROPF_WRITABLE | PROPF_ENUMERABLE | PROPF_CONFIGURABLE, res); jsval_release(res); @@ -334,7 +334,7 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx, res = transform_json_object(proc_ctx, obj, jsstr); if(is_undefined(res)) { if(SUCCEEDED(proc_ctx->hres)) - proc_ctx->hres = disp_delete((IDispatch*)&obj->IDispatchEx_iface, id, &b); + proc_ctx->hres = disp_delete(to_disp(obj), id, &b); }else { if(!(str = jsstr_flatten(jsstr))) proc_ctx->hres = E_OUTOFMEMORY;
From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/array.c | 2 +- dlls/jscript/dispex.c | 2 +- dlls/jscript/jscript.h | 5 +++++ dlls/jscript/json.c | 4 ++-- dlls/jscript/object.c | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index a8e2934b78d..9f9231c8b5f 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -1560,7 +1560,7 @@ static HRESULT Array_unshift(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsig hres = jsdisp_propput_idx(jsthis, i+argc, val); jsval_release(val); }else if(hres == DISP_E_UNKNOWNNAME) { - hres = IDispatchEx_DeleteMemberByDispID(&jsthis->IDispatchEx_iface, id); + hres = IDispatchEx_DeleteMemberByDispID(to_dispex(jsthis), id); } }
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index e8bd0be64b4..efefbb116b9 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -1893,7 +1893,7 @@ static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, TRACE("(%p)->(%ld %s %ld %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
- return IDispatchEx_InvokeEx(&This->IDispatchEx_iface, dispIdMember, lcid, wFlags, + return IDispatchEx_InvokeEx(to_dispex(This), dispIdMember, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, NULL); }
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 1a9446893a1..80641731006 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -216,6 +216,11 @@ static inline IDispatch *to_disp(jsdisp_t *jsdisp) return (IDispatch*)&jsdisp->IDispatchEx_iface; }
+static inline IDispatchEx *to_dispex(jsdisp_t *jsdisp) +{ + return &jsdisp->IDispatchEx_iface; +} + jsdisp_t *as_jsdisp(IDispatch*); jsdisp_t *to_jsdisp(IDispatch*); void jsdisp_free(jsdisp_t*); diff --git a/dlls/jscript/json.c b/dlls/jscript/json.c index ee0fe87827c..b56d75d3570 100644 --- a/dlls/jscript/json.c +++ b/dlls/jscript/json.c @@ -671,7 +671,7 @@ static HRESULT stringify_object(stringify_ctx_t *ctx, jsdisp_t *obj) if(!append_char(ctx, '{')) return E_OUTOFMEMORY;
- while((hres = IDispatchEx_GetNextDispID(&obj->IDispatchEx_iface, fdexEnumDefault, dispid, &dispid)) == S_OK) { + while((hres = IDispatchEx_GetNextDispID(to_dispex(obj), fdexEnumDefault, dispid, &dispid)) == S_OK) { stepback = ctx->buf_len;
if(prop_cnt && !append_char(ctx, ',')) { @@ -693,7 +693,7 @@ static HRESULT stringify_object(stringify_ctx_t *ctx, jsdisp_t *obj) } }
- hres = IDispatchEx_GetMemberName(&obj->IDispatchEx_iface, dispid, &prop_name); + hres = IDispatchEx_GetMemberName(to_dispex(obj), dispid, &prop_name); if(FAILED(hres)) return hres;
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index f25287b7a15..d62acfa178a 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -655,7 +655,7 @@ static HRESULT jsdisp_define_properties(script_ctx_t *ctx, jsdisp_t *obj, jsval_ if(FAILED(hres)) break;
- hres = IDispatchEx_GetMemberName(&list_obj->IDispatchEx_iface, id, &name); + hres = IDispatchEx_GetMemberName(to_dispex(list_obj), id, &name); if(SUCCEEDED(hres)) hres = jsdisp_define_property(obj, name, &prop_desc); release_property_descriptor(&prop_desc);
From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/dispex.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index efefbb116b9..cc4ff85b508 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -1111,7 +1111,7 @@ static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface) { for (i = This->num_funcs; i--;) release_bytecode(This->funcs[i].code->bytecode); - IDispatchEx_Release(&This->jsdisp->IDispatchEx_iface); + jsdisp_release(This->jsdisp); free(This->funcs); free(This->vars); free(This); @@ -1850,7 +1850,7 @@ static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LC }
/* Keep a ref to the props and their names */ - IDispatchEx_AddRef(&This->IDispatchEx_iface); + jsdisp_addref(This);
*ppTInfo = &typeinfo->ITypeInfo_iface; return S_OK;
From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/array.c | 7 ------- 1 file changed, 7 deletions(-)
diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index 9f9231c8b5f..dfd9eda75cc 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -1589,11 +1589,6 @@ done: return hres; }
-static void Array_destructor(jsdisp_t *dispex) -{ - free(dispex); -} - static void Array_on_put(jsdisp_t *dispex, const WCHAR *name) { ArrayInstance *array = array_from_jsdisp(dispex); @@ -1643,7 +1638,6 @@ static const builtin_info_t Array_info = { .class = JSCLASS_ARRAY, .props_cnt = ARRAY_SIZE(Array_props), .props = Array_props, - .destructor = Array_destructor, .on_put = Array_on_put, };
@@ -1655,7 +1649,6 @@ static const builtin_info_t ArrayInst_info = { .class = JSCLASS_ARRAY, .props_cnt = ARRAY_SIZE(ArrayInst_props), .props = ArrayInst_props, - .destructor = Array_destructor, .on_put = Array_on_put, };
From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/object.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index d62acfa178a..382f4107c45 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -448,11 +448,6 @@ done: return r ? jsval_copy(argv[0], r) : S_OK; }
-static void Object_destructor(jsdisp_t *dispex) -{ - free(dispex); -} - static const builtin_prop_t Object_props[] = { {L"__defineGetter__", Object_defineGetter, PROPF_METHOD|PROPF_ES6|2}, {L"__defineSetter__", Object_defineSetter, PROPF_METHOD|PROPF_ES6|2}, @@ -468,12 +463,10 @@ static const builtin_info_t Object_info = { .class = JSCLASS_OBJECT, .props_cnt = ARRAY_SIZE(Object_props), .props = Object_props, - .destructor = Object_destructor, };
static const builtin_info_t ObjectInst_info = { - .class = JSCLASS_OBJECT, - .destructor = Object_destructor, + .class = JSCLASS_OBJECT, };
static void release_property_descriptor(property_desc_t *desc)
From: Jacek Caban jacek@codeweavers.com
Instead of class-specific destructors. --- dlls/jscript/arraybuf.c | 1 - dlls/jscript/dispex.c | 3 +-- dlls/jscript/engine.c | 1 - dlls/jscript/enumerator.c | 1 - dlls/jscript/function.c | 3 --- dlls/jscript/jsregexp.c | 1 - dlls/jscript/set.c | 4 ---- dlls/jscript/string.c | 1 - dlls/jscript/vbarray.c | 1 - 9 files changed, 1 insertion(+), 15 deletions(-)
diff --git a/dlls/jscript/arraybuf.c b/dlls/jscript/arraybuf.c index f12720d42b0..fc01773338f 100644 --- a/dlls/jscript/arraybuf.c +++ b/dlls/jscript/arraybuf.c @@ -592,7 +592,6 @@ static void DataView_destructor(jsdisp_t *dispex) DataViewInstance *view = dataview_from_jsdisp(dispex); if(view->buffer) jsdisp_release(&view->buffer->dispex); - free(view); }
static HRESULT DataView_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex) diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index cc4ff85b508..a678421f0a3 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -2263,8 +2263,7 @@ void jsdisp_free(jsdisp_t *obj)
if(obj->builtin_info->destructor) obj->builtin_info->destructor(obj); - else - free(obj); + free(obj); }
#ifdef TRACE_REFCNT diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 5bc9f4de20e..60b479fb83b 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -476,7 +476,6 @@ static void scope_destructor(jsdisp_t *dispex)
if(scope->obj) IDispatch_Release(scope->obj); - free(scope); }
static unsigned scope_idx_length(jsdisp_t *dispex) diff --git a/dlls/jscript/enumerator.c b/dlls/jscript/enumerator.c index ed671f5cbbe..203bfa8b8e0 100644 --- a/dlls/jscript/enumerator.c +++ b/dlls/jscript/enumerator.c @@ -87,7 +87,6 @@ static void Enumerator_destructor(jsdisp_t *dispex) if(This->enumvar) IEnumVARIANT_Release(This->enumvar); jsval_release(This->item); - free(dispex); }
static HRESULT Enumerator_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex) diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index 75f313b0975..9c339b807f7 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -115,8 +115,6 @@ static void Arguments_destructor(jsdisp_t *jsdisp)
if(arguments->scope) scope_release(arguments->scope); - - free(arguments); }
static unsigned Arguments_idx_length(jsdisp_t *jsdisp) @@ -580,7 +578,6 @@ static void Function_destructor(jsdisp_t *dispex) { FunctionInstance *function = function_from_jsdisp(dispex); function->vtbl->destructor(function); - free(function); }
static HRESULT Function_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex) diff --git a/dlls/jscript/jsregexp.c b/dlls/jscript/jsregexp.c index d184f2f2685..e3a707b1f6b 100644 --- a/dlls/jscript/jsregexp.c +++ b/dlls/jscript/jsregexp.c @@ -550,7 +550,6 @@ static void RegExp_destructor(jsdisp_t *dispex) regexp_destroy(This->jsregexp); jsval_release(This->last_index_val); jsstr_release(This->str); - free(This); }
static HRESULT RegExp_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex) diff --git a/dlls/jscript/set.c b/dlls/jscript/set.c index f2fe562e519..5a568607a43 100644 --- a/dlls/jscript/set.c +++ b/dlls/jscript/set.c @@ -359,8 +359,6 @@ static void Map_destructor(jsdisp_t *dispex) assert(!entry->deleted); release_map_entry(entry); } - - free(map); }
static HRESULT Map_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex) @@ -806,8 +804,6 @@ static void WeakMap_destructor(jsdisp_t *dispex)
while(weakmap->map.root) remove_weakmap_entry(RB_ENTRY_VALUE(weakmap->map.root, struct weakmap_entry, entry)); - - free(weakmap); }
static HRESULT WeakMap_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex) diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index 38a80eecb2a..ab7497912f2 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -1499,7 +1499,6 @@ static void String_destructor(jsdisp_t *dispex) StringInstance *This = string_from_jsdisp(dispex);
jsstr_release(This->str); - free(This); }
static unsigned String_idx_length(jsdisp_t *jsdisp) diff --git a/dlls/jscript/vbarray.c b/dlls/jscript/vbarray.c index c46b331e787..55500c86769 100644 --- a/dlls/jscript/vbarray.c +++ b/dlls/jscript/vbarray.c @@ -235,7 +235,6 @@ static void VBArray_destructor(jsdisp_t *dispex) VBArrayInstance *vbarray = vbarray_from_jsdisp(dispex);
SafeArrayDestroy(vbarray->safearray); - free(vbarray); }
static const builtin_prop_t VBArray_props[] = {