Remove the UnconditionalFinalizer class
authorkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 May 2018 21:33:26 +0000 (21:33 +0000)
committerkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 May 2018 21:33:26 +0000 (21:33 +0000)
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.

* JavaScriptCore.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:
* JavaScriptCore.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:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232080 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
Source/JavaScriptCore/CMakeLists.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Source/JavaScriptCore/bytecode/CodeBlock.h
Source/JavaScriptCore/heap/Heap.cpp
Source/JavaScriptCore/heap/Heap.h
Source/JavaScriptCore/heap/SlotVisitor.cpp
Source/JavaScriptCore/heap/SlotVisitor.h
Source/JavaScriptCore/heap/UnconditionalFinalizer.h [deleted file]
Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp
Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h
Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h

index 8149188..02b480d 100644 (file)
@@ -557,7 +557,6 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
     heap/SubspaceInlines.h
     heap/Synchronousness.h
     heap/TinyBloomFilter.h
-    heap/UnconditionalFinalizer.h
     heap/VisitRaceKey.h
     heap/Weak.h
     heap/WeakBlock.h
index ec2a768..4fc72fe 100644 (file)
@@ -1,5 +1,51 @@
 2018-05-22  Keith Miller  <keith_miller@apple.com>
 
+        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.
+
+        * JavaScriptCore.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:
+        * JavaScriptCore.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  <keith_miller@apple.com>
+
         Unreviewed, fix internal build.
 
         * runtime/JSImmutableButterfly.cpp:
index 74a6e6f..76bf370 100644 (file)
                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 */; };
                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>"; };
                                0F1FB38A1E173A6200A9BE50 /* SynchronousStopTheWorldMutatorScheduler.cpp */,
                                0F1FB38B1E173A6200A9BE50 /* SynchronousStopTheWorldMutatorScheduler.h */,
                                141448CC13A1783700F5BA1A /* TinyBloomFilter.h */,
-                               0F5F08CE146C762F000472A9 /* UnconditionalFinalizer.h */,
                                0F4D8C721FC7A973001D32AC /* VisitCounter.h */,
                                0F952A9F1DF7860700E06FBD /* VisitRaceKey.cpp */,
                                0F952AA01DF7860700E06FBD /* VisitRaceKey.h */,
                                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 */,
                                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 */,
                                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 */,
                                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 */,
                                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 */,
                                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 */,
index 97b8ab9..fded8ea 100644 (file)
@@ -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"
index 05bd9b5..58670ed 100644 (file)
@@ -591,11 +591,10 @@ void Heap::finalizeUnconditionalFinalizers()
     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()
index aa374cb..e606294 100644 (file)
@@ -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 @@ private:
     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;
index da26ddb..5b0924a 100644 (file)
@@ -758,11 +758,6 @@ void SlotVisitor::addWeakReferenceHarvester(WeakReferenceHarvester* weakReferenc
     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())
index 2a76d7d..29fbfac 100644 (file)
@@ -44,7 +44,6 @@ class HeapSnapshotBuilder;
 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 @@ public:
 #endif
     
     void addWeakReferenceHarvester(WeakReferenceHarvester*);
-    void addUnconditionalFinalizer(UnconditionalFinalizer*);
 
     void dump(PrintStream&) const;
 
diff --git a/Source/JavaScriptCore/heap/UnconditionalFinalizer.h b/Source/JavaScriptCore/heap/UnconditionalFinalizer.h
deleted file mode 100644 (file)
index 10c0cc8..0000000
+++ /dev/null
@@ -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
index edf94ef..cedad5b 100644 (file)
@@ -50,8 +50,6 @@ JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock(VM& vm, Ref<Wasm::CodeBlock>&& co
     : 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 @@ void JSWebAssemblyCodeBlock::visitChildren(JSCell* cell, SlotVisitor& visitor)
     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
index 2542af0..0eb4aa1 100644 (file)
@@ -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 @@ public:
         return m_errorMessage;
     }
 
+    void finalizeUnconditionally(VM&);
+
 private:
     JSWebAssemblyCodeBlock(VM&, Ref<Wasm::CodeBlock>&&, const Wasm::ModuleInformation&);
     DECLARE_EXPORT_INFO;
@@ -89,17 +90,8 @@ private:
     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;
 };
index 3fff1ec..17bed61 100644 (file)
@@ -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>