Jacek Caban : vbscript: Split named item lookup into a helper function.
Alexandre Julliard
julliard at winehq.org
Mon Mar 19 18:32:49 CDT 2018
Module: wine
Branch: master
Commit: aa5b68ac400726132aa61a6e590e33d17f087f94
URL: https://source.winehq.org/git/wine.git/?a=commit;h=aa5b68ac400726132aa61a6e590e33d17f087f94
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Mar 16 23:34:41 2018 +0100
vbscript: Split named item lookup into a helper function.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/vbscript/interp.c | 29 ++++++-----------------------
dlls/vbscript/vbscript.c | 32 ++++++++++++++++++++++++++++++++
dlls/vbscript/vbscript.h | 1 +
3 files changed, 39 insertions(+), 23 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 9ec3299..4f746c7 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -99,6 +99,7 @@ static HRESULT lookup_identifier(exec_ctx_t *ctx, BSTR name, vbdisp_invoke_type_
{
named_item_t *item;
function_t *func;
+ IDispatch *disp;
unsigned i;
DISPID id;
HRESULT hres;
@@ -178,29 +179,11 @@ static HRESULT lookup_identifier(exec_ctx_t *ctx, BSTR name, vbdisp_invoke_type_
return S_OK;
}
- LIST_FOR_EACH_ENTRY(item, &ctx->script->named_items, named_item_t, entry) {
- if((item->flags & SCRIPTITEM_ISVISIBLE) && !strcmpiW(item->name, name)) {
- if(!item->disp) {
- IUnknown *unk;
-
- hres = IActiveScriptSite_GetItemInfo(ctx->script->site, item->name, SCRIPTINFO_IUNKNOWN, &unk, NULL);
- if(FAILED(hres)) {
- WARN("GetItemInfo failed: %08x\n", hres);
- continue;
- }
-
- hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
- IUnknown_Release(unk);
- if(FAILED(hres)) {
- WARN("object does not implement IDispatch\n");
- continue;
- }
- }
-
- ref->type = REF_OBJ;
- ref->u.obj = item->disp;
- return S_OK;
- }
+ disp = lookup_named_item(ctx->script, name, SCRIPTITEM_ISVISIBLE);
+ if(disp) {
+ ref->type = REF_OBJ;
+ ref->u.obj = disp;
+ return S_OK;
}
LIST_FOR_EACH_ENTRY(item, &ctx->script->named_items, named_item_t, entry) {
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index 645068e..054d53b 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -96,6 +96,38 @@ static void exec_queued_code(script_ctx_t *ctx)
}
}
+IDispatch *lookup_named_item(script_ctx_t *ctx, const WCHAR *name, unsigned flags)
+{
+ named_item_t *item;
+ HRESULT hres;
+
+ LIST_FOR_EACH_ENTRY(item, &ctx->named_items, named_item_t, entry) {
+ if((item->flags & flags) == flags && !strcmpiW(item->name, name)) {
+ if(!item->disp) {
+ IUnknown *unk;
+
+ hres = IActiveScriptSite_GetItemInfo(ctx->site, item->name,
+ SCRIPTINFO_IUNKNOWN, &unk, NULL);
+ if(FAILED(hres)) {
+ WARN("GetItemInfo failed: %08x\n", hres);
+ continue;
+ }
+
+ hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
+ IUnknown_Release(unk);
+ if(FAILED(hres)) {
+ WARN("object does not implement IDispatch\n");
+ continue;
+ }
+ }
+
+ return item->disp;
+ }
+ }
+
+ return NULL;
+}
+
static HRESULT set_ctx_site(VBScript *This)
{
HRESULT hres;
diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h
index 5e935ff..42b3cd1 100644
--- a/dlls/vbscript/vbscript.h
+++ b/dlls/vbscript/vbscript.h
@@ -355,6 +355,7 @@ void release_vbscode(vbscode_t*) DECLSPEC_HIDDEN;
HRESULT compile_script(script_ctx_t*,const WCHAR*,const WCHAR*,vbscode_t**) DECLSPEC_HIDDEN;
HRESULT exec_script(script_ctx_t*,function_t*,vbdisp_t*,DISPPARAMS*,VARIANT*) DECLSPEC_HIDDEN;
void release_dynamic_vars(dynamic_var_t*) DECLSPEC_HIDDEN;
+IDispatch *lookup_named_item(script_ctx_t*,const WCHAR*,unsigned) DECLSPEC_HIDDEN;
typedef struct {
UINT16 len;
More information about the wine-cvs
mailing list