Jacek Caban : vbscript: Lookup host global object in interp_me instead of storing it in script context.
Alexandre Julliard
julliard at winehq.org
Fri Feb 28 13:54:41 CST 2020
Module: wine
Branch: master
Commit: b4e89eec1729d325bd6ff0708fdba63dbd99ac84
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b4e89eec1729d325bd6ff0708fdba63dbd99ac84
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Feb 28 17:26:21 2020 +0100
vbscript: Lookup host global object in interp_me instead of storing it in script context.
Inspired by patch by Gabriel Ivăncescu.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/vbscript/interp.c | 19 +++++++++++++------
dlls/vbscript/vbscript.c | 10 ----------
dlls/vbscript/vbscript.h | 2 --
3 files changed, 13 insertions(+), 18 deletions(-)
diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 27a4aee9bd..d2e1d2a63f 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -1524,16 +1524,23 @@ static HRESULT interp_me(exec_ctx_t *ctx)
TRACE("\n");
- if(ctx->vbthis)
+ if(ctx->vbthis) {
disp = (IDispatch*)&ctx->vbthis->IDispatchEx_iface;
- else if(ctx->code->named_item)
+ }else if(ctx->code->named_item) {
disp = (ctx->code->named_item->flags & SCRIPTITEM_CODEONLY)
? (IDispatch*)&ctx->code->named_item->script_obj->IDispatchEx_iface
: ctx->code->named_item->disp;
- else if(ctx->script->host_global)
- disp = ctx->script->host_global;
- else
- disp = (IDispatch*)&ctx->script->script_obj->IDispatchEx_iface;
+ }else {
+ named_item_t *item;
+ disp = NULL;
+ LIST_FOR_EACH_ENTRY(item, &ctx->script->named_items, named_item_t, entry) {
+ if(!(item->flags & SCRIPTITEM_GLOBALMEMBERS)) continue;
+ disp = item->disp;
+ break;
+ }
+ if(!disp)
+ disp = (IDispatch*)&ctx->script->script_obj->IDispatchEx_iface;
+ }
IDispatch_AddRef(disp);
V_VT(&v) = VT_DISPATCH;
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index 27985bfc53..ea80911f10 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -283,11 +283,6 @@ static void release_script(script_ctx_t *ctx)
release_named_item(iter);
}
- if(ctx->host_global) {
- IDispatch_Release(ctx->host_global);
- ctx->host_global = NULL;
- }
-
if(ctx->secmgr) {
IInternetHostSecurityManager_Release(ctx->secmgr);
ctx->secmgr = NULL;
@@ -675,11 +670,6 @@ static HRESULT WINAPI VBScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstr
WARN("object does not implement IDispatch\n");
return hres;
}
-
- if(This->ctx->host_global)
- IDispatch_Release(This->ctx->host_global);
- IDispatch_AddRef(disp);
- This->ctx->host_global = disp;
}
item = heap_alloc(sizeof(*item));
diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h
index 5860863a0c..27ddae3979 100644
--- a/dlls/vbscript/vbscript.h
+++ b/dlls/vbscript/vbscript.h
@@ -186,8 +186,6 @@ struct _script_ctx_t {
IInternetHostSecurityManager *secmgr;
DWORD safeopt;
- IDispatch *host_global;
-
ScriptDisp *script_obj;
BuiltinDisp *global_obj;
More information about the wine-cvs
mailing list