WebKit Bugzilla
Attachment 369313 Details for
Bug 197671
: REGRESSION(r244978): TemplateObject map should use start/end offsets (Requested by yusukesuzuki on #webkit).
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
ROLLOUT of r244978
bug-197671-20190507122245.patch (text/plain), 65.29 KB, created by
WebKit Commit Bot
on 2019-05-07 12:22:46 PDT
(
hide
)
Description:
ROLLOUT of r244978
Filename:
MIME Type:
Creator:
WebKit Commit Bot
Created:
2019-05-07 12:22:46 PDT
Size:
65.29 KB
patch
obsolete
>Subversion Revision: 245023 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index da788495030173935349043e6d09be6a059bbe8f..a555e5636f36b357cb39d55a500382913d00575b 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,18 @@ >+2019-05-07 Commit Queue <commit-queue@webkit.org> >+ >+ Unreviewed, rolling out r244978. >+ https://bugs.webkit.org/show_bug.cgi?id=197671 >+ >+ TemplateObject map should use start/end offsets (Requested by >+ yusukesuzuki on #webkit). >+ >+ Reverted changeset: >+ >+ "TemplateObject passed to template literal tags are not always >+ identical for the same source location." >+ https://bugs.webkit.org/show_bug.cgi?id=190756 >+ https://trac.webkit.org/changeset/244978 >+ > 2019-05-07 Tadeu Zagallo <tzagallo@apple.com> > > tryCachePutByID should not crash if target offset changes >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result >index 8d30ca908f337f4e6f668cf4701b76436009e0d4..8ab7656c47349c86acefc8d125dbfc0c65c4f5ca 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result >@@ -141,7 +141,7 @@ s_JSCCombinedCode + 412 > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } > JSC_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR > >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result >index 048a6011bfaa783601dca1090224ab74a0ed1676..bcedfb9cb8c44d77946cff857a684ac19f6ca05d 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result >@@ -158,7 +158,7 @@ const char* const s_builtinPromiseFulfillPromiseCode = > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } > JSC_FOREACH_BUILTIN.PROMISE_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR > >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result >index 3dedbe198d5241ef8eb21191c21b731de8d4acfa..215ec8eff998bdce458de12dd4c16cec88d31841 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result >@@ -167,7 +167,7 @@ s_JSCCombinedCode + 2694 > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } > JSC_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR > >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result >index 8ff897fca92c80fa653e2791fdcf9df3ab52a63d..ebb2e720bdb4933f4ca9d8f7c47e97aebd1550fe 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result >@@ -282,7 +282,7 @@ const char* const s_builtinPrototypeTestCode = > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } > JSC_FOREACH_BUILTIN.PROTOTYPE_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR > >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result >index 1d8345fee9ccc99e15dbf7ab2dc10b8143cae2c7..be3a59a3a2dd51d89a5753fa4482d7fbede05d9c 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result >@@ -139,7 +139,7 @@ s_JSCCombinedCode + 2046 > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } > JSC_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR > >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result >index a6ddd91fd06717d47f03ab054f2f459f7972a2b7..454861fd17f6529f49a56230ab5f0b3cff070cba 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result >@@ -212,7 +212,7 @@ const char* const s_builtinConstructorFromCode = > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } > JSC_FOREACH_BUILTINCONSTRUCTOR_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR > >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result >index b5feac2908c06326ccbf9f11c5de793137d15283..bfb2b2ec6bcf1b87465ae272b24afd4786b99942 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result >@@ -140,7 +140,7 @@ s_JSCCombinedCode + 71 > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); } > JSC_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR > >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result >index 043a993034f6625afc2e65b68beceb6da0fb2242..e46d23ad976fa0665545de1b69f9caedddb7dd17 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result >@@ -220,7 +220,7 @@ const char* const s_anotherGuardedInternalBuiltinLetsFetchCode = > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ >- return clientData->builtinFunctions().anotherGuardedInternalBuiltinBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().anotherGuardedInternalBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return clientData->builtinFunctions().anotherGuardedInternalBuiltinBuiltins().codeName##Executable()->link(vm, clientData->builtinFunctions().anotherGuardedInternalBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > WEBCORE_FOREACH_ANOTHERGUARDEDINTERNALBUILTIN_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result >index a42fcfb8271f27dc8dfe5d6f39ebdf7fd6e37e05..be0709a34ea6c52f5d60aa49f8f094e23c9320bd 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result >@@ -190,7 +190,7 @@ const char* const s_arbitraryConditionalGuardIsReadableStreamLockedCode = > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ >- return clientData->builtinFunctions().arbitraryConditionalGuardBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().arbitraryConditionalGuardBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return clientData->builtinFunctions().arbitraryConditionalGuardBuiltins().codeName##Executable()->link(vm, clientData->builtinFunctions().arbitraryConditionalGuardBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > WEBCORE_FOREACH_ARBITRARYCONDITIONALGUARD_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result >index 5896e07d69319a077ccb98a0870b19fabc458a6a..5567dfa921fbd1f7fe087eeb8fc1ee06e0ff362c 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result >@@ -190,7 +190,7 @@ const char* const s_guardedBuiltinIsReadableStreamLockedCode = > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ >- return clientData->builtinFunctions().guardedBuiltinBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().guardedBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return clientData->builtinFunctions().guardedBuiltinBuiltins().codeName##Executable()->link(vm, clientData->builtinFunctions().guardedBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > WEBCORE_FOREACH_GUARDEDBUILTIN_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result >index cc191ed9fbf25c7a50b8011b82699c95fea182c5..6adaf32c7e1a5bf1e0c9314b7a864230539eba04 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result >@@ -222,7 +222,7 @@ const char* const s_guardedInternalBuiltinIsReadableStreamLockedCode = > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ >- return clientData->builtinFunctions().guardedInternalBuiltinBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().guardedInternalBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return clientData->builtinFunctions().guardedInternalBuiltinBuiltins().codeName##Executable()->link(vm, clientData->builtinFunctions().guardedInternalBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > WEBCORE_FOREACH_GUARDEDINTERNALBUILTIN_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result >index 0c091eb831aa509bd9c01567b8f172f011123f93..8bc20fbddc24e4078bf77730ffbc2b3ab7f0ee2d 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result >@@ -184,7 +184,7 @@ const char* const s_unguardedBuiltinIsReadableStreamLockedCode = > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ >- return clientData->builtinFunctions().unguardedBuiltinBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().unguardedBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return clientData->builtinFunctions().unguardedBuiltinBuiltins().codeName##Executable()->link(vm, clientData->builtinFunctions().unguardedBuiltinBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > WEBCORE_FOREACH_UNGUARDEDBUILTIN_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >diff --git a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result >index fe2eff5bae5a06f7d766c4b468a5284a923370a0..02d4417473d9bc4e79a1567e1d3afdedaa572e97 100644 >--- a/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result >+++ b/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result >@@ -275,7 +275,7 @@ const char* const s_xmlCasingTestUrlCasingTestCode = > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ > {\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ >- return clientData->builtinFunctions().xmlCasingTestBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().xmlCasingTestBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return clientData->builtinFunctions().xmlCasingTestBuiltins().codeName##Executable()->link(vm, clientData->builtinFunctions().xmlCasingTestBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > WEBCORE_FOREACH_XMLCASINGTEST_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >diff --git a/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_templates.py b/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_templates.py >index 3665cb5eb678abaf41c67e808621c09f794f6f01..4c293cc297fbe019865c9b1c0415a22768e570b4 100644 >--- a/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_templates.py >+++ b/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_templates.py >@@ -85,7 +85,7 @@ ${macroPrefix}_FOREACH_${objectMacro}_BUILTIN_CODE(DECLARE_BUILTIN_GENERATOR) > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \\ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \\ > {\\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > ${macroPrefix}_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >@@ -96,7 +96,7 @@ ${macroPrefix}_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \\ > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \\ > {\\ >- return vm.builtinExecutables()->codeName##Executable()->link(vm, nullptr, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ >+ return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \ > } > ${macroPrefix}_FOREACH_${objectMacro}_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >@@ -108,7 +108,7 @@ ${macroPrefix}_FOREACH_${objectMacro}_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \\ > {\\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \\ >- return clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \\ >+ return clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Executable()->link(vm, clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \\ > } > ${macroPrefix}_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >@@ -120,7 +120,7 @@ ${macroPrefix}_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \\ > {\\ > JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \\ >- return clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \\ >+ return clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Executable()->link(vm, clientData->builtinFunctions().${objectNameLC}Builtins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \\ > } > ${macroPrefix}_FOREACH_${objectMacro}_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) > #undef DEFINE_BUILTIN_GENERATOR >diff --git a/Source/JavaScriptCore/bytecode/CodeBlock.cpp b/Source/JavaScriptCore/bytecode/CodeBlock.cpp >index 46f3ed72ac1193594622d59ab53b1bd49d0b7536..7b191cd2bec07ce930305cddc27376d8c67f9e5b 100644 >--- a/Source/JavaScriptCore/bytecode/CodeBlock.cpp >+++ b/Source/JavaScriptCore/bytecode/CodeBlock.cpp >@@ -395,8 +395,7 @@ bool CodeBlock::finishCreation(VM& vm, ScriptExecutable* ownerExecutable, Unlink > if (m_unlinkedCode->wasCompiledWithTypeProfilerOpcodes() || m_unlinkedCode->wasCompiledWithControlFlowProfilerOpcodes()) > vm.functionHasExecutedCache()->removeUnexecutedRange(ownerExecutable->sourceID(), ownerExecutable->typeProfilingStartOffset(vm), ownerExecutable->typeProfilingEndOffset(vm)); > >- ScriptExecutable* topLevelExecutable = ownerExecutable->topLevelExecutable(); >- setConstantRegisters(unlinkedCodeBlock->constantRegisters(), unlinkedCodeBlock->constantsSourceCodeRepresentation(), topLevelExecutable); >+ setConstantRegisters(unlinkedCodeBlock->constantRegisters(), unlinkedCodeBlock->constantsSourceCodeRepresentation()); > RETURN_IF_EXCEPTION(throwScope, false); > > for (unsigned i = 0; i < LinkTimeConstantCount; i++) { >@@ -422,7 +421,7 @@ bool CodeBlock::finishCreation(VM& vm, ScriptExecutable* ownerExecutable, Unlink > UnlinkedFunctionExecutable* unlinkedExecutable = unlinkedCodeBlock->functionDecl(i); > if (shouldUpdateFunctionHasExecutedCache) > vm.functionHasExecutedCache()->insertUnexecutedRange(ownerExecutable->sourceID(), unlinkedExecutable->typeProfilingStartOffset(), unlinkedExecutable->typeProfilingEndOffset()); >- m_functionDecls[i].set(vm, this, unlinkedExecutable->link(vm, topLevelExecutable, ownerExecutable->source())); >+ m_functionDecls[i].set(vm, this, unlinkedExecutable->link(vm, ownerExecutable->source())); > } > > m_functionExprs = RefCountedArray<WriteBarrier<FunctionExecutable>>(unlinkedCodeBlock->numberOfFunctionExprs()); >@@ -430,7 +429,7 @@ bool CodeBlock::finishCreation(VM& vm, ScriptExecutable* ownerExecutable, Unlink > UnlinkedFunctionExecutable* unlinkedExecutable = unlinkedCodeBlock->functionExpr(i); > if (shouldUpdateFunctionHasExecutedCache) > vm.functionHasExecutedCache()->insertUnexecutedRange(ownerExecutable->sourceID(), unlinkedExecutable->typeProfilingStartOffset(), unlinkedExecutable->typeProfilingEndOffset()); >- m_functionExprs[i].set(vm, this, unlinkedExecutable->link(vm, topLevelExecutable, ownerExecutable->source())); >+ m_functionExprs[i].set(vm, this, unlinkedExecutable->link(vm, ownerExecutable->source())); > } > > if (unlinkedCodeBlock->hasRareData()) { >@@ -871,7 +870,7 @@ void CodeBlock::setConstantIdentifierSetRegisters(VM& vm, const Vector<ConstantI > } > } > >-void CodeBlock::setConstantRegisters(const Vector<WriteBarrier<Unknown>>& constants, const Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation, ScriptExecutable* topLevelExecutable) >+void CodeBlock::setConstantRegisters(const Vector<WriteBarrier<Unknown>>& constants, const Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation) > { > VM& vm = *m_vm; > auto scope = DECLARE_THROW_SCOPE(vm); >@@ -899,7 +898,7 @@ void CodeBlock::setConstantRegisters(const Vector<WriteBarrier<Unknown>>& consta > > constant = clone; > } else if (auto* descriptor = jsDynamicCast<JSTemplateObjectDescriptor*>(vm, cell)) { >- auto* templateObject = topLevelExecutable->createTemplateObject(exec, descriptor); >+ auto* templateObject = descriptor->createTemplateObject(exec); > RETURN_IF_EXCEPTION(scope, void()); > constant = templateObject; > } >diff --git a/Source/JavaScriptCore/bytecode/CodeBlock.h b/Source/JavaScriptCore/bytecode/CodeBlock.h >index 406fca08a123df10d70f69e1368bfc32224b6626..12f9082765813b5de76aeb6b8d941f2cb950ba66 100644 >--- a/Source/JavaScriptCore/bytecode/CodeBlock.h >+++ b/Source/JavaScriptCore/bytecode/CodeBlock.h >@@ -911,7 +911,7 @@ private: > > void setConstantIdentifierSetRegisters(VM&, const Vector<ConstantIdentifierSetEntry>& constants); > >- void setConstantRegisters(const Vector<WriteBarrier<Unknown>>& constants, const Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation, ScriptExecutable* topLevelExecutable); >+ void setConstantRegisters(const Vector<WriteBarrier<Unknown>>& constants, const Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation); > > void replaceConstant(int index, JSValue value) > { >diff --git a/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp b/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp >index 5e7148ebbc853c576b8bbb1c5a6f8ed669be7a08..61449db642025ff78b119fdb666c2af59d117fad 100644 >--- a/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp >+++ b/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp >@@ -158,7 +158,7 @@ SourceCode UnlinkedFunctionExecutable::linkedSourceCode(const SourceCode& passed > return SourceCode(parentSource.provider(), startOffset, startOffset + m_sourceLength, firstLine, startColumn); > } > >-FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, ScriptExecutable* topLevelExecutable, const SourceCode& passedParentSource, Optional<int> overrideLineNumber, Intrinsic intrinsic) >+FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, const SourceCode& passedParentSource, Optional<int> overrideLineNumber, Intrinsic intrinsic) > { > SourceCode source = linkedSourceCode(passedParentSource); > FunctionOverrides::OverrideInfo overrideInfo; >@@ -166,7 +166,7 @@ FunctionExecutable* UnlinkedFunctionExecutable::link(VM& vm, ScriptExecutable* t > if (UNLIKELY(Options::functionOverrides())) > hasFunctionOverride = FunctionOverrides::initializeOverrideFor(source, overrideInfo); > >- FunctionExecutable* result = FunctionExecutable::create(vm, topLevelExecutable, source, this, intrinsic); >+ FunctionExecutable* result = FunctionExecutable::create(vm, source, this, intrinsic); > if (overrideLineNumber) > result->setOverrideLineNumber(*overrideLineNumber); > >diff --git a/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h b/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h >index 8e0abed5c26ae5c66acf941eb0429b6fbe3f0cc0..1b035977a2bad2ca2b35ca298ca572edc5506071 100644 >--- a/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h >+++ b/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h >@@ -126,7 +126,7 @@ public: > int overrideLineNumber, Optional<int> functionConstructorParametersEndPosition); > > SourceCode linkedSourceCode(const SourceCode&) const; >- JS_EXPORT_PRIVATE FunctionExecutable* link(VM&, ScriptExecutable* topLevelExecutable, const SourceCode& parentSource, Optional<int> overrideLineNumber = WTF::nullopt, Intrinsic = NoIntrinsic); >+ JS_EXPORT_PRIVATE FunctionExecutable* link(VM&, const SourceCode& parentSource, Optional<int> overrideLineNumber = WTF::nullopt, Intrinsic = NoIntrinsic); > > void clearCode(VM& vm) > { >diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >index 94de182e73f8a8578640aeaa75e15481810ad7d6..35409a6904b04e8675083c0a25b9d34c076cc98d 100644 >--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >@@ -2948,12 +2948,12 @@ JSString* BytecodeGenerator::addStringConstant(const Identifier& identifier) > return stringInMap; > } > >-RegisterID* BytecodeGenerator::addTemplateObjectConstant(Ref<TemplateObjectDescriptor>&& descriptor, int startOffset) >+RegisterID* BytecodeGenerator::addTemplateObjectConstant(Ref<TemplateObjectDescriptor>&& descriptor) > { >- auto result = m_templateObjectDescriptorSet.add(WTFMove(descriptor)); >- JSTemplateObjectDescriptor* descriptorValue = m_templateDescriptorMap.ensure(startOffset, [&] { >- return JSTemplateObjectDescriptor::create(*vm(), result.iterator->copyRef(), startOffset); >+ JSTemplateObjectDescriptor* descriptorValue = m_templateObjectDescriptorMap.ensure(descriptor.copyRef(), [&] { >+ return JSTemplateObjectDescriptor::create(*vm(), WTFMove(descriptor)); > }).iterator->value; >+ > int index = addConstantIndex(); > m_codeBlock->addConstant(descriptorValue); > return &m_constantPoolRegisters[index]; >@@ -4141,7 +4141,7 @@ RegisterID* BytecodeGenerator::emitGetTemplateObject(RegisterID* dst, TaggedTemp > else > cookedStrings.append(string->cooked()->impl()); > } >- RefPtr<RegisterID> constant = addTemplateObjectConstant(TemplateObjectDescriptor::create(WTFMove(rawStrings), WTFMove(cookedStrings)), taggedTemplate->startOffset()); >+ RefPtr<RegisterID> constant = addTemplateObjectConstant(TemplateObjectDescriptor::create(WTFMove(rawStrings), WTFMove(cookedStrings))); > if (!dst) > return constant.get(); > return move(dst, constant.get()); >diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h >index 29ed39aad87ce09f31ff13581f86fe08aab07568..4426b515c432e18f65e884e8be8cb3c8d4b483b1 100644 >--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h >+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h >@@ -1060,8 +1060,7 @@ namespace JSC { > using NumberMap = HashMap<double, JSValue>; > using IdentifierStringMap = HashMap<UniquedStringImpl*, JSString*, IdentifierRepHash>; > using IdentifierBigIntMap = HashMap<BigIntMapEntry, JSBigInt*>; >- using TemplateObjectDescriptorSet = HashSet<Ref<TemplateObjectDescriptor>>; >- using TemplateDescriptorMap = HashMap<uint64_t, JSTemplateObjectDescriptor*, WTF::IntHash<uint64_t>, WTF::UnsignedWithZeroKeyHashTraits<uint64_t>>; >+ using TemplateObjectDescriptorMap = HashMap<Ref<TemplateObjectDescriptor>, JSTemplateObjectDescriptor*>; > > // Helper for emitCall() and emitConstruct(). This works because the set of > // expected functions have identical behavior for both call and construct >@@ -1153,7 +1152,7 @@ namespace JSC { > public: > JSString* addStringConstant(const Identifier&); > JSValue addBigIntConstant(const Identifier&, uint8_t radix, bool sign); >- RegisterID* addTemplateObjectConstant(Ref<TemplateObjectDescriptor>&&, int); >+ RegisterID* addTemplateObjectConstant(Ref<TemplateObjectDescriptor>&&); > > const InstructionStream& instructions() const { return m_writer; } > >@@ -1271,8 +1270,7 @@ namespace JSC { > JSValueMap m_jsValueMap; > IdentifierStringMap m_stringMap; > IdentifierBigIntMap m_bigIntMap; >- TemplateObjectDescriptorSet m_templateObjectDescriptorSet; >- TemplateDescriptorMap m_templateDescriptorMap; >+ TemplateObjectDescriptorMap m_templateObjectDescriptorMap; > > StaticPropertyAnalyzer m_staticPropertyAnalyzer; > >diff --git a/Source/JavaScriptCore/runtime/CachedTypes.cpp b/Source/JavaScriptCore/runtime/CachedTypes.cpp >index 7a971835dfdc71653c58b268b18d877e3f187157..93f2224efb0c0c1e802cbfcbaa3744f3b8eaf600 100644 >--- a/Source/JavaScriptCore/runtime/CachedTypes.cpp >+++ b/Source/JavaScriptCore/runtime/CachedTypes.cpp >@@ -1152,26 +1152,24 @@ private: > > class CachedTemplateObjectDescriptor : public CachedObject<TemplateObjectDescriptor> { > public: >- void encode(Encoder& encoder, const JSTemplateObjectDescriptor& descriptor) >+ void encode(Encoder& encoder, const TemplateObjectDescriptor& templateObjectDescriptor) > { >- m_rawStrings.encode(encoder, descriptor.descriptor().rawStrings()); >- m_cookedStrings.encode(encoder, descriptor.descriptor().cookedStrings()); >- m_startOffset = descriptor.startOffset(); >+ m_rawStrings.encode(encoder, templateObjectDescriptor.rawStrings()); >+ m_cookedStrings.encode(encoder, templateObjectDescriptor.cookedStrings()); > } > >- JSTemplateObjectDescriptor* decode(Decoder& decoder) const >+ Ref<TemplateObjectDescriptor> decode(Decoder& decoder) const > { > TemplateObjectDescriptor::StringVector decodedRawStrings; > TemplateObjectDescriptor::OptionalStringVector decodedCookedStrings; > m_rawStrings.decode(decoder, decodedRawStrings); > m_cookedStrings.decode(decoder, decodedCookedStrings); >- return JSTemplateObjectDescriptor::create(decoder.vm(), TemplateObjectDescriptor::create(WTFMove(decodedRawStrings), WTFMove(decodedCookedStrings)), m_startOffset); >+ return TemplateObjectDescriptor::create(WTFMove(decodedRawStrings), WTFMove(decodedCookedStrings)); > } > > private: > CachedVector<CachedString, 4> m_rawStrings; > CachedVector<CachedOptional<CachedString>, 4> m_cookedStrings; >- int m_startOffset; > }; > > class CachedBigInt : public VariableLengthObject<JSBigInt> { >@@ -1245,7 +1243,7 @@ public: > > if (auto* templateObjectDescriptor = jsDynamicCast<JSTemplateObjectDescriptor*>(vm, cell)) { > m_type = EncodedType::TemplateObjectDescriptor; >- this->allocate<CachedTemplateObjectDescriptor>(encoder)->encode(encoder, *templateObjectDescriptor); >+ this->allocate<CachedTemplateObjectDescriptor>(encoder)->encode(encoder, templateObjectDescriptor->descriptor()); > return; > } > >@@ -1280,7 +1278,7 @@ public: > v = this->buffer<CachedRegExp>()->decode(decoder); > break; > case EncodedType::TemplateObjectDescriptor: >- v = this->buffer<CachedTemplateObjectDescriptor>()->decode(decoder); >+ v = JSTemplateObjectDescriptor::create(decoder.vm(), this->buffer<CachedTemplateObjectDescriptor>()->decode(decoder)); > break; > case EncodedType::BigInt: > v = this->buffer<CachedBigInt>()->decode(decoder); >diff --git a/Source/JavaScriptCore/runtime/EvalExecutable.cpp b/Source/JavaScriptCore/runtime/EvalExecutable.cpp >index e2ca4081da32855c2faa13001154666565940179..28c7f76a7ac807f45464055e4a3b42c98ce4e210 100644 >--- a/Source/JavaScriptCore/runtime/EvalExecutable.cpp >+++ b/Source/JavaScriptCore/runtime/EvalExecutable.cpp >@@ -44,11 +44,6 @@ void EvalExecutable::destroy(JSCell* cell) > static_cast<EvalExecutable*>(cell)->EvalExecutable::~EvalExecutable(); > } > >-auto EvalExecutable::ensureTemplateObjectMap(VM&) -> TemplateObjectMap& >-{ >- return ensureTemplateObjectMapImpl(m_templateObjectMap); >-} >- > void EvalExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) > { > EvalExecutable* thisObject = jsCast<EvalExecutable*>(cell); >@@ -56,11 +51,6 @@ void EvalExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) > Base::visitChildren(thisObject, visitor); > visitor.append(thisObject->m_unlinkedEvalCodeBlock); > visitor.append(thisObject->m_evalCodeBlock); >- if (TemplateObjectMap* map = thisObject->m_templateObjectMap.get()) { >- auto locker = holdLock(thisObject->cellLock()); >- for (auto& entry : *map) >- visitor.append(entry.value); >- } > } > > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/EvalExecutable.h b/Source/JavaScriptCore/runtime/EvalExecutable.h >index 57b7a35f43201b9f127728ebc7bfe72d4d1ef46b..b9cb74d1a80c0ffcdf35647aaa9dad26bf5691d6 100644 >--- a/Source/JavaScriptCore/runtime/EvalExecutable.h >+++ b/Source/JavaScriptCore/runtime/EvalExecutable.h >@@ -69,8 +69,6 @@ public: > unsigned numTopLevelFunctionDecls() { return m_unlinkedEvalCodeBlock->numberOfFunctionDecls(); } > bool allowDirectEvalCache() const { return m_unlinkedEvalCodeBlock->allowDirectEvalCache(); } > >- TemplateObjectMap& ensureTemplateObjectMap(VM&); >- > protected: > friend class ExecutableBase; > friend class ScriptExecutable; >@@ -82,7 +80,6 @@ protected: > > WriteBarrier<ExecutableToCodeBlockEdge> m_evalCodeBlock; > WriteBarrier<UnlinkedEvalCodeBlock> m_unlinkedEvalCodeBlock; >- std::unique_ptr<TemplateObjectMap> m_templateObjectMap; > }; > > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/FunctionExecutable.cpp b/Source/JavaScriptCore/runtime/FunctionExecutable.cpp >index af3ab889a6b134b62a8a3e2f08d82973ab5c2dcc..2e85f4764713b22169ca7e0d271fe1ebd18ff6d1 100644 >--- a/Source/JavaScriptCore/runtime/FunctionExecutable.cpp >+++ b/Source/JavaScriptCore/runtime/FunctionExecutable.cpp >@@ -54,10 +54,9 @@ FunctionExecutable::FunctionExecutable(VM& vm, const SourceCode& source, Unlinke > m_singletonFunctionState = ClearWatchpoint; > } > >-void FunctionExecutable::finishCreation(VM& vm, ScriptExecutable* topLevelExecutable) >+void FunctionExecutable::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- m_topLevelExecutable.set(vm, this, topLevelExecutable ? topLevelExecutable : this); > if (VM::canUseJIT()) > m_singletonFunction.set(vm, this, InferredValue::create(vm)); > } >@@ -86,20 +85,12 @@ void FunctionExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) > FunctionExecutable* thisObject = jsCast<FunctionExecutable*>(cell); > ASSERT_GC_OBJECT_INHERITS(thisObject, info()); > Base::visitChildren(thisObject, visitor); >- visitor.append(thisObject->m_topLevelExecutable); > visitor.append(thisObject->m_codeBlockForCall); > visitor.append(thisObject->m_codeBlockForConstruct); > visitor.append(thisObject->m_unlinkedExecutable); > if (VM::canUseJIT()) > visitor.append(thisObject->m_singletonFunction); >- if (RareData* rareData = thisObject->m_rareData.get()) { >- visitor.append(rareData->m_cachedPolyProtoStructure); >- if (TemplateObjectMap* map = rareData->m_templateObjectMap.get()) { >- auto locker = holdLock(thisObject->cellLock()); >- for (auto& entry : *map) >- visitor.append(entry.value); >- } >- } >+ visitor.append(thisObject->m_cachedPolyProtoStructure); > } > > FunctionExecutable* FunctionExecutable::fromGlobalCode( >@@ -112,7 +103,7 @@ FunctionExecutable* FunctionExecutable::fromGlobalCode( > if (!unlinkedExecutable) > return nullptr; > >- return unlinkedExecutable->link(exec.vm(), nullptr, source, overrideLineNumber); >+ return unlinkedExecutable->link(exec.vm(), source, overrideLineNumber); > } > > FunctionExecutable::RareData& FunctionExecutable::ensureRareDataSlow() >@@ -124,7 +115,6 @@ FunctionExecutable::RareData& FunctionExecutable::ensureRareDataSlow() > rareData->m_parametersStartOffset = parametersStartOffset(); > rareData->m_typeProfilingStartOffset = typeProfilingStartOffset(); > rareData->m_typeProfilingEndOffset = typeProfilingEndOffset(); >- WTF::storeStoreFence(); > m_rareData = WTFMove(rareData); > return *m_rareData; > } >@@ -140,10 +130,4 @@ void FunctionExecutable::overrideInfo(const FunctionOverrideInfo& overrideInfo) > rareData.m_typeProfilingEndOffset = overrideInfo.typeProfilingEndOffset; > } > >-auto FunctionExecutable::ensureTemplateObjectMap(VM&) -> TemplateObjectMap& >-{ >- RareData& rareData = ensureRareData(); >- return ensureTemplateObjectMapImpl(rareData.m_templateObjectMap); >-} >- > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/FunctionExecutable.h b/Source/JavaScriptCore/runtime/FunctionExecutable.h >index 6fb5ccd119ab8f93c4bbaeca0cadc1ec8df8a700..7cfedbd2f49a7ff2966827cbe0a4419000357f08 100644 >--- a/Source/JavaScriptCore/runtime/FunctionExecutable.h >+++ b/Source/JavaScriptCore/runtime/FunctionExecutable.h >@@ -48,10 +48,10 @@ public: > return &vm.functionExecutableSpace.space; > } > >- static FunctionExecutable* create(VM& vm, ScriptExecutable* topLevelExecutable, const SourceCode& source, UnlinkedFunctionExecutable* unlinkedExecutable, Intrinsic intrinsic) >+ static FunctionExecutable* create(VM& vm, const SourceCode& source, UnlinkedFunctionExecutable* unlinkedExecutable, Intrinsic intrinsic) > { > FunctionExecutable* executable = new (NotNull, allocateCell<FunctionExecutable>(vm.heap)) FunctionExecutable(vm, source, unlinkedExecutable, intrinsic); >- executable->finishCreation(vm, topLevelExecutable); >+ executable->finishCreation(vm); > return executable; > } > static FunctionExecutable* fromGlobalCode( >@@ -282,16 +282,8 @@ public: > } > > // Cached poly proto structure for the result of constructing this executable. >- Structure* cachedPolyProtoStructure() >- { >- if (UNLIKELY(m_rareData)) >- return m_rareData->m_cachedPolyProtoStructure.get(); >- return nullptr; >- } >- void setCachedPolyProtoStructure(VM& vm, Structure* structure) >- { >- ensureRareData().m_cachedPolyProtoStructure.set(vm, this, structure); >- } >+ Structure* cachedPolyProtoStructure() { return m_cachedPolyProtoStructure.get(); } >+ void setCachedPolyProtoStructure(VM& vm, Structure* structure) { m_cachedPolyProtoStructure.set(vm, this, structure); } > > InlineWatchpointSet& ensurePolyProtoWatchpoint() > { >@@ -302,15 +294,11 @@ public: > > Box<InlineWatchpointSet> sharedPolyProtoWatchpoint() const { return m_polyProtoWatchpoint; } > >- ScriptExecutable* topLevelExecutable() const { return m_topLevelExecutable.get(); } >- >- TemplateObjectMap& ensureTemplateObjectMap(VM&); >- > private: > friend class ExecutableBase; > FunctionExecutable(VM&, const SourceCode&, UnlinkedFunctionExecutable*, Intrinsic); > >- void finishCreation(VM&, ScriptExecutable* topLevelExecutable); >+ void finishCreation(VM&); > > friend class ScriptExecutable; > >@@ -323,8 +311,6 @@ private: > unsigned m_parametersStartOffset { 0 }; > unsigned m_typeProfilingStartOffset { UINT_MAX }; > unsigned m_typeProfilingEndOffset { UINT_MAX }; >- std::unique_ptr<TemplateObjectMap> m_templateObjectMap; >- WriteBarrier<Structure> m_cachedPolyProtoStructure; > }; > > RareData& ensureRareData() >@@ -335,11 +321,7 @@ private: > } > RareData& ensureRareDataSlow(); > >- // FIXME: We can merge rareData pointer and top-level executable pointer. First time, setting parent. >- // If RareData is required, materialize RareData, swap it, and store top-level executable pointer inside RareData. >- // https://bugs.webkit.org/show_bug.cgi?id=197625 > std::unique_ptr<RareData> m_rareData; >- WriteBarrier<ScriptExecutable> m_topLevelExecutable; > WriteBarrier<UnlinkedFunctionExecutable> m_unlinkedExecutable; > WriteBarrier<ExecutableToCodeBlockEdge> m_codeBlockForCall; > WriteBarrier<ExecutableToCodeBlockEdge> m_codeBlockForConstruct; >@@ -347,6 +329,7 @@ private: > WriteBarrier<InferredValue> m_singletonFunction; > WatchpointState m_singletonFunctionState; > }; >+ WriteBarrier<Structure> m_cachedPolyProtoStructure; > Box<InlineWatchpointSet> m_polyProtoWatchpoint; > }; > >diff --git a/Source/JavaScriptCore/runtime/JSModuleRecord.cpp b/Source/JavaScriptCore/runtime/JSModuleRecord.cpp >index 50057597ef823c3da6a6a519790ad09dbf8385eb..c55d0d1984a244fd4abd34633faadb36f8f7181f 100644 >--- a/Source/JavaScriptCore/runtime/JSModuleRecord.cpp >+++ b/Source/JavaScriptCore/runtime/JSModuleRecord.cpp >@@ -200,7 +200,7 @@ void JSModuleRecord::instantiateDeclarations(ExecState* exec, ModuleProgramExecu > unlinkedFunctionExecutable->typeProfilingStartOffset(), > unlinkedFunctionExecutable->typeProfilingEndOffset()); > } >- JSFunction* function = JSFunction::create(vm, unlinkedFunctionExecutable->link(vm, moduleProgramExecutable, moduleProgramExecutable->source()), moduleEnvironment); >+ JSFunction* function = JSFunction::create(vm, unlinkedFunctionExecutable->link(vm, moduleProgramExecutable->source()), moduleEnvironment); > bool putResult = false; > symbolTablePutTouchWatchpointSet(moduleEnvironment, exec, unlinkedFunctionExecutable->name(), function, /* shouldThrowReadOnlyError */ false, /* ignoreReadOnlyErrors */ true, putResult); > RETURN_IF_EXCEPTION(scope, void()); >diff --git a/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.cpp b/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.cpp >index ed165cd0d80688c4e99edd36405459b47093d426..2a4a407fd93191088591e789297fa0b0422c6940 100644 >--- a/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.cpp >+++ b/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.cpp >@@ -36,16 +36,15 @@ namespace JSC { > const ClassInfo JSTemplateObjectDescriptor::s_info = { "TemplateObjectDescriptor", nullptr, nullptr, nullptr, CREATE_METHOD_TABLE(JSTemplateObjectDescriptor) }; > > >-JSTemplateObjectDescriptor::JSTemplateObjectDescriptor(VM& vm, Ref<TemplateObjectDescriptor>&& descriptor, int startOffset) >+JSTemplateObjectDescriptor::JSTemplateObjectDescriptor(VM& vm, Ref<TemplateObjectDescriptor>&& descriptor) > : Base(vm, vm.templateObjectDescriptorStructure.get()) > , m_descriptor(WTFMove(descriptor)) >- , m_startOffset(startOffset) > { > } > >-JSTemplateObjectDescriptor* JSTemplateObjectDescriptor::create(VM& vm, Ref<TemplateObjectDescriptor>&& descriptor, int startOffset) >+JSTemplateObjectDescriptor* JSTemplateObjectDescriptor::create(VM& vm, Ref<TemplateObjectDescriptor>&& descriptor) > { >- JSTemplateObjectDescriptor* result = new (NotNull, allocateCell<JSTemplateObjectDescriptor>(vm.heap)) JSTemplateObjectDescriptor(vm, WTFMove(descriptor), startOffset); >+ JSTemplateObjectDescriptor* result = new (NotNull, allocateCell<JSTemplateObjectDescriptor>(vm.heap)) JSTemplateObjectDescriptor(vm, WTFMove(descriptor)); > result->finishCreation(vm); > return result; > } >diff --git a/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.h b/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.h >index 0005be6be238fcc09907aed6366911ed18ab2c96..75208bc162282b08aa2d93683535f503e718730c 100644 >--- a/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.h >+++ b/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.h >@@ -38,7 +38,7 @@ public: > static const bool needsDestruction = true; > DECLARE_INFO; > >- static JSTemplateObjectDescriptor* create(VM&, Ref<TemplateObjectDescriptor>&&, int); >+ static JSTemplateObjectDescriptor* create(VM&, Ref<TemplateObjectDescriptor>&&); > > static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) > { >@@ -49,16 +49,13 @@ public: > > JSArray* createTemplateObject(ExecState*); > >- int startOffset() const { return m_startOffset; } >- > protected: > static void destroy(JSCell*); > > private: >- JSTemplateObjectDescriptor(VM&, Ref<TemplateObjectDescriptor>&&, int); >+ JSTemplateObjectDescriptor(VM&, Ref<TemplateObjectDescriptor>&&); > > Ref<TemplateObjectDescriptor> m_descriptor; >- int m_startOffset { 0 }; > }; > > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp >index 4af8c24be4fe79c6b63c41e039245563b992c34d..4373b6478c42bbd20f0ebd12ee6c3584586e8d93 100644 >--- a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp >+++ b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp >@@ -85,11 +85,6 @@ void ModuleProgramExecutable::destroy(JSCell* cell) > static_cast<ModuleProgramExecutable*>(cell)->ModuleProgramExecutable::~ModuleProgramExecutable(); > } > >-auto ModuleProgramExecutable::ensureTemplateObjectMap(VM&) -> TemplateObjectMap& >-{ >- return ensureTemplateObjectMapImpl(m_templateObjectMap); >-} >- > void ModuleProgramExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) > { > ModuleProgramExecutable* thisObject = jsCast<ModuleProgramExecutable*>(cell); >@@ -98,11 +93,6 @@ void ModuleProgramExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) > visitor.append(thisObject->m_unlinkedModuleProgramCodeBlock); > visitor.append(thisObject->m_moduleEnvironmentSymbolTable); > visitor.append(thisObject->m_moduleProgramCodeBlock); >- if (TemplateObjectMap* map = thisObject->m_templateObjectMap.get()) { >- auto locker = holdLock(thisObject->cellLock()); >- for (auto& entry : *map) >- visitor.append(entry.value); >- } > } > > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.h b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.h >index f9b7e2adbfe85295a2e489d52f491305bfdd3227..6d355b7bd6b9f98ef7d6c9092b32251bf079be6d 100644 >--- a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.h >+++ b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.h >@@ -69,8 +69,6 @@ public: > > SymbolTable* moduleEnvironmentSymbolTable() { return m_moduleEnvironmentSymbolTable.get(); } > >- TemplateObjectMap& ensureTemplateObjectMap(VM&); >- > private: > friend class ExecutableBase; > friend class ScriptExecutable; >@@ -82,7 +80,6 @@ private: > WriteBarrier<UnlinkedModuleProgramCodeBlock> m_unlinkedModuleProgramCodeBlock; > WriteBarrier<SymbolTable> m_moduleEnvironmentSymbolTable; > WriteBarrier<ExecutableToCodeBlockEdge> m_moduleProgramCodeBlock; >- std::unique_ptr<TemplateObjectMap> m_templateObjectMap; > }; > > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/ProgramExecutable.cpp b/Source/JavaScriptCore/runtime/ProgramExecutable.cpp >index 234db8e267792527735b127b607ebd18a8e9790f..91054164caa86175bcac2a308869c3f8892ebff5 100644 >--- a/Source/JavaScriptCore/runtime/ProgramExecutable.cpp >+++ b/Source/JavaScriptCore/runtime/ProgramExecutable.cpp >@@ -216,11 +216,6 @@ JSObject* ProgramExecutable::initializeGlobalProperties(VM& vm, CallFrame* callF > return nullptr; > } > >-auto ProgramExecutable::ensureTemplateObjectMap(VM&) -> TemplateObjectMap& >-{ >- return ensureTemplateObjectMapImpl(m_templateObjectMap); >-} >- > void ProgramExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) > { > ProgramExecutable* thisObject = jsCast<ProgramExecutable*>(cell); >@@ -228,11 +223,6 @@ void ProgramExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) > Base::visitChildren(thisObject, visitor); > visitor.append(thisObject->m_unlinkedProgramCodeBlock); > visitor.append(thisObject->m_programCodeBlock); >- if (TemplateObjectMap* map = thisObject->m_templateObjectMap.get()) { >- auto locker = holdLock(thisObject->cellLock()); >- for (auto& entry : *map) >- visitor.append(entry.value); >- } > } > > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/ProgramExecutable.h b/Source/JavaScriptCore/runtime/ProgramExecutable.h >index b96844456a372522c254ff87850a7d05d75d8c8f..60511679bf2c93768a8acf664b285bdc607bed4e 100644 >--- a/Source/JavaScriptCore/runtime/ProgramExecutable.h >+++ b/Source/JavaScriptCore/runtime/ProgramExecutable.h >@@ -73,8 +73,6 @@ public: > > ExecutableInfo executableInfo() const { return ExecutableInfo(usesEval(), isStrictMode(), false, false, ConstructorKind::None, JSParserScriptMode::Classic, SuperBinding::NotNeeded, SourceParseMode::ProgramMode, derivedContextType(), isArrowFunctionContext(), false, EvalContextType::None); } > >- TemplateObjectMap& ensureTemplateObjectMap(VM&); >- > private: > friend class ExecutableBase; > friend class ScriptExecutable; >@@ -85,7 +83,6 @@ private: > > WriteBarrier<UnlinkedProgramCodeBlock> m_unlinkedProgramCodeBlock; > WriteBarrier<ExecutableToCodeBlockEdge> m_programCodeBlock; >- std::unique_ptr<TemplateObjectMap> m_templateObjectMap; > }; > > } // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/ScriptExecutable.cpp b/Source/JavaScriptCore/runtime/ScriptExecutable.cpp >index 752c0aad9afd83784bffeaeffa381e3deed55799..56a5d4876c90831d299b8de13e61d195f85316e5 100644 >--- a/Source/JavaScriptCore/runtime/ScriptExecutable.cpp >+++ b/Source/JavaScriptCore/runtime/ScriptExecutable.cpp >@@ -34,7 +34,6 @@ > #include "IsoCellSetInlines.h" > #include "JIT.h" > #include "JSCInlines.h" >-#include "JSTemplateObjectDescriptor.h" > #include "LLIntEntrypoint.h" > #include "ModuleProgramCodeBlock.h" > #include "Parser.h" >@@ -436,61 +435,6 @@ Exception* ScriptExecutable::prepareForExecutionImpl( > return nullptr; > } > >-ScriptExecutable* ScriptExecutable::topLevelExecutable() >-{ >- switch (type()) { >- case FunctionExecutableType: >- return jsCast<FunctionExecutable*>(this)->topLevelExecutable(); >- default: >- return this; >- } >-} >- >-JSArray* ScriptExecutable::createTemplateObject(ExecState* exec, JSTemplateObjectDescriptor* descriptor) >-{ >- VM& vm = exec->vm(); >- auto scope = DECLARE_THROW_SCOPE(vm); >- >- TemplateObjectMap& templateObjectMap = ensureTemplateObjectMap(vm); >- TemplateObjectMap::AddResult result; >- { >- auto locker = holdLock(cellLock()); >- result = templateObjectMap.add(descriptor->startOffset(), WriteBarrier<JSArray>()); >- } >- if (JSArray* array = result.iterator->value.get()) >- return array; >- JSArray* templateObject = descriptor->createTemplateObject(exec); >- RETURN_IF_EXCEPTION(scope, nullptr); >- result.iterator->value.set(vm, this, templateObject); >- return templateObject; >-} >- >-auto ScriptExecutable::ensureTemplateObjectMapImpl(std::unique_ptr<TemplateObjectMap>& dest) -> TemplateObjectMap& >-{ >- if (dest) >- return *dest; >- auto result = std::make_unique<TemplateObjectMap>(); >- WTF::storeStoreFence(); >- dest = WTFMove(result); >- return *dest; >-} >- >-auto ScriptExecutable::ensureTemplateObjectMap(VM& vm) -> TemplateObjectMap& >-{ >- switch (type()) { >- case FunctionExecutableType: >- return static_cast<FunctionExecutable*>(this)->ensureTemplateObjectMap(vm); >- case EvalExecutableType: >- return static_cast<EvalExecutable*>(this)->ensureTemplateObjectMap(vm); >- case ProgramExecutableType: >- return static_cast<ProgramExecutable*>(this)->ensureTemplateObjectMap(vm); >- case ModuleProgramExecutableType: >- default: >- ASSERT(type() == ModuleProgramExecutableType); >- return static_cast<ModuleProgramExecutable*>(this)->ensureTemplateObjectMap(vm); >- } >-} >- > CodeBlockHash ScriptExecutable::hashFor(CodeSpecializationKind kind) const > { > return CodeBlockHash(source(), kind); >diff --git a/Source/JavaScriptCore/runtime/ScriptExecutable.h b/Source/JavaScriptCore/runtime/ScriptExecutable.h >index cc5eb9d1d3b8af7e2957b9c0eaf68f228d4a18a6..6c3eecc850237cc7f67ee30b47909efc8b9dd2ac 100644 >--- a/Source/JavaScriptCore/runtime/ScriptExecutable.h >+++ b/Source/JavaScriptCore/runtime/ScriptExecutable.h >@@ -29,8 +29,6 @@ > > namespace JSC { > >-class JSArray; >-class JSTemplateObjectDescriptor; > class IsoCellSet; > > class ScriptExecutable : public ExecutableBase { >@@ -39,8 +37,6 @@ public: > static const unsigned StructureFlags = Base::StructureFlags; > > static void destroy(JSCell*); >- >- using TemplateObjectMap = HashMap<uint64_t, WriteBarrier<JSArray>, WTF::IntHash<uint64_t>, WTF::UnsignedWithZeroKeyHashTraits<uint64_t>>; > > CodeBlockHash hashFor(CodeSpecializationKind) const; > >@@ -116,17 +112,12 @@ public: > template <typename ExecutableType> > Exception* prepareForExecution(VM&, JSFunction*, JSScope*, CodeSpecializationKind, CodeBlock*& resultCodeBlock); > >- ScriptExecutable* topLevelExecutable(); >- JSArray* createTemplateObject(ExecState*, JSTemplateObjectDescriptor*); >- > private: > friend class ExecutableBase; > Exception* prepareForExecutionImpl(VM&, JSFunction*, JSScope*, CodeSpecializationKind, CodeBlock*&); > > bool hasClearableCode(VM&) const; > >- TemplateObjectMap& ensureTemplateObjectMap(VM&); >- > protected: > ScriptExecutable(Structure*, VM&, const SourceCode&, bool isInStrictContext, DerivedContextType, bool isInArrowFunctionContext, EvalContextType, Intrinsic); > >@@ -146,8 +137,6 @@ protected: > m_hasCapturedVariables = hasCapturedVariables; > } > >- static TemplateObjectMap& ensureTemplateObjectMapImpl(std::unique_ptr<TemplateObjectMap>& dest); >- > SourceCode m_source; > Intrinsic m_intrinsic { NoIntrinsic }; > bool m_didTryToEnterInLoop { false }; >diff --git a/Source/JavaScriptCore/tools/JSDollarVM.cpp b/Source/JavaScriptCore/tools/JSDollarVM.cpp >index 1458d04be4ad5b7163094b0c407f0837d03de5d8..d624a70316cb9a2f8163f73f773e227533b11a31 100644 >--- a/Source/JavaScriptCore/tools/JSDollarVM.cpp >+++ b/Source/JavaScriptCore/tools/JSDollarVM.cpp >@@ -1846,7 +1846,7 @@ static EncodedJSValue JSC_HOST_CALL functionCreateBuiltin(ExecState* exec) > RETURN_IF_EXCEPTION(scope, encodedJSValue()); > > const SourceCode& source = makeSource(functionText, { }); >- JSFunction* func = JSFunction::create(vm, createBuiltinExecutable(vm, source, Identifier::fromString(&vm, "foo"), ConstructorKind::None, ConstructAbility::CannotConstruct)->link(vm, nullptr, source), exec->lexicalGlobalObject()); >+ JSFunction* func = JSFunction::create(vm, createBuiltinExecutable(vm, source, Identifier::fromString(&vm, "foo"), ConstructorKind::None, ConstructAbility::CannotConstruct)->link(vm, source), exec->lexicalGlobalObject()); > > return JSValue::encode(func); > } >@@ -2087,15 +2087,6 @@ static EncodedJSValue JSC_HOST_CALL functionDisableDebuggerModeWhenIdle(ExecStat > return changeDebuggerModeWhenIdle(exec, { }); > } > >-static EncodedJSValue JSC_HOST_CALL functionDeleteAllCodeWhenIdle(ExecState* exec) >-{ >- VM* vm = &exec->vm(); >- vm->whenIdle([=] () { >- vm->deleteAllCode(PreventCollectionAndDeleteAllCode); >- }); >- return JSValue::encode(jsUndefined()); >-} >- > static EncodedJSValue JSC_HOST_CALL functionGlobalObjectCount(ExecState* exec) > { > return JSValue::encode(jsNumber(exec->vm().heap.globalObjectCount())); >@@ -2285,8 +2276,6 @@ void JSDollarVM::finishCreation(VM& vm) > addFunction(vm, "enableDebuggerModeWhenIdle", functionEnableDebuggerModeWhenIdle, 0); > addFunction(vm, "disableDebuggerModeWhenIdle", functionDisableDebuggerModeWhenIdle, 0); > >- addFunction(vm, "deleteAllCodeWhenIdle", functionDeleteAllCodeWhenIdle, 0); >- > addFunction(vm, "globalObjectCount", functionGlobalObjectCount, 0); > addFunction(vm, "globalObjectForObject", functionGlobalObjectForObject, 1); > >diff --git a/JSTests/ChangeLog b/JSTests/ChangeLog >index 73057b8a58601b4d1038f8b1f5e885471283fa8e..487cae10d9014054251c81d6f1e7f857cf55dff5 100644 >--- a/JSTests/ChangeLog >+++ b/JSTests/ChangeLog >@@ -1,3 +1,18 @@ >+2019-05-07 Commit Queue <commit-queue@webkit.org> >+ >+ Unreviewed, rolling out r244978. >+ https://bugs.webkit.org/show_bug.cgi?id=197671 >+ >+ TemplateObject map should use start/end offsets (Requested by >+ yusukesuzuki on #webkit). >+ >+ Reverted changeset: >+ >+ "TemplateObject passed to template literal tags are not always >+ identical for the same source location." >+ https://bugs.webkit.org/show_bug.cgi?id=190756 >+ https://trac.webkit.org/changeset/244978 >+ > 2019-05-07 Tadeu Zagallo <tzagallo@apple.com> > > tryCachePutByID should not crash if target offset changes >diff --git a/JSTests/complex.yaml b/JSTests/complex.yaml >index 10613507a2ef781be44fcb6adc0d989aab9aa703..ce038f4d6242cde75752e5ac22390fa0198831d2 100644 >--- a/JSTests/complex.yaml >+++ b/JSTests/complex.yaml >@@ -25,6 +25,3 @@ > > - path: complex/generator-regeneration.js > cmd: runComplexTest [], ["generator-regeneration-after.js"], "--useDollarVM=1" >- >-- path: complex/tagged-template-regeneration.js >- cmd: runComplexTest [], ["tagged-template-regeneration-after.js"], "--useDollarVM=1" >diff --git a/JSTests/complex/tagged-template-regeneration-after.js b/JSTests/complex/tagged-template-regeneration-after.js >deleted file mode 100644 >index 6fc7f02fd65184cc265405fbab58bd106efae485..0000000000000000000000000000000000000000 >--- a/JSTests/complex/tagged-template-regeneration-after.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-function shouldBe(actual, expected) { >- if (actual !== expected) >- throw new Error('bad value: ' + actual); >-} >- >-var second = test(); >-shouldBe(first, second); >diff --git a/JSTests/complex/tagged-template-regeneration.js b/JSTests/complex/tagged-template-regeneration.js >deleted file mode 100644 >index ec52ab631fb7f9d95c06d6c9ae6a32b082833f02..0000000000000000000000000000000000000000 >--- a/JSTests/complex/tagged-template-regeneration.js >+++ /dev/null >@@ -1,13 +0,0 @@ >-function call(site) >-{ >- return site; >-} >- >-function test() >-{ >- return call`Cocoa`; >-} >- >-var first = test(); >-$vm.deleteAllCodeWhenIdle(); >-fullGC(); >diff --git a/JSTests/modules/tagged-template-inside-module.js b/JSTests/modules/tagged-template-inside-module.js >deleted file mode 100644 >index aa747fc2613cd85b5bd11e3f8998c66a78649cd1..0000000000000000000000000000000000000000 >--- a/JSTests/modules/tagged-template-inside-module.js >+++ /dev/null >@@ -1,11 +0,0 @@ >-import { shouldThrow, shouldBe } from "./resources/assert.js"; >-import { otherTaggedTemplates } from "./tagged-template-inside-module/other-tagged-templates.js" >- >-function call(site) { >- return site; >-} >- >-var template = otherTaggedTemplates(); >-shouldBe(call`Cocoa` !== template, true); >-shouldBe(template, otherTaggedTemplates()); >-shouldBe(template, new otherTaggedTemplates()); >diff --git a/JSTests/modules/tagged-template-inside-module/other-tagged-templates.js b/JSTests/modules/tagged-template-inside-module/other-tagged-templates.js >deleted file mode 100644 >index 5d167a3087e7501e7231bc23241f1de4b509d57e..0000000000000000000000000000000000000000 >--- a/JSTests/modules/tagged-template-inside-module/other-tagged-templates.js >+++ /dev/null >@@ -1,9 +0,0 @@ >-function call(site) >-{ >- return site; >-} >- >-export function otherTaggedTemplates() >-{ >- return call`Cocoa`; >-} >diff --git a/JSTests/stress/call-and-construct-should-return-same-tagged-templates.js b/JSTests/stress/call-and-construct-should-return-same-tagged-templates.js >deleted file mode 100644 >index 8338ce5d8e28eb9d5824763985749a93020b37c0..0000000000000000000000000000000000000000 >--- a/JSTests/stress/call-and-construct-should-return-same-tagged-templates.js >+++ /dev/null >@@ -1,20 +0,0 @@ >-function shouldBe(actual, expected) >-{ >- if (actual !== expected) >- throw new Error('bad value: ' + actual); >-} >- >-function call(site) >-{ >- return site; >-} >- >-function poly() >-{ >- return call`Cocoa`; >-} >- >-var first = poly(); >-var second = new poly(); >- >-shouldBe(first, second); >diff --git a/JSTests/stress/tagged-templates-in-direct-eval-should-not-produce-same-site-object.js b/JSTests/stress/tagged-templates-in-direct-eval-should-not-produce-same-site-object.js >deleted file mode 100644 >index fa4876043d9a4a0751c15c8d666d3a7ec8ecfeb0..0000000000000000000000000000000000000000 >--- a/JSTests/stress/tagged-templates-in-direct-eval-should-not-produce-same-site-object.js >+++ /dev/null >@@ -1,14 +0,0 @@ >-function shouldBe(actual, expected) { >- if (actual !== expected) >- throw new Error('bad value: ' + actual); >-} >- >-function call(site) >-{ >- return site; >-} >- >-var expr = "call`Cocoa`"; >-var first = eval(expr); >-var second = eval(expr); >-shouldBe(first !== second, true); >diff --git a/JSTests/stress/tagged-templates-in-function-in-direct-eval.js b/JSTests/stress/tagged-templates-in-function-in-direct-eval.js >deleted file mode 100644 >index eed24f66d6d47155b4ed98ba502c16dfeb5f22db..0000000000000000000000000000000000000000 >--- a/JSTests/stress/tagged-templates-in-function-in-direct-eval.js >+++ /dev/null >@@ -1,19 +0,0 @@ >-function shouldBe(actual, expected) >-{ >- if (actual !== expected) >- throw new Error('bad value: ' + actual); >-} >- >-function call(site) >-{ >- return site; >-} >- >-function test() >-{ >- return eval("(function ok() { return call`Cocoa`; })()"); >-} >- >-var first = test(); >-var second = test(); >-shouldBe(first !== second, true); >diff --git a/JSTests/stress/tagged-templates-in-global-function-should-not-produce-same-site-object.js b/JSTests/stress/tagged-templates-in-global-function-should-not-produce-same-site-object.js >deleted file mode 100644 >index 53e76ed1f30b52fd9ac0bd2f30e9d7ef010c6368..0000000000000000000000000000000000000000 >--- a/JSTests/stress/tagged-templates-in-global-function-should-not-produce-same-site-object.js >+++ /dev/null >@@ -1,21 +0,0 @@ >-function shouldBe(actual, expected) { >- if (actual !== expected) >- throw new Error('bad value: ' + actual); >-} >- >-function call(site) >-{ >- return site; >-} >- >-var expr = "return call`Cocoa`"; >-var firstFunction = Function(expr); >-var secondFunction = Function(expr); >-var first = firstFunction(); >-var second = secondFunction(); >-shouldBe(first !== second, true); >- >-shouldBe(first, firstFunction()); >-shouldBe(first, new firstFunction()); >-shouldBe(second, secondFunction()); >-shouldBe(second, new secondFunction()); >diff --git a/JSTests/stress/tagged-templates-in-indirect-eval-should-not-produce-same-site-object.js b/JSTests/stress/tagged-templates-in-indirect-eval-should-not-produce-same-site-object.js >deleted file mode 100644 >index aeacb1b5efaea4ef70e9a95f4dfc942757cc9c40..0000000000000000000000000000000000000000 >--- a/JSTests/stress/tagged-templates-in-indirect-eval-should-not-produce-same-site-object.js >+++ /dev/null >@@ -1,15 +0,0 @@ >-function shouldBe(actual, expected) { >- if (actual !== expected) >- throw new Error('bad value: ' + actual); >-} >- >-var indirectEval = eval; >-function call(site) >-{ >- return site; >-} >- >-var expr = "call`Cocoa`"; >-var first = indirectEval(expr); >-var second = indirectEval(expr); >-shouldBe(first !== second, true); >diff --git a/JSTests/stress/tagged-templates-in-multiple-functions.js b/JSTests/stress/tagged-templates-in-multiple-functions.js >deleted file mode 100644 >index 3828f53b1b2f661674b49e1c32c1a59d2b9c0436..0000000000000000000000000000000000000000 >--- a/JSTests/stress/tagged-templates-in-multiple-functions.js >+++ /dev/null >@@ -1,33 +0,0 @@ >-function shouldBe(actual, expected) >-{ >- if (actual !== expected) >- throw new Error('bad value: ' + actual); >-} >- >-function call(site) >-{ >- return site; >-} >- >-function a() >-{ >- return call`Cocoa`; >-} >- >-function b() >-{ >- return call`Cocoa`; >-} >- >-function c() >-{ >- return [ call`Cocoa`, call`Cocoa` ]; >-} >- >-shouldBe(a() !== b(), true); >-shouldBe(a() === a(), true); >-shouldBe(b() === b(), true); >-var result = c(); >-shouldBe(c()[0] === result[0], true); >-shouldBe(c()[1] === result[1], true); >-shouldBe(result[0] !== result[1], true);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197671
: 369313