[PATCH v8 2/3] jscript: Retrieve the proper 'this' object for bytecodes with named items.

Gabriel Ivăncescu gabrielopcode at gmail.com
Wed Mar 11 08:06:30 CDT 2020


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
 dlls/jscript/engine.c        | 10 ++++++++--
 dlls/jscript/tests/jscript.c |  3 ---
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index 044e32c..017f3d0 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -1246,8 +1246,14 @@ static HRESULT interp_this(script_ctx_t *ctx)
 
     TRACE("\n");
 
-    if(!this_obj)
-        this_obj = lookup_global_host(ctx);
+    if(!this_obj) {
+        named_item_t *item = ctx->call_ctx->bytecode->named_item;
+
+        if(item)
+            this_obj = (item->flags & SCRIPTITEM_CODEONLY) ? to_disp(item->script_obj) : item->disp;
+        else
+            this_obj = lookup_global_host(ctx);
+    }
 
     IDispatch_AddRef(this_obj);
     return stack_push(ctx, jsval_disp(this_obj));
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index 5de933e..1246f2d 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -1252,7 +1252,6 @@ static void test_named_items(void)
     SET_EXPECT(OnLeaveScript);
     hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"visibleCodeItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
     ok(hr == S_OK, "ParseScriptText failed: %08x\n", hr);
-    todo_wine
     ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == disp,
         "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
     VariantClear(&var);
@@ -1415,7 +1414,6 @@ static void test_named_items(void)
     SET_EXPECT(OnLeaveScript);
     hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"visibleItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
     ok(hr == S_OK, "ParseScriptText failed: %08x\n", hr);
-    todo_wine
     ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == &visible_named_item,
         "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
     VariantClear(&var);
@@ -1426,7 +1424,6 @@ static void test_named_items(void)
     SET_EXPECT(OnLeaveScript);
     hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"codeOnlyItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
     ok(hr == S_OK, "ParseScriptText failed: %08x\n", hr);
-    todo_wine
     ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)dispex2,
         "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
     VariantClear(&var);
-- 
2.21.0




More information about the wine-devel mailing list