Diff
Modified: trunk/Source/_javascript_Core/CMakeLists.txt (232079 => 232080)
--- trunk/Source/_javascript_Core/CMakeLists.txt 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/CMakeLists.txt 2018-05-22 21:33:26 UTC (rev 232080)
@@ -557,7 +557,6 @@
heap/SubspaceInlines.h
heap/Synchronousness.h
heap/TinyBloomFilter.h
- heap/UnconditionalFinalizer.h
heap/VisitRaceKey.h
heap/Weak.h
heap/WeakBlock.h
Modified: trunk/Source/_javascript_Core/ChangeLog (232079 => 232080)
--- trunk/Source/_javascript_Core/ChangeLog 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/ChangeLog 2018-05-22 21:33:26 UTC (rev 232080)
@@ -1,5 +1,51 @@
2018-05-22 Keith Miller <[email protected]>
+ Remove the UnconditionalFinalizer class
+ https://bugs.webkit.org/show_bug.cgi?id=185881
+
+ Reviewed by Filip Pizlo.
+
+ The only remaining user of this API is
+ JSWebAssemblyCodeBlock. This patch changes, JSWebAssemblyCodeBlock
+ to use the newer template based API and removes the old class.
+
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.h:
+ * heap/Heap.cpp:
+ (JSC::Heap::finalizeUnconditionalFinalizers):
+ * heap/Heap.h:
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::addUnconditionalFinalizer): Deleted.
+ * heap/SlotVisitor.h:
+ * heap/UnconditionalFinalizer.h: Removed.
+ * wasm/js/JSWebAssemblyCodeBlock.cpp:
+ (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
+ (JSC::JSWebAssemblyCodeBlock::visitChildren):
+ (JSC::JSWebAssemblyCodeBlock::finalizeUnconditionally):
+ (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
+ * wasm/js/JSWebAssemblyCodeBlock.h:
+ * wasm/js/JSWebAssemblyModule.h:
+
+ * CMakeLists.txt:
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.h:
+ * heap/Heap.cpp:
+ (JSC::Heap::finalizeUnconditionalFinalizers):
+ * heap/Heap.h:
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::addUnconditionalFinalizer): Deleted.
+ * heap/SlotVisitor.h:
+ * heap/UnconditionalFinalizer.h: Removed.
+ * wasm/js/JSWebAssemblyCodeBlock.cpp:
+ (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
+ (JSC::JSWebAssemblyCodeBlock::visitChildren):
+ (JSC::JSWebAssemblyCodeBlock::finalizeUnconditionally):
+ (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
+ * wasm/js/JSWebAssemblyCodeBlock.h:
+ * wasm/js/JSWebAssemblyModule.h:
+
+2018-05-22 Keith Miller <[email protected]>
+
Unreviewed, fix internal build.
* runtime/JSImmutableButterfly.cpp:
Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (232079 => 232080)
--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2018-05-22 21:33:26 UTC (rev 232080)
@@ -348,7 +348,6 @@
0F5E0FD8207C72730097F0DE /* DFGAbstractInterpreterClobberState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5E0FD6207C72710097F0DE /* DFGAbstractInterpreterClobberState.h */; };
0F5E0FE72086AD480097F0DE /* IsoSubspacePerVM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5E0FE52086AD460097F0DE /* IsoSubspacePerVM.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F5EF91F16878F7D003E5C25 /* JITThunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5EF91C16878F78003E5C25 /* JITThunks.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 0F5F08CF146C7633000472A9 /* UnconditionalFinalizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5F08CE146C762F000472A9 /* UnconditionalFinalizer.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F60FE901FFC37020003320A /* ExecutableToCodeBlockEdge.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F60FE8E1FFC36FD0003320A /* ExecutableToCodeBlockEdge.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F61832A1C45BF070072450B /* AirCCallingConvention.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6183211C45BF070072450B /* AirCCallingConvention.h */; };
0F61832D1C45BF070072450B /* AirEmitShuffle.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6183241C45BF070072450B /* AirEmitShuffle.h */; };
@@ -2365,7 +2364,6 @@
0F5E0FE62086AD470097F0DE /* IsoSubspacePerVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IsoSubspacePerVM.cpp; sourceTree = "<group>"; };
0F5EF91B16878F78003E5C25 /* JITThunks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITThunks.cpp; sourceTree = "<group>"; };
0F5EF91C16878F78003E5C25 /* JITThunks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITThunks.h; sourceTree = "<group>"; };
- 0F5F08CE146C762F000472A9 /* UnconditionalFinalizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnconditionalFinalizer.h; sourceTree = "<group>"; };
0F60FE8D1FFC36FC0003320A /* ExecutableToCodeBlockEdge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutableToCodeBlockEdge.cpp; sourceTree = "<group>"; };
0F60FE8E1FFC36FD0003320A /* ExecutableToCodeBlockEdge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExecutableToCodeBlockEdge.h; sourceTree = "<group>"; };
0F6183201C45BF070072450B /* AirCCallingConvention.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AirCCallingConvention.cpp; path = b3/air/AirCCallingConvention.cpp; sourceTree = "<group>"; };
@@ -5773,7 +5771,6 @@
0F1FB38A1E173A6200A9BE50 /* SynchronousStopTheWorldMutatorScheduler.cpp */,
0F1FB38B1E173A6200A9BE50 /* SynchronousStopTheWorldMutatorScheduler.h */,
141448CC13A1783700F5BA1A /* TinyBloomFilter.h */,
- 0F5F08CE146C762F000472A9 /* UnconditionalFinalizer.h */,
0F4D8C721FC7A973001D32AC /* VisitCounter.h */,
0F952A9F1DF7860700E06FBD /* VisitRaceKey.cpp */,
0F952AA01DF7860700E06FBD /* VisitRaceKey.h */,
@@ -8861,6 +8858,7 @@
FE1BD0251E72053800134BC9 /* HeapVerifier.h in Headers */,
0F4680D514BBD24B00BFE272 /* HostCallReturnValue.h in Headers */,
DC2143071CA32E55000A8869 /* ICStats.h in Headers */,
+ 0FB399BE20AF6B3D0017E213 /* ICStatusUtils.h in Headers */,
BC18C40F0E16F5CD00B34460 /* Identifier.h in Headers */,
8606DDEA18DA44AB00A383D0 /* IdentifierInlines.h in Headers */,
A5FD0076189B038C00633231 /* IdentifiersFactory.h in Headers */,
@@ -8908,6 +8906,8 @@
A50E4B6218809DD50068A46D /* InspectorRuntimeAgent.h in Headers */,
A55165D31BDF0B9E003B75C1 /* InspectorScriptProfilerAgent.h in Headers */,
0F49E9AA20AB4D00001CA0AA /* InstanceOfAccessCase.h in Headers */,
+ 0FB399BF20AF6B3F0017E213 /* InstanceOfStatus.h in Headers */,
+ 0FB399C020AF6B430017E213 /* InstanceOfVariant.h in Headers */,
969A07990ED1D3AE00F1F681 /* Instruction.h in Headers */,
A7A8AF3B17ADB5F3005AB174 /* Int16Array.h in Headers */,
A7A8AF3C17ADB5F3005AB174 /* Int32Array.h in Headers */,
@@ -9066,7 +9066,6 @@
A503FA1E188E0FB000110F14 /* JSJavaScriptCallFramePrototype.h in Headers */,
7013CA8C1B491A9400CAE613 /* JSJob.h in Headers */,
BC18C4160E16F5CD00B34460 /* JSLexicalEnvironment.h in Headers */,
- 0FB399C020AF6B430017E213 /* InstanceOfVariant.h in Headers */,
BC18C4230E16F5CD00B34460 /* JSLock.h in Headers */,
C25D709C16DE99F400FCA6BC /* JSManagedValue.h in Headers */,
2A4BB7F318A41179008A0FCD /* JSManagedValueInternal.h in Headers */,
@@ -9191,7 +9190,6 @@
0F4680CD14BBB17D00BFE272 /* LowLevelInterpreter.h in Headers */,
981ED82328234D91BAECCADE /* MachineContext.h in Headers */,
14B723B812D7DA6F003BD5ED /* MachineStackMarker.h in Headers */,
- 0FB399BF20AF6B3F0017E213 /* InstanceOfStatus.h in Headers */,
86C36EEA0EE1289D00B3DF59 /* MacroAssembler.h in Headers */,
86D3B2C610156BDE002865E7 /* MacroAssemblerARM.h in Headers */,
A1A009C01831A22D00CF8711 /* MacroAssemblerARM64.h in Headers */,
@@ -9448,7 +9446,6 @@
705B41AE1A6E501E00716757 /* SymbolConstructor.h in Headers */,
996B73271BDA08EF00331B84 /* SymbolConstructor.lut.h in Headers */,
705B41B01A6E501E00716757 /* SymbolObject.h in Headers */,
- 0FB399BE20AF6B3D0017E213 /* ICStatusUtils.h in Headers */,
705B41B21A6E501E00716757 /* SymbolPrototype.h in Headers */,
996B73281BDA08EF00331B84 /* SymbolPrototype.lut.h in Headers */,
BC18C46B0E16F5CD00B34460 /* SymbolTable.h in Headers */,
@@ -9489,7 +9486,6 @@
A7A8AF4217ADB5F3005AB174 /* Uint32Array.h in Headers */,
A7A8AF3F17ADB5F3005AB174 /* Uint8Array.h in Headers */,
A7A8AF4017ADB5F3005AB174 /* Uint8ClampedArray.h in Headers */,
- 0F5F08CF146C7633000472A9 /* UnconditionalFinalizer.h in Headers */,
A7B601821639FD2A00372BA3 /* UnlinkedCodeBlock.h in Headers */,
14AD91241DCA9FA40014F9FE /* UnlinkedEvalCodeBlock.h in Headers */,
14AD91231DCA9FA40014F9FE /* UnlinkedFunctionCodeBlock.h in Headers */,
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (232079 => 232080)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2018-05-22 21:33:26 UTC (rev 232080)
@@ -63,7 +63,6 @@
#include "ProfilerJettisonReason.h"
#include "ProgramExecutable.h"
#include "PutPropertySlot.h"
-#include "UnconditionalFinalizer.h"
#include "ValueProfile.h"
#include "VirtualRegister.h"
#include "Watchpoint.h"
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (232079 => 232080)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2018-05-22 21:33:26 UTC (rev 232080)
@@ -591,11 +591,10 @@
finalizeMarkedUnconditionalFinalizers<ExecutableToCodeBlockEdge>(vm()->executableToCodeBlockEdgesWithFinalizers);
finalizeMarkedUnconditionalFinalizers<JSWeakSet>(vm()->weakSetSpace);
finalizeMarkedUnconditionalFinalizers<JSWeakMap>(vm()->weakMapSpace);
-
- while (m_unconditionalFinalizers.hasNext()) {
- UnconditionalFinalizer* finalizer = m_unconditionalFinalizers.removeNext();
- finalizer->finalizeUnconditionally();
- }
+
+#if ENABLE(WEBASSEMBLY)
+ finalizeMarkedUnconditionalFinalizers<JSWebAssemblyCodeBlock>(vm()->webAssemblyCodeBlockSpace);
+#endif
}
void Heap::willStartIterating()
Modified: trunk/Source/_javascript_Core/heap/Heap.h (232079 => 232080)
--- trunk/Source/_javascript_Core/heap/Heap.h 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/heap/Heap.h 2018-05-22 21:33:26 UTC (rev 232080)
@@ -39,7 +39,6 @@
#include "Options.h"
#include "StructureIDTable.h"
#include "Synchronousness.h"
-#include "UnconditionalFinalizer.h"
#include "WeakHandleOwner.h"
#include "WeakReferenceHarvester.h"
#include <wtf/AutomaticThread.h>
@@ -670,7 +669,6 @@
static const size_t s_blockFragmentLength = 32;
ListableHandler<WeakReferenceHarvester>::List m_weakReferenceHarvesters;
- ListableHandler<UnconditionalFinalizer>::List m_unconditionalFinalizers;
ParallelHelperClient m_helperClient;
RefPtr<SharedTask<void(SlotVisitor&)>> m_bonusVisitorTask;
Modified: trunk/Source/_javascript_Core/heap/SlotVisitor.cpp (232079 => 232080)
--- trunk/Source/_javascript_Core/heap/SlotVisitor.cpp 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/heap/SlotVisitor.cpp 2018-05-22 21:33:26 UTC (rev 232080)
@@ -758,11 +758,6 @@
m_heap.m_weakReferenceHarvesters.addThreadSafe(weakReferenceHarvester);
}
-void SlotVisitor::addUnconditionalFinalizer(UnconditionalFinalizer* unconditionalFinalizer)
-{
- m_heap.m_unconditionalFinalizers.addThreadSafe(unconditionalFinalizer);
-}
-
void SlotVisitor::didRace(const VisitRaceKey& race)
{
if (Options::verboseVisitRace())
Modified: trunk/Source/_javascript_Core/heap/SlotVisitor.h (232079 => 232080)
--- trunk/Source/_javascript_Core/heap/SlotVisitor.h 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/heap/SlotVisitor.h 2018-05-22 21:33:26 UTC (rev 232080)
@@ -44,7 +44,6 @@
class MarkedBlock;
class MarkingConstraint;
class MarkingConstraintSolver;
-class UnconditionalFinalizer;
template<typename T> class Weak;
class WeakReferenceHarvester;
template<typename T, typename Traits> class WriteBarrierBase;
@@ -142,7 +141,6 @@
#endif
void addWeakReferenceHarvester(WeakReferenceHarvester*);
- void addUnconditionalFinalizer(UnconditionalFinalizer*);
void dump(PrintStream&) const;
Deleted: trunk/Source/_javascript_Core/heap/UnconditionalFinalizer.h (232079 => 232080)
--- trunk/Source/_javascript_Core/heap/UnconditionalFinalizer.h 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/heap/UnconditionalFinalizer.h 2018-05-22 21:33:26 UTC (rev 232080)
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "ListableHandler.h"
-
-namespace JSC {
-
-// An unconditional finalizer is useful for caches that you would like to
-// destroy on each GC. This is currently used for the bytecode stream
-// associated with each CodeBlock.
-
-class UnconditionalFinalizer : public ListableHandler<UnconditionalFinalizer> {
- WTF_MAKE_FAST_ALLOCATED;
-public:
- virtual void finalizeUnconditionally() = 0;
-
-protected:
- virtual ~UnconditionalFinalizer() { }
-};
-
-} // namespace JSC
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.cpp (232079 => 232080)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.cpp 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.cpp 2018-05-22 21:33:26 UTC (rev 232080)
@@ -50,8 +50,6 @@
: Base(vm, vm.webAssemblyCodeBlockStructure.get())
, m_codeBlock(WTFMove(codeBlock))
{
- m_unconditionalFinalizer = PoisonedUniquePtr<JSWebAssemblyCodeBlockPoison, UnconditionalFinalizer>::create(*this);
-
// FIXME: We should not need to do this synchronously.
// https://bugs.webkit.org/show_bug.cgi?id=170567
m_wasmToJSExitStubs.reserveCapacity(m_codeBlock->functionImportCount());
@@ -92,14 +90,12 @@
ASSERT_GC_OBJECT_INHERITS(thisObject, info());
Base::visitChildren(thisObject, visitor);
-
- visitor.addUnconditionalFinalizer(thisObject->m_unconditionalFinalizer.get());
}
-void JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally()
+void JSWebAssemblyCodeBlock::finalizeUnconditionally(VM& vm)
{
- for (auto iter = codeBlock.m_callLinkInfos.begin(); !!iter; ++iter)
- (*iter)->visitWeak(*codeBlock.vm());
+ for (auto iter = m_callLinkInfos.begin(); !!iter; ++iter)
+ (*iter)->visitWeak(vm);
}
} // namespace JSC
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.h (232079 => 232080)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.h 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.h 2018-05-22 21:33:26 UTC (rev 232080)
@@ -32,7 +32,6 @@
#include "JSCast.h"
#include "PromiseDeferredTimer.h"
#include "Structure.h"
-#include "UnconditionalFinalizer.h"
#include "WasmCallee.h"
#include "WasmFormat.h"
#include "WasmModule.h"
@@ -82,6 +81,8 @@
return m_errorMessage;
}
+ void finalizeUnconditionally(VM&);
+
private:
JSWebAssemblyCodeBlock(VM&, Ref<Wasm::CodeBlock>&&, const Wasm::ModuleInformation&);
DECLARE_EXPORT_INFO;
@@ -89,17 +90,8 @@
static void destroy(JSCell*);
static void visitChildren(JSCell*, SlotVisitor&);
- struct UnconditionalFinalizer : public JSC::UnconditionalFinalizer {
- UnconditionalFinalizer(JSWebAssemblyCodeBlock& codeBlock)
- : codeBlock(codeBlock)
- { }
- void finalizeUnconditionally() override;
- JSWebAssemblyCodeBlock& codeBlock;
- };
-
PoisonedRef<JSWebAssemblyCodeBlockPoison, Wasm::CodeBlock> m_codeBlock;
Vector<MacroAssemblerCodeRef<WasmEntryPtrTag>> m_wasmToJSExitStubs;
- PoisonedUniquePtr<JSWebAssemblyCodeBlockPoison, UnconditionalFinalizer> m_unconditionalFinalizer;
Bag<CallLinkInfo> m_callLinkInfos;
String m_errorMessage;
};
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.h (232079 => 232080)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.h 2018-05-22 21:13:59 UTC (rev 232079)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.h 2018-05-22 21:33:26 UTC (rev 232080)
@@ -30,7 +30,6 @@
#include "JSCPoison.h"
#include "JSDestructibleObject.h"
#include "JSObject.h"
-#include "UnconditionalFinalizer.h"
#include "WasmMemoryMode.h"
#include <wtf/Bag.h>
#include <wtf/Expected.h>