mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 16:42:45 +00:00
jscript: Retrieve the item's dispatch in a helper function.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com> Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
8fac69ba50
commit
70d8c011d2
|
@ -129,6 +129,30 @@ static void release_named_item_script_obj(named_item_t *item)
|
||||||
item->script_obj = NULL;
|
item->script_obj = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT retrieve_named_item_disp(IActiveScriptSite *site, named_item_t *item)
|
||||||
|
{
|
||||||
|
IUnknown *unk;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
if(!site)
|
||||||
|
return E_UNEXPECTED;
|
||||||
|
|
||||||
|
hr = IActiveScriptSite_GetItemInfo(site, item->name, SCRIPTINFO_IUNKNOWN, &unk, NULL);
|
||||||
|
if(FAILED(hr)) {
|
||||||
|
WARN("GetItemInfo failed: %08x\n", hr);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
|
||||||
|
IUnknown_Release(unk);
|
||||||
|
if(FAILED(hr)) {
|
||||||
|
WARN("object does not implement IDispatch\n");
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
named_item_t *lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsigned flags)
|
named_item_t *lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsigned flags)
|
||||||
{
|
{
|
||||||
named_item_t *item;
|
named_item_t *item;
|
||||||
|
@ -140,25 +164,10 @@ named_item_t *lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsig
|
||||||
hr = create_named_item_script_obj(ctx, item);
|
hr = create_named_item_script_obj(ctx, item);
|
||||||
if(FAILED(hr)) return NULL;
|
if(FAILED(hr)) return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!item->disp && (flags || !(item->flags & SCRIPTITEM_CODEONLY))) {
|
if(!item->disp && (flags || !(item->flags & SCRIPTITEM_CODEONLY))) {
|
||||||
IUnknown *unk;
|
hr = retrieve_named_item_disp(ctx->site, item);
|
||||||
|
if(FAILED(hr)) continue;
|
||||||
if(!ctx->site)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
hr = IActiveScriptSite_GetItemInfo(ctx->site, item_name,
|
|
||||||
SCRIPTINFO_IUNKNOWN, &unk, NULL);
|
|
||||||
if(FAILED(hr)) {
|
|
||||||
WARN("GetItemInfo failed: %08x\n", hr);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
|
|
||||||
IUnknown_Release(unk);
|
|
||||||
if(FAILED(hr)) {
|
|
||||||
WARN("object does not implement IDispatch\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
|
|
Loading…
Reference in a new issue