[PATCH v2 5/5] jscript: Clear the CODEONLY flag for persistent items when the script is reinitialized.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Tue Mar 24 11:50:00 CDT 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/jscript/jscript.c | 3 +++
dlls/jscript/tests/jscript.c | 25 ++++++++++++++++++++++++-
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index 3fcaab0..eb328d2 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -757,6 +757,9 @@ static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
hres = retrieve_named_item_disp(pass, item);
if(FAILED(hres)) return hres;
}
+
+ /* For some reason, Windows clears the CODEONLY flag */
+ item->flags &= ~SCRIPTITEM_CODEONLY;
}
This->site = pass;
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index 955c66c..5fcce57 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -1522,6 +1522,18 @@ static void test_named_items(void)
IDispatchEx_Release(dispex2);
IDispatchEx_Release(dispex);
+ dispex = get_script_dispatch(script, L"persistent");
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
+ ok(hr == S_OK, "ParseScriptText failed: %08x\n", hr);
+ ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)dispex,
+ "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
+ VariantClear(&var);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+ IDispatchEx_Release(dispex);
+
SET_EXPECT(OnEnterScript);
SET_EXPECT(OnLeaveScript);
hr = IActiveScriptParse_ParseScriptText(parse, L"var x = 13;\n", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
@@ -1586,7 +1598,7 @@ static void test_named_items(void)
CHECK_CALLED(OnStateChange_CONNECTED);
CHECK_CALLED_MULTI(OnEnterScript, 5);
CHECK_CALLED_MULTI(OnLeaveScript, 5);
- todo_wine CHECK_CALLED(GetIDsOfNames_persistent);
+ CHECK_CALLED(GetIDsOfNames_persistent);
test_state(script, SCRIPTSTATE_CONNECTED);
dispex2 = get_script_dispatch(script, L"persistent");
@@ -1601,6 +1613,17 @@ static void test_named_items(void)
CHECK_CALLED(OnEnterScript);
CHECK_CALLED(OnLeaveScript);
+ /* For some reason, CODEONLY flag is removed when persistent items are re-initialized */
+ SET_EXPECT(OnEnterScript);
+ SET_EXPECT(OnLeaveScript);
+ hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
+ ok(hr == S_OK, "ParseScriptText failed: %08x\n", hr);
+ ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == &persistent_named_item,
+ "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
+ VariantClear(&var);
+ CHECK_CALLED(OnEnterScript);
+ CHECK_CALLED(OnLeaveScript);
+
dispex = get_script_dispatch(script, NULL);
for (i = 0; i < ARRAY_SIZE(global_idents); i++)
{
--
2.21.0
More information about the wine-devel
mailing list