[PATCH 4/8] jscript: Lookup the named item using a helper function.

Gabriel Ivăncescu gabrielopcode at gmail.com
Wed Feb 19 10:38:06 CST 2020


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---

This will simplify the 7th patch.

 dlls/jscript/engine.c  | 34 ++++++----------------------------
 dlls/jscript/jscript.c | 35 +++++++++++++++++++++++++++++++++++
 dlls/jscript/jscript.h |  2 ++
 3 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index f94cfd1..4e28b63 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -662,34 +662,12 @@ static HRESULT identifier_eval(script_ctx_t *ctx, BSTR identifier, exprval_t *re
         return S_OK;
     }
 
-    for(item = ctx->named_items; item; item = item->next) {
-        if((item->flags & SCRIPTITEM_ISVISIBLE) && !wcscmp(item->name, identifier)) {
-            if(!item->disp) {
-                IUnknown *unk;
-
-                if(!ctx->site)
-                    break;
-
-                hres = IActiveScriptSite_GetItemInfo(ctx->site, identifier,
-                                                     SCRIPTINFO_IUNKNOWN, &unk, NULL);
-                if(FAILED(hres)) {
-                    WARN("GetItemInfo failed: %08x\n", hres);
-                    break;
-                }
-
-                hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
-                IUnknown_Release(unk);
-                if(FAILED(hres)) {
-                    WARN("object does not implement IDispatch\n");
-                    break;
-                }
-            }
-
-            IDispatch_AddRef(item->disp);
-            ret->type = EXPRVAL_JSVAL;
-            ret->u.val = jsval_disp(item->disp);
-            return S_OK;
-        }
+    item = lookup_named_item(ctx, identifier, SCRIPTITEM_ISVISIBLE);
+    if(item) {
+        IDispatch_AddRef(item->disp);
+        ret->type = EXPRVAL_JSVAL;
+        ret->u.val = jsval_disp(item->disp);
+        return S_OK;
     }
 
     if(lookup_global_members(ctx, identifier, ret))
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index 98fe759..1970437 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -108,6 +108,41 @@ static inline BOOL is_started(script_ctx_t *ctx)
         || ctx->state == SCRIPTSTATE_DISCONNECTED;
 }
 
+named_item_t *lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsigned flags)
+{
+    named_item_t *item;
+    HRESULT hr;
+
+    for(item = ctx->named_items; item; item = item->next) {
+        if((item->flags & flags) == flags && !wcscmp(item->name, item_name)) {
+            if(!item->disp) {
+                IUnknown *unk;
+
+                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 NULL;
+}
+
 static inline JScriptError *impl_from_IActiveScriptError(IActiveScriptError *iface)
 {
     return CONTAINING_RECORD(iface, JScriptError, IActiveScriptError_iface);
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 113ec99..8297838 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -212,6 +212,8 @@ typedef struct named_item_t {
     struct named_item_t *next;
 } named_item_t;
 
+named_item_t *lookup_named_item(script_ctx_t*,const WCHAR*,unsigned) DECLSPEC_HIDDEN;
+
 typedef struct {
     const WCHAR *name;
     builtin_invoke_t invoke;
-- 
2.21.0




More information about the wine-devel mailing list