[PATCH v5 7/9] jscript: Retrieve the proper 'this' object for bytecodes with named items.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Fri Mar 6 07:48:44 CST 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/jscript/engine.c | 5 +++++
dlls/jscript/tests/jscript.c | 3 ---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index 044e32c..3e32ea0 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -3099,6 +3099,11 @@ HRESULT exec_source(script_ctx_t *ctx, DWORD flags, bytecode_t *bytecode, functi
frame->this_obj = this_obj;
IDispatch_AddRef(frame->this_obj);
}
+ else if(bytecode->named_item) {
+ frame->this_obj = (bytecode->named_item->flags & SCRIPTITEM_CODEONLY)
+ ? to_disp(bytecode->named_item->script_obj) : bytecode->named_item->disp;
+ IDispatch_AddRef(frame->this_obj);
+ }
if(function_instance)
frame->function_instance = jsdisp_addref(function_instance);
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index f0f8c70..a981ce8 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -1244,7 +1244,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);
@@ -1396,7 +1395,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);
@@ -1407,7 +1405,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