Changeset 290129 in webkit


Ignore:
Timestamp:
Feb 18, 2022, 8:43:58 AM (3 years ago)
Author:
mark.lam@apple.com
Message:

Split IsoSubspace into a GCClient allocator used by VM and a backend managed by Heap.
https://bugs.webkit.org/show_bug.cgi?id=233878
rdar://problem/86108394

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

  1. Add a useGlobalGC option. We're currently only using this to guard some code for GlobalGC. We're not ready to run with GlobalGC enabled yet.
  1. Create a new GCClient namespace in JSC. The Heap is now split into 2 parts:
    1. VM / GCClient / client side: JSC::GCClient::Heap
    2. GlobalGC / server side: JSC::Heap

The eventual goal is to have many GCClient Heaps backed by a singleton server
Heap. Currently, we still have a 1 to 1 correspondence between the client and
server side i.e. VM embeds both one instance each of GCClient::Heap and Heap.

  1. Split IsoSubspace into:
    1. VM / GCClient / client side: JSC::GCClient::IsoSubspace
    2. GlobalGC / server side: JSC::IsoSubspace

The client side will now manage a LocalAllocator for the IsoSubspace.

The eventual goal is to have many GCClient::IsoSubspace allocators fed from
a server IsoSubspace. Currently, we still have a 1 to 1 correspondence
between the client and server side. GCClient::IsoSubspace instances will be
managed by GCClient::Heap. Server side IsoSubspaces continue to be managed
by Heap.

  1. IsoSubspacePerVM is also now client-server aware.

Previously, IsoSubspacePerVM was relying on AutoremovingIsoSubspace to
"automatically" unregister IsoSubspaces from IsoSubspacePerVM via its
destructor. However, there is a bug where the AutoremovingIsoSubspace is
never associated with the VM, and there is nothing that will trigger its
destruction when the VM shuts down.

This patch fixes this issue by having IsoSubspacePerVM register with the VM's
GCClient::Heap and Heap. On destruction, those Heaps will now be aware of
the IsoSubspacePerVM in use, and will tell the IsoSubspacePerVM to release
the associated IsoSubspaces.

The IsoSubspacePerVM::AutoremovingIsoSubspace class is now removed since it
is not needed.

  1. Previously, in Heap, we have some SpaceAndSet members that were named simply as "Space". Renamed these to be "SpaceAndSet" explicitly to more accurately reflect what they are.
  • API/JSAPIGlobalObject.h:
  • API/JSAPIValueWrapper.h:
  • API/JSAPIWrapperObject.mm:

(JSC::JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl):

  • API/JSCallbackConstructor.h:
  • API/JSCallbackFunction.h:
  • API/JSCallbackObject.cpp:

(JSC::JSCallbackObject<JSNonFinalObject>::subspaceForImpl):
(JSC::JSCallbackObject<JSGlobalObject>::subspaceForImpl):

  • API/JSCallbackObject.h:
  • API/ObjCCallbackFunction.h:

(JSC::ObjCCallbackFunction::subspaceFor):

  • API/glib/JSAPIWrapperGlobalObject.cpp:

(JSC::JSCallbackObject<JSAPIWrapperGlobalObject>::subspaceForImpl):

  • API/glib/JSAPIWrapperObjectGLib.cpp:

(JSC::JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl):

  • API/glib/JSCCallbackFunction.h:
  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::visitChildren):
(JSC::CodeBlock::finalizeUnconditionally):

  • bytecode/EvalCodeBlock.h:
  • bytecode/ExecutableToCodeBlockEdge.h:
  • bytecode/FunctionCodeBlock.h:
  • bytecode/ModuleProgramCodeBlock.h:
  • bytecode/ProgramCodeBlock.h:
  • bytecode/UnlinkedEvalCodeBlock.h:
  • bytecode/UnlinkedFunctionCodeBlock.h:
  • bytecode/UnlinkedFunctionExecutable.cpp:

(JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
(JSC::UnlinkedFunctionExecutable::finalizeUnconditionally):

  • bytecode/UnlinkedFunctionExecutable.h:
  • bytecode/UnlinkedModuleProgramCodeBlock.h:
  • bytecode/UnlinkedProgramCodeBlock.h:
  • debugger/DebuggerScope.h:
  • heap/Heap.cpp:

(JSC::Heap::Heap):
(JSC::Heap::~Heap):
(JSC::Heap::finalizeUnconditionalFinalizers):
(JSC::Heap::deleteAllUnlinkedCodeBlocks):
(JSC::GCClient::Heap::Heap):
(JSC::GCClient::Heap::~Heap):

  • heap/Heap.h:

(JSC::Heap::lock):
(JSC::Heap::forEachCodeBlockSpace):
(JSC::Heap::forEachScriptExecutableSpace):
(JSC::GCClient::Heap::server):

  • heap/HeapInlines.h:

(JSC::GCClient::Heap::vm const):

  • heap/IsoSubspace.cpp:

(JSC::IsoSubspace::IsoSubspace):
(JSC::GCClient::IsoSubspace::IsoSubspace):

  • heap/IsoSubspace.h:

(JSC::GCClient::IsoSubspace::cellSize):
(JSC::IsoSubspace::allocatorFor): Deleted.

  • heap/IsoSubspaceInlines.h:

(JSC::IsoSubspace::allocate): Deleted.

  • heap/IsoSubspacePerVM.cpp:

(JSC::IsoSubspacePerVM::IsoSubspacePerVM):
(JSC::IsoSubspacePerVM::isoSubspaceforHeap):
(JSC::IsoSubspacePerVM::clientIsoSubspaceforVM):
(JSC::IsoSubspacePerVM::releaseIsoSubspace):
(JSC::IsoSubspacePerVM::releaseClientIsoSubspace):
(): Deleted.
(JSC::IsoSubspacePerVM::forVM): Deleted.

  • heap/IsoSubspacePerVM.h:
  • heap/LocalAllocator.cpp:

(JSC::LocalAllocator::allocateSlowCase):
(JSC::LocalAllocator::tryAllocateWithoutCollecting):
(JSC::LocalAllocator::doTestCollectionsIfNeeded):

  • heap/LocalAllocator.h:

(JSC::LocalAllocator::directory const):

  • heap/MarkedBlock.cpp:

(JSC::MarkedBlock::Handle::stopAllocating):

  • heap/MutatorState.h:
  • inspector/JSInjectedScriptHost.h:
  • inspector/JSInjectedScriptHostPrototype.h:
  • inspector/JSJavaScriptCallFrame.h:
  • inspector/JSJavaScriptCallFramePrototype.h:
  • runtime/AggregateErrorPrototype.h:
  • runtime/ArrayIteratorPrototype.h:
  • runtime/AsyncFromSyncIteratorPrototype.h:
  • runtime/AsyncFunctionPrototype.h:
  • runtime/AsyncGeneratorFunctionPrototype.h:
  • runtime/AsyncGeneratorPrototype.h:
  • runtime/AsyncIteratorPrototype.h:
  • runtime/AtomicsObject.h:
  • runtime/BigIntObject.h:
  • runtime/BigIntPrototype.h:
  • runtime/BooleanObject.h:

(JSC::BooleanObject::subspaceFor):

  • runtime/BrandedStructure.h:
  • runtime/ClonedArguments.h:
  • runtime/ConsoleObject.h:
  • runtime/CustomGetterSetter.h:

(JSC::CustomGetterSetter::subspaceFor):

  • runtime/DOMAttributeGetterSetter.h:
  • runtime/DateInstance.h:
  • runtime/DatePrototype.h:
  • runtime/ErrorInstance.h:

(JSC::ErrorInstance::subspaceFor):

  • runtime/ErrorPrototype.h:
  • runtime/EvalExecutable.h:

(JSC::EvalExecutable::subspaceFor):

  • runtime/Exception.h:
  • runtime/FinalizationRegistryPrototype.h:
  • runtime/FunctionExecutable.h:
  • runtime/FunctionRareData.h:
  • runtime/GeneratorFunctionPrototype.h:
  • runtime/GeneratorPrototype.h:
  • runtime/GetterSetter.h:
  • runtime/HashMapImpl.h:
  • runtime/InternalFunction.h:

(JSC::InternalFunction::subspaceFor):

  • runtime/IntlCollator.h:
  • runtime/IntlCollatorPrototype.h:
  • runtime/IntlDateTimeFormat.h:
  • runtime/IntlDateTimeFormatPrototype.h:
  • runtime/IntlDisplayNames.h:
  • runtime/IntlDisplayNamesPrototype.h:
  • runtime/IntlListFormat.h:
  • runtime/IntlListFormatPrototype.h:
  • runtime/IntlLocale.h:
  • runtime/IntlLocalePrototype.h:
  • runtime/IntlNumberFormat.h:
  • runtime/IntlNumberFormatPrototype.h:
  • runtime/IntlObject.h:
  • runtime/IntlPluralRules.h:
  • runtime/IntlPluralRulesPrototype.h:
  • runtime/IntlRelativeTimeFormat.h:
  • runtime/IntlRelativeTimeFormatPrototype.h:
  • runtime/IntlSegmentIterator.h:
  • runtime/IntlSegmentIteratorPrototype.h:
  • runtime/IntlSegmenter.h:
  • runtime/IntlSegmenterPrototype.h:
  • runtime/IntlSegments.h:
  • runtime/IntlSegmentsPrototype.h:
  • runtime/IteratorPrototype.h:
  • runtime/JSArray.h:

(JSC::JSArray::subspaceFor):

  • runtime/JSArrayBuffer.h:
  • runtime/JSArrayBufferPrototype.h:
  • runtime/JSArrayIterator.h:
  • runtime/JSAsyncGenerator.h:
  • runtime/JSBigInt.h:
  • runtime/JSBoundFunction.h:
  • runtime/JSCallee.h:

(JSC::JSCallee::subspaceFor):

  • runtime/JSCustomGetterFunction.h:
  • runtime/JSCustomSetterFunction.h:
  • runtime/JSDataView.h:
  • runtime/JSDataViewPrototype.h:
  • runtime/JSFinalizationRegistry.h:
  • runtime/JSFunction.h:

(JSC::JSFunction::subspaceFor):

  • runtime/JSGenerator.h:
  • runtime/JSGenericTypedArrayView.h:
  • runtime/JSGenericTypedArrayViewPrototype.h:
  • runtime/JSGlobalLexicalEnvironment.h:
  • runtime/JSGlobalObject.h:

(JSC::JSGlobalObject::subspaceFor):

  • runtime/JSMap.h:
  • runtime/JSMapIterator.h:
  • runtime/JSModuleLoader.h:
  • runtime/JSModuleNamespaceObject.h:
  • runtime/JSModuleRecord.h:
  • runtime/JSNativeStdFunction.h:
  • runtime/JSONObject.h:
  • runtime/JSPromise.h:

(JSC::JSPromise::subspaceFor):

  • runtime/JSPromisePrototype.h:

(JSC::JSPromisePrototype::subspaceFor):

  • runtime/JSPropertyNameEnumerator.h:
  • runtime/JSProxy.h:

(JSC::JSProxy::subspaceFor):

  • runtime/JSRemoteFunction.h:
  • runtime/JSScriptFetchParameters.h:
  • runtime/JSScriptFetcher.h:
  • runtime/JSSet.h:
  • runtime/JSSetIterator.h:
  • runtime/JSSourceCode.h:
  • runtime/JSString.h:

(JSC::JSString::subspaceFor):

  • runtime/JSStringIterator.h:
  • runtime/JSTemplateObjectDescriptor.h:
  • runtime/JSTypedArrayViewPrototype.h:
  • runtime/JSWeakObjectRef.h:
  • runtime/JSWithScope.h:
  • runtime/MapIteratorPrototype.h:
  • runtime/MapPrototype.h:
  • runtime/MathObject.h:
  • runtime/ModuleProgramExecutable.h:
  • runtime/NativeErrorPrototype.h:
  • runtime/NativeExecutable.h:
  • runtime/NumberObject.h:

(JSC::NumberObject::subspaceFor):

  • runtime/ObjectPrototype.h:
  • runtime/OptionsList.h:
  • runtime/ProgramExecutable.h:
  • runtime/PropertyTable.h:
  • runtime/ProxyObject.h:
  • runtime/ProxyRevoke.h:
  • runtime/ReflectObject.h:
  • runtime/RegExp.h:
  • runtime/RegExpObject.h:
  • runtime/RegExpPrototype.h:
  • runtime/RegExpStringIteratorPrototype.h:
  • runtime/ScopedArguments.h:
  • runtime/ScopedArgumentsTable.h:
  • runtime/ScriptExecutable.cpp:

(JSC::ScriptExecutable::clearCode):
(JSC::ScriptExecutable::installCode):

  • runtime/SetIteratorPrototype.h:
  • runtime/SetPrototype.h:
  • runtime/ShadowRealmObject.h:
  • runtime/ShadowRealmPrototype.h:
  • runtime/SparseArrayValueMap.h:
  • runtime/StrictEvalActivation.h:
  • runtime/StringIteratorPrototype.h:
  • runtime/StringObject.h:

(JSC::StringObject::subspaceFor):

  • runtime/Structure.h:

(JSC::Structure::subspaceFor):

  • runtime/StructureChain.h:
  • runtime/StructureRareData.h:
  • runtime/Symbol.h:
  • runtime/SymbolObject.h:
  • runtime/SymbolPrototype.h:
  • runtime/SymbolTable.h:
  • runtime/TemporalCalendar.h:
  • runtime/TemporalCalendarPrototype.h:
  • runtime/TemporalDuration.h:
  • runtime/TemporalDurationPrototype.h:
  • runtime/TemporalInstant.h:
  • runtime/TemporalInstantPrototype.h:
  • runtime/TemporalNow.h:
  • runtime/TemporalObject.h:
  • runtime/TemporalPlainTime.h:
  • runtime/TemporalPlainTimePrototype.h:
  • runtime/TemporalTimeZone.h:
  • runtime/TemporalTimeZonePrototype.h:
  • runtime/VM.cpp:

(JSC::VM::VM):

  • runtime/VM.h:

(JSC::VM::codeBlockSpace):
(JSC::VM::functionExecutableSpace):
(JSC::VM::programExecutableSpace):
(JSC::VM::unlinkedFunctionExecutableSpace):
(JSC::VM::arraySpace): Deleted.
(JSC::VM::bigIntSpace): Deleted.
(JSC::VM::calleeSpace): Deleted.
(JSC::VM::clonedArgumentsSpace): Deleted.
(JSC::VM::customGetterSetterSpace): Deleted.
(JSC::VM::dateInstanceSpace): Deleted.
(JSC::VM::domAttributeGetterSetterSpace): Deleted.
(JSC::VM::exceptionSpace): Deleted.
(JSC::VM::executableToCodeBlockEdgeSpace): Deleted.
(JSC::VM::functionSpace): Deleted.
(JSC::VM::getterSetterSpace): Deleted.
(JSC::VM::globalLexicalEnvironmentSpace): Deleted.
(JSC::VM::internalFunctionSpace): Deleted.
(JSC::VM::jsProxySpace): Deleted.
(JSC::VM::nativeExecutableSpace): Deleted.
(JSC::VM::numberObjectSpace): Deleted.
(JSC::VM::plainObjectSpace): Deleted.
(JSC::VM::promiseSpace): Deleted.
(JSC::VM::propertyNameEnumeratorSpace): Deleted.
(JSC::VM::propertyTableSpace): Deleted.
(JSC::VM::regExpSpace): Deleted.
(JSC::VM::regExpObjectSpace): Deleted.
(JSC::VM::ropeStringSpace): Deleted.
(JSC::VM::scopedArgumentsSpace): Deleted.
(JSC::VM::sparseArrayValueMapSpace): Deleted.
(JSC::VM::stringSpace): Deleted.
(JSC::VM::stringObjectSpace): Deleted.
(JSC::VM::structureChainSpace): Deleted.
(JSC::VM::structureRareDataSpace): Deleted.
(JSC::VM::structureSpace): Deleted.
(JSC::VM::brandedStructureSpace): Deleted.
(JSC::VM::symbolTableSpace): Deleted.

  • runtime/WeakMapImpl.h:

(JSC::WeakMapImpl::subspaceFor):

  • runtime/WeakMapPrototype.h:
  • runtime/WeakObjectRefPrototype.h:
  • runtime/WeakSetPrototype.h:
  • wasm/js/JSToWasmICCallee.h:
  • wasm/js/JSWebAssembly.h:
  • wasm/js/JSWebAssemblyException.h:
  • wasm/js/JSWebAssemblyGlobal.h:
  • wasm/js/JSWebAssemblyInstance.h:
  • wasm/js/JSWebAssemblyMemory.h:
  • wasm/js/JSWebAssemblyModule.h:
  • wasm/js/JSWebAssemblyTable.h:
  • wasm/js/JSWebAssemblyTag.h:
  • wasm/js/WebAssemblyCompileErrorPrototype.h:
  • wasm/js/WebAssemblyExceptionPrototype.h:
  • wasm/js/WebAssemblyFunction.h:
  • wasm/js/WebAssemblyGlobalPrototype.h:
  • wasm/js/WebAssemblyInstancePrototype.h:
  • wasm/js/WebAssemblyLinkErrorPrototype.h:
  • wasm/js/WebAssemblyMemoryPrototype.h:
  • wasm/js/WebAssemblyModulePrototype.h:
  • wasm/js/WebAssemblyModuleRecord.h:
  • wasm/js/WebAssemblyRuntimeErrorPrototype.h:
  • wasm/js/WebAssemblyTablePrototype.h:
  • wasm/js/WebAssemblyTagPrototype.h:
  • wasm/js/WebAssemblyWrapperFunction.h:

Source/WebCore:

  1. Make various classes client-server aware in terms of IsoSubspaces.
  2. Make CodeGeneratorJS.pm client-server aware in terms of IsoSubspaces.
  3. Rebase bindings test results.
  • CMakeLists.txt:
  • DerivedSources-output.xcfilelist:
  • DerivedSources.make:
  • bindings/js/DOMGCOutputConstraint.cpp:

(WebCore::DOMGCOutputConstraint::DOMGCOutputConstraint):
(WebCore::DOMGCOutputConstraint::executeImplImpl):

  • bindings/js/DOMGCOutputConstraint.h:
  • bindings/js/JSDOMAsyncIterator.h:
  • bindings/js/JSDOMBuiltinConstructorBase.cpp:

(WebCore::JSDOMBuiltinConstructorBase::subspaceForImpl):

  • bindings/js/JSDOMBuiltinConstructorBase.h:

(WebCore::JSDOMBuiltinConstructorBase::subspaceFor):

  • bindings/js/JSDOMConstructorBase.cpp:

(WebCore::JSDOMConstructorBase::subspaceForImpl):

  • bindings/js/JSDOMConstructorBase.h:

(WebCore::JSDOMConstructorBase::subspaceFor):

  • bindings/js/JSDOMConstructorNotCallable.h:

(WebCore::JSDOMConstructorNotCallable::subspaceFor):

  • bindings/js/JSDOMIterator.h:
  • bindings/js/JSDOMWindowProperties.cpp:

(WebCore::JSDOMWindowProperties::subspaceForImpl):

  • bindings/js/JSDOMWindowProperties.h:
  • bindings/js/JSFileSystemDirectoryHandleIterator.cpp:

(WebCore::JSFileSystemDirectoryHandleIterator::subspaceForImpl):

  • bindings/js/JSFileSystemDirectoryHandleIterator.h:
  • bindings/js/JSIDBSerializationGlobalObject.cpp:

(WebCore::JSIDBSerializationGlobalObject::subspaceForImpl):

  • bindings/js/JSIDBSerializationGlobalObject.h:
  • bindings/js/JSWindowProxy.cpp:

(WebCore::JSWindowProxy::subspaceForImpl):

  • bindings/js/JSWindowProxy.h:
  • bindings/js/WebCoreJSClientData.cpp:

(WebCore::JSHeapData::JSHeapData):
(WebCore::JSHeapData::ensureHeapData):
(WebCore::JSVMClientData::JSVMClientData):
(WebCore::JSVMClientData::initNormalWorld):

  • bindings/js/WebCoreJSClientData.h:

(WebCore::JSHeapData::lock):
(WebCore::JSHeapData::subspaces):
(WebCore::JSHeapData::fileSystemDirectoryHandleIteratorSpace):
(WebCore::JSHeapData::setFileSystemDirectoryHandleIteratorSpace):
(WebCore::JSVMClientData::normalWorld):
(WebCore::JSVMClientData::rememberWorld):
(WebCore::JSVMClientData::forgetWorld):
(WebCore::JSVMClientData::heapData):
(WebCore::JSVMClientData::builtinNames):
(WebCore::JSVMClientData::builtinFunctions):
(WebCore::JSVMClientData::domBuiltinConstructorSpace):
(WebCore::JSVMClientData::domConstructorSpace):
(WebCore::JSVMClientData::domNamespaceObjectSpace):
(WebCore::JSVMClientData::domWindowPropertiesSpace):
(WebCore::JSVMClientData::runtimeArraySpace):
(WebCore::JSVMClientData::runtimeMethodSpace):
(WebCore::JSVMClientData::runtimeObjectSpace):
(WebCore::JSVMClientData::windowProxySpace):
(WebCore::JSVMClientData::idbSerializationSpace):
(WebCore::JSVMClientData::fileSystemDirectoryHandleIteratorSpace):
(WebCore::JSVMClientData::setFileSystemDirectoryHandleIteratorSpace):
(WebCore::JSVMClientData::clientSubspaces):
(WebCore::JSVMClientData::forEachOutputConstraintSpace): Deleted.
(WebCore::JSVMClientData::subspaces): Deleted.

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateHeader):
(GenerateImplementation):
(GenerateIterableDefinition):
(GeneratePrototypeDeclaration):

  • bindings/scripts/preprocess-idls.pl:
  • bindings/scripts/test/JS/JSDOMWindow.cpp:

(WebCore::JSDOMWindow::subspaceForImpl):

  • bindings/scripts/test/JS/JSDOMWindow.h:

(WebCore::JSDOMWindow::subspaceFor):

  • bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:

(WebCore::JSDedicatedWorkerGlobalScope::subspaceForImpl):

  • bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h:

(WebCore::JSDedicatedWorkerGlobalScope::subspaceFor):

  • bindings/scripts/test/JS/JSExposedStar.cpp:

(WebCore::JSExposedStarDOMConstructor::prototypeForStructure):
(WebCore::JSExposedStar::subspaceForImpl):

  • bindings/scripts/test/JS/JSExposedStar.h:

(WebCore::JSExposedStar::subspaceFor):

  • bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:

(WebCore::JSExposedToWorkerAndWindow::subspaceForImpl):

  • bindings/scripts/test/JS/JSExposedToWorkerAndWindow.h:

(WebCore::JSExposedToWorkerAndWindow::subspaceFor):

  • bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:

(WebCore::JSPaintWorkletGlobalScope::subspaceForImpl):

  • bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h:

(WebCore::JSPaintWorkletGlobalScope::subspaceFor):

  • bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:

(WebCore::JSServiceWorkerGlobalScope::subspaceForImpl):

  • bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h:

(WebCore::JSServiceWorkerGlobalScope::subspaceFor):

  • bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp:

(WebCore::JSShadowRealmGlobalScope::subspaceForImpl):

  • bindings/scripts/test/JS/JSShadowRealmGlobalScope.h:

(WebCore::JSShadowRealmGlobalScope::subspaceFor):

  • bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp:

(WebCore::JSSharedWorkerGlobalScope::subspaceForImpl):

  • bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h:

(WebCore::JSSharedWorkerGlobalScope::subspaceFor):

  • bindings/scripts/test/JS/JSTestCEReactions.cpp:

(WebCore::JSTestCEReactionsDOMConstructor::prototypeForStructure):
(WebCore::JSTestCEReactions::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestCEReactions.h:

(WebCore::JSTestCEReactions::subspaceFor):

  • bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:

(WebCore::JSTestCEReactionsStringifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestCEReactionsStringifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:

(WebCore::JSTestCEReactionsStringifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestCallTracer.cpp:

(WebCore::JSTestCallTracerDOMConstructor::prototypeForStructure):
(WebCore::JSTestCallTracer::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestCallTracer.h:

(WebCore::JSTestCallTracer::subspaceFor):

  • bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:

(WebCore::JSTestClassWithJSBuiltinConstructorDOMConstructor::prototypeForStructure):
(WebCore::JSTestClassWithJSBuiltinConstructor::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:

(WebCore::JSTestClassWithJSBuiltinConstructor::subspaceFor):

  • bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:

(WebCore::JSTestConditionalIncludesDOMConstructor::prototypeForStructure):
(WebCore::JSTestConditionalIncludes::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestConditionalIncludes.h:

(WebCore::JSTestConditionalIncludes::subspaceFor):

  • bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:

(WebCore::JSTestConditionallyReadWriteDOMConstructor::prototypeForStructure):
(WebCore::JSTestConditionallyReadWrite::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestConditionallyReadWrite.h:

(WebCore::JSTestConditionallyReadWrite::subspaceFor):

  • bindings/scripts/test/JS/JSTestDOMJIT.cpp:

(WebCore::JSTestDOMJITDOMConstructor::prototypeForStructure):
(WebCore::JSTestDOMJIT::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDOMJIT.h:

(WebCore::JSTestDOMJIT::subspaceFor):

  • bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:

(WebCore::JSTestDefaultToJSONDOMConstructor::prototypeForStructure):
(WebCore::JSTestDefaultToJSON::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDefaultToJSON.h:

(WebCore::JSTestDefaultToJSON::subspaceFor):

  • bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:

(WebCore::JSTestDefaultToJSONFilteredByExposedDOMConstructor::prototypeForStructure):
(WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.h:

(WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceFor):

  • bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp:

(WebCore::JSTestDefaultToJSONIndirectInheritanceDOMConstructor::prototypeForStructure):
(WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.h:

(WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceFor):

  • bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:

(WebCore::JSTestDefaultToJSONInheritDOMConstructor::prototypeForStructure):
(WebCore::JSTestDefaultToJSONInherit::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDefaultToJSONInherit.h:

(WebCore::JSTestDefaultToJSONInherit::subspaceFor):

  • bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:

(WebCore::JSTestDefaultToJSONInheritFinalDOMConstructor::prototypeForStructure):
(WebCore::JSTestDefaultToJSONInheritFinal::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.h:

(WebCore::JSTestDefaultToJSONInheritFinal::subspaceFor):

  • bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:

(WebCore::JSTestDelegateToSharedSyntheticAttributeDOMConstructor::prototypeForStructure):
(WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.h:

(WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceFor):

  • bindings/scripts/test/JS/JSTestDomainSecurity.cpp:

(WebCore::JSTestDomainSecurityDOMConstructor::prototypeForStructure):
(WebCore::JSTestDomainSecurity::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestDomainSecurity.h:

(WebCore::JSTestDomainSecurity::subspaceFor):

  • bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:

(WebCore::JSTestEnabledBySettingDOMConstructor::prototypeForStructure):
(WebCore::JSTestEnabledBySetting::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestEnabledBySetting.h:

(WebCore::JSTestEnabledBySetting::subspaceFor):

  • bindings/scripts/test/JS/JSTestEnabledForContext.cpp:

(WebCore::JSTestEnabledForContextDOMConstructor::prototypeForStructure):
(WebCore::JSTestEnabledForContext::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestEnabledForContext.h:

(WebCore::JSTestEnabledForContext::subspaceFor):

  • bindings/scripts/test/JS/JSTestEventConstructor.cpp:

(WebCore::JSTestEventConstructor::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestEventConstructor.h:

(WebCore::JSTestEventConstructor::subspaceFor):

  • bindings/scripts/test/JS/JSTestEventTarget.cpp:

(WebCore::JSTestEventTargetDOMConstructor::prototypeForStructure):
(WebCore::JSTestEventTarget::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestEventTarget.h:

(WebCore::JSTestEventTarget::subspaceFor):

  • bindings/scripts/test/JS/JSTestException.cpp:

(WebCore::JSTestExceptionDOMConstructor::prototypeForStructure):
(WebCore::JSTestException::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestException.h:

(WebCore::JSTestException::subspaceFor):

  • bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp:

(WebCore::JSTestGenerateAddOpaqueRootDOMConstructor::prototypeForStructure):
(WebCore::JSTestGenerateAddOpaqueRoot::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.h:

(WebCore::JSTestGenerateAddOpaqueRoot::subspaceFor):

  • bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:

(WebCore::JSTestGenerateIsReachableDOMConstructor::prototypeForStructure):
(WebCore::JSTestGenerateIsReachable::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestGenerateIsReachable.h:

(WebCore::JSTestGenerateIsReachable::subspaceFor):

  • bindings/scripts/test/JS/JSTestGlobalObject.cpp:

(WebCore::JSTestGlobalObject::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestGlobalObject.h:

(WebCore::JSTestGlobalObject::subspaceFor):

  • bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:

(WebCore::JSTestIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestIndexedSetterNoIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h:

(WebCore::JSTestIndexedSetterNoIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:

(WebCore::JSTestIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
(WebCore::JSTestIndexedSetterThrowingException::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h:

(WebCore::JSTestIndexedSetterThrowingException::subspaceFor):

  • bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:

(WebCore::JSTestIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestIndexedSetterWithIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h:

(WebCore::JSTestIndexedSetterWithIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestInterface.cpp:

(WebCore::JSTestInterfaceDOMConstructor::construct):
(WebCore::jsTestInterfacePrototypeFunction_entriesCaller):
(WebCore::JSTestInterface::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestInterface.h:
  • bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:

(WebCore::JSTestInterfaceLeadingUnderscoreDOMConstructor::prototypeForStructure):
(WebCore::JSTestInterfaceLeadingUnderscore::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h:

(WebCore::JSTestInterfaceLeadingUnderscore::subspaceFor):

  • bindings/scripts/test/JS/JSTestIterable.cpp:

(WebCore::JSTestIterableDOMConstructor::prototypeForStructure):
(WebCore::jsTestIterablePrototypeFunction_entriesCaller):
(WebCore::JSTestIterable::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestIterable.h:

(WebCore::JSTestIterable::subspaceFor):

  • bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:

(WebCore::JSTestJSBuiltinConstructorDOMConstructor::prototypeForStructure):
(WebCore::JSTestJSBuiltinConstructor::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:

(WebCore::JSTestJSBuiltinConstructor::subspaceFor):

  • bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:

(WebCore::JSTestLegacyFactoryFunctionDOMConstructor::prototypeForStructure):
(WebCore::JSTestLegacyFactoryFunction::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestLegacyFactoryFunction.h:

(WebCore::JSTestLegacyFactoryFunction::subspaceFor):

  • bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:

(WebCore::JSTestLegacyNoInterfaceObjectPrototype::finishCreation):
(WebCore::JSTestLegacyNoInterfaceObject::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.h:

(WebCore::JSTestLegacyNoInterfaceObject::subspaceFor):

  • bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:

(WebCore::JSTestLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
(WebCore::JSTestLegacyOverrideBuiltIns::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.h:

(WebCore::JSTestLegacyOverrideBuiltIns::subspaceFor):

  • bindings/scripts/test/JS/JSTestMapLike.cpp:

(WebCore::JSTestMapLikeDOMConstructor::prototypeForStructure):
(WebCore::JSTestMapLike::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestMapLike.h:

(WebCore::JSTestMapLike::subspaceFor):

  • bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:

(WebCore::JSTestMapLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
(WebCore::JSTestMapLikeWithOverriddenOperations::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.h:

(WebCore::JSTestMapLikeWithOverriddenOperations::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:

(WebCore::JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h:

(WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:

(WebCore::JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h:

(WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:

(WebCore::JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h:

(WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:

(WebCore::JSTestNamedDeleterNoIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedDeleterNoIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h:

(WebCore::JSTestNamedDeleterNoIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:

(WebCore::JSTestNamedDeleterThrowingExceptionDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedDeleterThrowingException::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h:

(WebCore::JSTestNamedDeleterThrowingException::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:

(WebCore::JSTestNamedDeleterWithIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedDeleterWithIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h:

(WebCore::JSTestNamedDeleterWithIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:

(WebCore::JSTestNamedDeleterWithIndexedGetterDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h:

(WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:

(WebCore::JSTestNamedGetterCallWithDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedGetterCallWith::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedGetterCallWith.h:

(WebCore::JSTestNamedGetterCallWith::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:

(WebCore::JSTestNamedGetterNoIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedGetterNoIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h:

(WebCore::JSTestNamedGetterNoIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:

(WebCore::JSTestNamedGetterWithIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedGetterWithIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h:

(WebCore::JSTestNamedGetterWithIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:

(WebCore::JSTestNamedSetterNoIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterNoIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h:

(WebCore::JSTestNamedSetterNoIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:

(WebCore::JSTestNamedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterThrowingException::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h:

(WebCore::JSTestNamedSetterThrowingException::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:

(WebCore::JSTestNamedSetterWithIdentifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterWithIdentifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h:

(WebCore::JSTestNamedSetterWithIdentifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:

(WebCore::JSTestNamedSetterWithIndexedGetterDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterWithIndexedGetter::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h:

(WebCore::JSTestNamedSetterWithIndexedGetter::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:

(WebCore::JSTestNamedSetterWithIndexedGetterAndSetterDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h:

(WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:

(WebCore::JSTestNamedSetterWithLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.h:

(WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:

(WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.h:

(WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:

(WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
(WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.h:

(WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceFor):

  • bindings/scripts/test/JS/JSTestNamespaceObject.cpp:

(WebCore::JSTestNamespaceObject::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNamespaceObject.h:

(WebCore::JSTestNamespaceObject::subspaceFor):

  • bindings/scripts/test/JS/JSTestNode.cpp:

(WebCore::jsTestNodePrototypeFunction_entriesCaller):
(WebCore::JSTestNode::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestNode.h:
  • bindings/scripts/test/JS/JSTestObj.cpp:

(WebCore::JSTestObjDOMConstructor::construct):
(WebCore::JSTestObj::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestObj.h:

(WebCore::JSTestObj::subspaceFor):

  • bindings/scripts/test/JS/JSTestOperationConditional.cpp:

(WebCore::JSTestOperationConditionalDOMConstructor::prototypeForStructure):
(WebCore::JSTestOperationConditional::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestOperationConditional.h:

(WebCore::JSTestOperationConditional::subspaceFor):

  • bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:

(WebCore::JSTestOverloadedConstructors::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestOverloadedConstructors.h:

(WebCore::JSTestOverloadedConstructors::subspaceFor):

  • bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:

(WebCore::JSTestOverloadedConstructorsWithSequence::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:

(WebCore::JSTestOverloadedConstructorsWithSequence::subspaceFor):

  • bindings/scripts/test/JS/JSTestPluginInterface.cpp:

(WebCore::JSTestPluginInterfaceDOMConstructor::prototypeForStructure):
(WebCore::JSTestPluginInterface::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestPluginInterface.h:

(WebCore::JSTestPluginInterface::subspaceFor):

  • bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:

(WebCore::JSTestPromiseRejectionEvent::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h:

(WebCore::JSTestPromiseRejectionEvent::subspaceFor):

  • bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:

(WebCore::JSTestReadOnlyMapLikeDOMConstructor::prototypeForStructure):
(WebCore::JSTestReadOnlyMapLike::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestReadOnlyMapLike.h:

(WebCore::JSTestReadOnlyMapLike::subspaceFor):

  • bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:

(WebCore::JSTestReadOnlySetLikeDOMConstructor::prototypeForStructure):
(WebCore::JSTestReadOnlySetLike::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestReadOnlySetLike.h:

(WebCore::JSTestReadOnlySetLike::subspaceFor):

  • bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:

(WebCore::JSTestReportExtraMemoryCostDOMConstructor::prototypeForStructure):
(WebCore::JSTestReportExtraMemoryCost::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestReportExtraMemoryCost.h:

(WebCore::JSTestReportExtraMemoryCost::subspaceFor):

  • bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:

(WebCore::JSTestSerializedScriptValueInterfaceDOMConstructor::prototypeForStructure):
(WebCore::JSTestSerializedScriptValueInterface::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:

(WebCore::JSTestSerializedScriptValueInterface::subspaceFor):

  • bindings/scripts/test/JS/JSTestSetLike.cpp:

(WebCore::JSTestSetLikeDOMConstructor::prototypeForStructure):
(WebCore::JSTestSetLike::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestSetLike.h:

(WebCore::JSTestSetLike::subspaceFor):

  • bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:

(WebCore::JSTestSetLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
(WebCore::JSTestSetLikeWithOverriddenOperations::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.h:

(WebCore::JSTestSetLikeWithOverriddenOperations::subspaceFor):

  • bindings/scripts/test/JS/JSTestStringifier.cpp:

(WebCore::JSTestStringifierDOMConstructor::prototypeForStructure):
(WebCore::JSTestStringifier::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestStringifier.h:

(WebCore::JSTestStringifier::subspaceFor):

  • bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:

(WebCore::JSTestStringifierAnonymousOperationDOMConstructor::prototypeForStructure):
(WebCore::JSTestStringifierAnonymousOperation::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h:

(WebCore::JSTestStringifierAnonymousOperation::subspaceFor):

  • bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:

(WebCore::JSTestStringifierNamedOperationDOMConstructor::prototypeForStructure):
(WebCore::JSTestStringifierNamedOperation::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestStringifierNamedOperation.h:

(WebCore::JSTestStringifierNamedOperation::subspaceFor):

  • bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:

(WebCore::JSTestStringifierOperationImplementedAsDOMConstructor::prototypeForStructure):
(WebCore::JSTestStringifierOperationImplementedAs::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h:

(WebCore::JSTestStringifierOperationImplementedAs::subspaceFor):

  • bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:

(WebCore::JSTestStringifierOperationNamedToStringDOMConstructor::prototypeForStructure):
(WebCore::JSTestStringifierOperationNamedToString::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h:

(WebCore::JSTestStringifierOperationNamedToString::subspaceFor):

  • bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:

(WebCore::JSTestStringifierReadOnlyAttributeDOMConstructor::prototypeForStructure):
(WebCore::JSTestStringifierReadOnlyAttribute::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h:

(WebCore::JSTestStringifierReadOnlyAttribute::subspaceFor):

  • bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:

(WebCore::JSTestStringifierReadWriteAttributeDOMConstructor::prototypeForStructure):
(WebCore::JSTestStringifierReadWriteAttribute::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h:

(WebCore::JSTestStringifierReadWriteAttribute::subspaceFor):

  • bindings/scripts/test/JS/JSTestTaggedWrapper.cpp:

(WebCore::JSTestTaggedWrapperDOMConstructor::prototypeForStructure):
(WebCore::JSTestTaggedWrapper::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestTaggedWrapper.h:

(WebCore::JSTestTaggedWrapper::subspaceFor):

  • bindings/scripts/test/JS/JSTestTypedefs.cpp:

(WebCore::JSTestTypedefsDOMConstructor::construct):
(WebCore::JSTestTypedefs::subspaceForImpl):

  • bindings/scripts/test/JS/JSTestTypedefs.h:

(WebCore::JSTestTypedefs::subspaceFor):

  • bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:

(WebCore::JSWorkerGlobalScope::subspaceForImpl):

  • bindings/scripts/test/JS/JSWorkerGlobalScope.h:

(WebCore::JSWorkerGlobalScope::subspaceFor):

  • bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:

(WebCore::JSWorkletGlobalScope::subspaceForImpl):

  • bindings/scripts/test/JS/JSWorkletGlobalScope.h:

(WebCore::JSWorkletGlobalScope::subspaceFor):

  • bridge/objc/objc_runtime.h:
  • bridge/objc/objc_runtime.mm:

(JSC::Bindings::ObjcFallbackObjectImp::subspaceForImpl):

  • bridge/runtime_array.cpp:

(JSC::RuntimeArray::subspaceForImpl):

  • bridge/runtime_array.h:
  • bridge/runtime_method.cpp:

(JSC::RuntimeMethod::subspaceForImpl):

  • bridge/runtime_method.h:
  • bridge/runtime_object.cpp:

(JSC::Bindings::RuntimeObject::subspaceForImpl):

  • bridge/runtime_object.h:
Location:
trunk/Source
Files:
416 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/Source/JavaScriptCore/API/JSAPIGlobalObject.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple Inc.  All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141    static constexpr bool needsDestruction = true;
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.apiGlobalObjectSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/API/JSAPIValueWrapper.h

    r285730 r290129  
    22 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
    33 *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
    4  *  Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     4 *  Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    55 *
    66 *  This library is free software; you can redistribute it and/or
     
    3737
    3838    template<typename CellType, SubspaceAccess mode>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        return vm.apiValueWrapperSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/API/JSAPIWrapperObject.mm

    r273138 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    140140
    141141template <>
    142 IsoSubspace* JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
     142GCClient::IsoSubspace* JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
    143143{
    144144    switch (mode) {
  • TabularUnified trunk/Source/JavaScriptCore/API/JSCallbackConstructor.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2006-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2006-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess mode>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        return vm.callbackConstructorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/API/JSCallbackFunction.h

    r242123 r290129  
    11/*
    2  * Copyright (C) 2006-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2006-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.callbackFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/API/JSCallbackObject.cpp

    r285730 r290129  
    11/*
    2  * Copyright (C) 2006-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2006-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
    44 *
     
    121121
    122122template <>
    123 IsoSubspace* JSCallbackObject<JSNonFinalObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
     123GCClient::IsoSubspace* JSCallbackObject<JSNonFinalObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
    124124{
    125125    switch (mode) {
     
    134134
    135135template <>
    136 IsoSubspace* JSCallbackObject<JSGlobalObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
     136GCClient::IsoSubspace* JSCallbackObject<JSGlobalObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
    137137{
    138138    switch (mode) {
  • TabularUnified trunk/Source/JavaScriptCore/API/JSCallbackObject.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2006-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2006-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
    44 *
     
    153153
    154154    template<typename CellType, SubspaceAccess mode>
    155     static IsoSubspace* subspaceFor(VM& vm)
     155    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    156156    {
    157157        return subspaceForImpl(vm, mode);
     
    200200    void finishCreation(VM&);
    201201
    202     static IsoSubspace* subspaceForImpl(VM&, SubspaceAccess);
     202    static GCClient::IsoSubspace* subspaceForImpl(VM&, SubspaceAccess);
    203203    static EncodedJSValue JSC_HOST_CALL_ATTRIBUTES customToPrimitive(JSGlobalObject*, CallFrame*);
    204204
  • TabularUnified trunk/Source/JavaScriptCore/API/ObjCCallbackFunction.h

    r252875 r290129  
    11/*
    2  * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5050
    5151    template<typename CellType, SubspaceAccess mode>
    52     static IsoSubspace* subspaceFor(VM& vm)
     52    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5353    {
    5454        return vm.objCCallbackFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/API/glib/JSAPIWrapperGlobalObject.cpp

    r285730 r290129  
    11/*
    22 * Copyright (C) 2018 Igalia S.L.
     3 * Copyright (C) 2022 Apple Inc. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    9091
    9192template <>
    92 IsoSubspace* JSCallbackObject<JSAPIWrapperGlobalObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
     93GCClient::IsoSubspace* JSCallbackObject<JSAPIWrapperGlobalObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
    9394{
    9495    switch (mode) {
  • TabularUnified trunk/Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp

    r273138 r290129  
    11/*
    22 * Copyright (C) 2018 Igalia S.L.
    3  * Copyright (C) 2013-2018 Apple Inc. All rights reserved.
     3 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    104104
    105105template <>
    106 IsoSubspace* JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
     106GCClient::IsoSubspace* JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl(VM& vm, SubspaceAccess mode)
    107107{
    108108    switch (mode) {
  • TabularUnified trunk/Source/JavaScriptCore/API/glib/JSCCallbackFunction.h

    r278253 r290129  
    11/*
    22 * Copyright (C) 2018 Igalia S.L.
    3  * Copyright (C) 2006-2018 Apple Inc. All rights reserved.
     3 * Copyright (C) 2006-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4242
    4343    template<typename CellType, SubspaceAccess mode>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        return vm.jscCallbackFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/ChangeLog

    r290119 r290129  
     12022-02-18  Mark Lam  <mark.lam@apple.com>
     2
     3        Split IsoSubspace into a GCClient allocator used by VM and a backend managed by Heap.
     4        https://bugs.webkit.org/show_bug.cgi?id=233878
     5        rdar://problem/86108394
     6
     7        Reviewed by Yusuke Suzuki.
     8
     9        1. Add a useGlobalGC option.  We're currently only using this to guard some code
     10           for GlobalGC.  We're not ready to run with GlobalGC enabled yet.
     11
     12        2. Create a new GCClient namespace in JSC.  The Heap is now split into 2 parts:
     13           a. VM / GCClient / client side: JSC::GCClient::Heap
     14           b. GlobalGC / server side: JSC::Heap
     15
     16           The eventual goal is to have many GCClient Heaps backed by a singleton server
     17           Heap.  Currently, we still have a 1 to 1 correspondence between the client and
     18           server side i.e. VM embeds both one instance each of GCClient::Heap and Heap.
     19
     20        3. Split IsoSubspace into:
     21           a. VM / GCClient / client side: JSC::GCClient::IsoSubspace
     22           b. GlobalGC / server side: JSC::IsoSubspace
     23
     24           The client side will now manage a LocalAllocator for the IsoSubspace.
     25
     26           The eventual goal is to have many GCClient::IsoSubspace allocators fed from
     27           a server IsoSubspace.  Currently, we still have a 1 to 1 correspondence
     28           between the client and server side.  GCClient::IsoSubspace instances will be
     29           managed by GCClient::Heap.  Server side IsoSubspaces continue to be managed
     30           by Heap.
     31
     32        3. IsoSubspacePerVM is also now client-server aware.
     33
     34           Previously, IsoSubspacePerVM was relying on AutoremovingIsoSubspace to
     35           "automatically" unregister IsoSubspaces from IsoSubspacePerVM via its
     36           destructor.  However, there is a bug where the AutoremovingIsoSubspace is
     37           never associated with the VM, and there is nothing that will trigger its
     38           destruction when the VM shuts down.
     39
     40           This patch fixes this issue by having IsoSubspacePerVM register with the VM's
     41           GCClient::Heap and Heap.  On destruction, those Heaps will now be aware of
     42           the IsoSubspacePerVM in use, and will tell the IsoSubspacePerVM to release
     43           the associated IsoSubspaces.
     44
     45           The IsoSubspacePerVM::AutoremovingIsoSubspace class is now removed since it
     46           is not needed.
     47
     48        4. Previously, in Heap, we have some SpaceAndSet members that were named simply as
     49           "Space".  Renamed these to be "SpaceAndSet" explicitly to more accurately
     50           reflect what they are.
     51
     52        * API/JSAPIGlobalObject.h:
     53        * API/JSAPIValueWrapper.h:
     54        * API/JSAPIWrapperObject.mm:
     55        (JSC::JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl):
     56        * API/JSCallbackConstructor.h:
     57        * API/JSCallbackFunction.h:
     58        * API/JSCallbackObject.cpp:
     59        (JSC::JSCallbackObject<JSNonFinalObject>::subspaceForImpl):
     60        (JSC::JSCallbackObject<JSGlobalObject>::subspaceForImpl):
     61        * API/JSCallbackObject.h:
     62        * API/ObjCCallbackFunction.h:
     63        (JSC::ObjCCallbackFunction::subspaceFor):
     64        * API/glib/JSAPIWrapperGlobalObject.cpp:
     65        (JSC::JSCallbackObject<JSAPIWrapperGlobalObject>::subspaceForImpl):
     66        * API/glib/JSAPIWrapperObjectGLib.cpp:
     67        (JSC::JSCallbackObject<JSAPIWrapperObject>::subspaceForImpl):
     68        * API/glib/JSCCallbackFunction.h:
     69        * bytecode/CodeBlock.cpp:
     70        (JSC::CodeBlock::visitChildren):
     71        (JSC::CodeBlock::finalizeUnconditionally):
     72        * bytecode/EvalCodeBlock.h:
     73        * bytecode/ExecutableToCodeBlockEdge.h:
     74        * bytecode/FunctionCodeBlock.h:
     75        * bytecode/ModuleProgramCodeBlock.h:
     76        * bytecode/ProgramCodeBlock.h:
     77        * bytecode/UnlinkedEvalCodeBlock.h:
     78        * bytecode/UnlinkedFunctionCodeBlock.h:
     79        * bytecode/UnlinkedFunctionExecutable.cpp:
     80        (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
     81        (JSC::UnlinkedFunctionExecutable::finalizeUnconditionally):
     82        * bytecode/UnlinkedFunctionExecutable.h:
     83        * bytecode/UnlinkedModuleProgramCodeBlock.h:
     84        * bytecode/UnlinkedProgramCodeBlock.h:
     85        * debugger/DebuggerScope.h:
     86        * heap/Heap.cpp:
     87        (JSC::Heap::Heap):
     88        (JSC::Heap::~Heap):
     89        (JSC::Heap::finalizeUnconditionalFinalizers):
     90        (JSC::Heap::deleteAllUnlinkedCodeBlocks):
     91        (JSC::GCClient::Heap::Heap):
     92        (JSC::GCClient::Heap::~Heap):
     93        * heap/Heap.h:
     94        (JSC::Heap::lock):
     95        (JSC::Heap::forEachCodeBlockSpace):
     96        (JSC::Heap::forEachScriptExecutableSpace):
     97        (JSC::GCClient::Heap::server):
     98        * heap/HeapInlines.h:
     99        (JSC::GCClient::Heap::vm const):
     100        * heap/IsoSubspace.cpp:
     101        (JSC::IsoSubspace::IsoSubspace):
     102        (JSC::GCClient::IsoSubspace::IsoSubspace):
     103        * heap/IsoSubspace.h:
     104        (JSC::GCClient::IsoSubspace::cellSize):
     105        (JSC::IsoSubspace::allocatorFor): Deleted.
     106        * heap/IsoSubspaceInlines.h:
     107        (JSC::IsoSubspace::allocate): Deleted.
     108        * heap/IsoSubspacePerVM.cpp:
     109        (JSC::IsoSubspacePerVM::IsoSubspacePerVM):
     110        (JSC::IsoSubspacePerVM::isoSubspaceforHeap):
     111        (JSC::IsoSubspacePerVM::clientIsoSubspaceforVM):
     112        (JSC::IsoSubspacePerVM::releaseIsoSubspace):
     113        (JSC::IsoSubspacePerVM::releaseClientIsoSubspace):
     114        (): Deleted.
     115        (JSC::IsoSubspacePerVM::forVM): Deleted.
     116        * heap/IsoSubspacePerVM.h:
     117        * heap/LocalAllocator.cpp:
     118        (JSC::LocalAllocator::allocateSlowCase):
     119        (JSC::LocalAllocator::tryAllocateWithoutCollecting):
     120        (JSC::LocalAllocator::doTestCollectionsIfNeeded):
     121        * heap/LocalAllocator.h:
     122        (JSC::LocalAllocator::directory const):
     123        * heap/MarkedBlock.cpp:
     124        (JSC::MarkedBlock::Handle::stopAllocating):
     125        * heap/MutatorState.h:
     126        * inspector/JSInjectedScriptHost.h:
     127        * inspector/JSInjectedScriptHostPrototype.h:
     128        * inspector/JSJavaScriptCallFrame.h:
     129        * inspector/JSJavaScriptCallFramePrototype.h:
     130        * runtime/AggregateErrorPrototype.h:
     131        * runtime/ArrayIteratorPrototype.h:
     132        * runtime/AsyncFromSyncIteratorPrototype.h:
     133        * runtime/AsyncFunctionPrototype.h:
     134        * runtime/AsyncGeneratorFunctionPrototype.h:
     135        * runtime/AsyncGeneratorPrototype.h:
     136        * runtime/AsyncIteratorPrototype.h:
     137        * runtime/AtomicsObject.h:
     138        * runtime/BigIntObject.h:
     139        * runtime/BigIntPrototype.h:
     140        * runtime/BooleanObject.h:
     141        (JSC::BooleanObject::subspaceFor):
     142        * runtime/BrandedStructure.h:
     143        * runtime/ClonedArguments.h:
     144        * runtime/ConsoleObject.h:
     145        * runtime/CustomGetterSetter.h:
     146        (JSC::CustomGetterSetter::subspaceFor):
     147        * runtime/DOMAttributeGetterSetter.h:
     148        * runtime/DateInstance.h:
     149        * runtime/DatePrototype.h:
     150        * runtime/ErrorInstance.h:
     151        (JSC::ErrorInstance::subspaceFor):
     152        * runtime/ErrorPrototype.h:
     153        * runtime/EvalExecutable.h:
     154        (JSC::EvalExecutable::subspaceFor):
     155        * runtime/Exception.h:
     156        * runtime/FinalizationRegistryPrototype.h:
     157        * runtime/FunctionExecutable.h:
     158        * runtime/FunctionRareData.h:
     159        * runtime/GeneratorFunctionPrototype.h:
     160        * runtime/GeneratorPrototype.h:
     161        * runtime/GetterSetter.h:
     162        * runtime/HashMapImpl.h:
     163        * runtime/InternalFunction.h:
     164        (JSC::InternalFunction::subspaceFor):
     165        * runtime/IntlCollator.h:
     166        * runtime/IntlCollatorPrototype.h:
     167        * runtime/IntlDateTimeFormat.h:
     168        * runtime/IntlDateTimeFormatPrototype.h:
     169        * runtime/IntlDisplayNames.h:
     170        * runtime/IntlDisplayNamesPrototype.h:
     171        * runtime/IntlListFormat.h:
     172        * runtime/IntlListFormatPrototype.h:
     173        * runtime/IntlLocale.h:
     174        * runtime/IntlLocalePrototype.h:
     175        * runtime/IntlNumberFormat.h:
     176        * runtime/IntlNumberFormatPrototype.h:
     177        * runtime/IntlObject.h:
     178        * runtime/IntlPluralRules.h:
     179        * runtime/IntlPluralRulesPrototype.h:
     180        * runtime/IntlRelativeTimeFormat.h:
     181        * runtime/IntlRelativeTimeFormatPrototype.h:
     182        * runtime/IntlSegmentIterator.h:
     183        * runtime/IntlSegmentIteratorPrototype.h:
     184        * runtime/IntlSegmenter.h:
     185        * runtime/IntlSegmenterPrototype.h:
     186        * runtime/IntlSegments.h:
     187        * runtime/IntlSegmentsPrototype.h:
     188        * runtime/IteratorPrototype.h:
     189        * runtime/JSArray.h:
     190        (JSC::JSArray::subspaceFor):
     191        * runtime/JSArrayBuffer.h:
     192        * runtime/JSArrayBufferPrototype.h:
     193        * runtime/JSArrayIterator.h:
     194        * runtime/JSAsyncGenerator.h:
     195        * runtime/JSBigInt.h:
     196        * runtime/JSBoundFunction.h:
     197        * runtime/JSCallee.h:
     198        (JSC::JSCallee::subspaceFor):
     199        * runtime/JSCustomGetterFunction.h:
     200        * runtime/JSCustomSetterFunction.h:
     201        * runtime/JSDataView.h:
     202        * runtime/JSDataViewPrototype.h:
     203        * runtime/JSFinalizationRegistry.h:
     204        * runtime/JSFunction.h:
     205        (JSC::JSFunction::subspaceFor):
     206        * runtime/JSGenerator.h:
     207        * runtime/JSGenericTypedArrayView.h:
     208        * runtime/JSGenericTypedArrayViewPrototype.h:
     209        * runtime/JSGlobalLexicalEnvironment.h:
     210        * runtime/JSGlobalObject.h:
     211        (JSC::JSGlobalObject::subspaceFor):
     212        * runtime/JSMap.h:
     213        * runtime/JSMapIterator.h:
     214        * runtime/JSModuleLoader.h:
     215        * runtime/JSModuleNamespaceObject.h:
     216        * runtime/JSModuleRecord.h:
     217        * runtime/JSNativeStdFunction.h:
     218        * runtime/JSONObject.h:
     219        * runtime/JSPromise.h:
     220        (JSC::JSPromise::subspaceFor):
     221        * runtime/JSPromisePrototype.h:
     222        (JSC::JSPromisePrototype::subspaceFor):
     223        * runtime/JSPropertyNameEnumerator.h:
     224        * runtime/JSProxy.h:
     225        (JSC::JSProxy::subspaceFor):
     226        * runtime/JSRemoteFunction.h:
     227        * runtime/JSScriptFetchParameters.h:
     228        * runtime/JSScriptFetcher.h:
     229        * runtime/JSSet.h:
     230        * runtime/JSSetIterator.h:
     231        * runtime/JSSourceCode.h:
     232        * runtime/JSString.h:
     233        (JSC::JSString::subspaceFor):
     234        * runtime/JSStringIterator.h:
     235        * runtime/JSTemplateObjectDescriptor.h:
     236        * runtime/JSTypedArrayViewPrototype.h:
     237        * runtime/JSWeakObjectRef.h:
     238        * runtime/JSWithScope.h:
     239        * runtime/MapIteratorPrototype.h:
     240        * runtime/MapPrototype.h:
     241        * runtime/MathObject.h:
     242        * runtime/ModuleProgramExecutable.h:
     243        * runtime/NativeErrorPrototype.h:
     244        * runtime/NativeExecutable.h:
     245        * runtime/NumberObject.h:
     246        (JSC::NumberObject::subspaceFor):
     247        * runtime/ObjectPrototype.h:
     248        * runtime/OptionsList.h:
     249        * runtime/ProgramExecutable.h:
     250        * runtime/PropertyTable.h:
     251        * runtime/ProxyObject.h:
     252        * runtime/ProxyRevoke.h:
     253        * runtime/ReflectObject.h:
     254        * runtime/RegExp.h:
     255        * runtime/RegExpObject.h:
     256        * runtime/RegExpPrototype.h:
     257        * runtime/RegExpStringIteratorPrototype.h:
     258        * runtime/ScopedArguments.h:
     259        * runtime/ScopedArgumentsTable.h:
     260        * runtime/ScriptExecutable.cpp:
     261        (JSC::ScriptExecutable::clearCode):
     262        (JSC::ScriptExecutable::installCode):
     263        * runtime/SetIteratorPrototype.h:
     264        * runtime/SetPrototype.h:
     265        * runtime/ShadowRealmObject.h:
     266        * runtime/ShadowRealmPrototype.h:
     267        * runtime/SparseArrayValueMap.h:
     268        * runtime/StrictEvalActivation.h:
     269        * runtime/StringIteratorPrototype.h:
     270        * runtime/StringObject.h:
     271        (JSC::StringObject::subspaceFor):
     272        * runtime/Structure.h:
     273        (JSC::Structure::subspaceFor):
     274        * runtime/StructureChain.h:
     275        * runtime/StructureRareData.h:
     276        * runtime/Symbol.h:
     277        * runtime/SymbolObject.h:
     278        * runtime/SymbolPrototype.h:
     279        * runtime/SymbolTable.h:
     280        * runtime/TemporalCalendar.h:
     281        * runtime/TemporalCalendarPrototype.h:
     282        * runtime/TemporalDuration.h:
     283        * runtime/TemporalDurationPrototype.h:
     284        * runtime/TemporalInstant.h:
     285        * runtime/TemporalInstantPrototype.h:
     286        * runtime/TemporalNow.h:
     287        * runtime/TemporalObject.h:
     288        * runtime/TemporalPlainTime.h:
     289        * runtime/TemporalPlainTimePrototype.h:
     290        * runtime/TemporalTimeZone.h:
     291        * runtime/TemporalTimeZonePrototype.h:
     292        * runtime/VM.cpp:
     293        (JSC::VM::VM):
     294        * runtime/VM.h:
     295        (JSC::VM::codeBlockSpace):
     296        (JSC::VM::functionExecutableSpace):
     297        (JSC::VM::programExecutableSpace):
     298        (JSC::VM::unlinkedFunctionExecutableSpace):
     299        (JSC::VM::arraySpace): Deleted.
     300        (JSC::VM::bigIntSpace): Deleted.
     301        (JSC::VM::calleeSpace): Deleted.
     302        (JSC::VM::clonedArgumentsSpace): Deleted.
     303        (JSC::VM::customGetterSetterSpace): Deleted.
     304        (JSC::VM::dateInstanceSpace): Deleted.
     305        (JSC::VM::domAttributeGetterSetterSpace): Deleted.
     306        (JSC::VM::exceptionSpace): Deleted.
     307        (JSC::VM::executableToCodeBlockEdgeSpace): Deleted.
     308        (JSC::VM::functionSpace): Deleted.
     309        (JSC::VM::getterSetterSpace): Deleted.
     310        (JSC::VM::globalLexicalEnvironmentSpace): Deleted.
     311        (JSC::VM::internalFunctionSpace): Deleted.
     312        (JSC::VM::jsProxySpace): Deleted.
     313        (JSC::VM::nativeExecutableSpace): Deleted.
     314        (JSC::VM::numberObjectSpace): Deleted.
     315        (JSC::VM::plainObjectSpace): Deleted.
     316        (JSC::VM::promiseSpace): Deleted.
     317        (JSC::VM::propertyNameEnumeratorSpace): Deleted.
     318        (JSC::VM::propertyTableSpace): Deleted.
     319        (JSC::VM::regExpSpace): Deleted.
     320        (JSC::VM::regExpObjectSpace): Deleted.
     321        (JSC::VM::ropeStringSpace): Deleted.
     322        (JSC::VM::scopedArgumentsSpace): Deleted.
     323        (JSC::VM::sparseArrayValueMapSpace): Deleted.
     324        (JSC::VM::stringSpace): Deleted.
     325        (JSC::VM::stringObjectSpace): Deleted.
     326        (JSC::VM::structureChainSpace): Deleted.
     327        (JSC::VM::structureRareDataSpace): Deleted.
     328        (JSC::VM::structureSpace): Deleted.
     329        (JSC::VM::brandedStructureSpace): Deleted.
     330        (JSC::VM::symbolTableSpace): Deleted.
     331        * runtime/WeakMapImpl.h:
     332        (JSC::WeakMapImpl::subspaceFor):
     333        * runtime/WeakMapPrototype.h:
     334        * runtime/WeakObjectRefPrototype.h:
     335        * runtime/WeakSetPrototype.h:
     336        * wasm/js/JSToWasmICCallee.h:
     337        * wasm/js/JSWebAssembly.h:
     338        * wasm/js/JSWebAssemblyException.h:
     339        * wasm/js/JSWebAssemblyGlobal.h:
     340        * wasm/js/JSWebAssemblyInstance.h:
     341        * wasm/js/JSWebAssemblyMemory.h:
     342        * wasm/js/JSWebAssemblyModule.h:
     343        * wasm/js/JSWebAssemblyTable.h:
     344        * wasm/js/JSWebAssemblyTag.h:
     345        * wasm/js/WebAssemblyCompileErrorPrototype.h:
     346        * wasm/js/WebAssemblyExceptionPrototype.h:
     347        * wasm/js/WebAssemblyFunction.h:
     348        * wasm/js/WebAssemblyGlobalPrototype.h:
     349        * wasm/js/WebAssemblyInstancePrototype.h:
     350        * wasm/js/WebAssemblyLinkErrorPrototype.h:
     351        * wasm/js/WebAssemblyMemoryPrototype.h:
     352        * wasm/js/WebAssemblyModulePrototype.h:
     353        * wasm/js/WebAssemblyModuleRecord.h:
     354        * wasm/js/WebAssemblyRuntimeErrorPrototype.h:
     355        * wasm/js/WebAssemblyTablePrototype.h:
     356        * wasm/js/WebAssemblyTagPrototype.h:
     357        * wasm/js/WebAssemblyWrapperFunction.h:
     358
    13592022-02-18  Joseph Griego  <jgriego@igalia.com>
    2360
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp

    r288815 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
    44 *
     
    10771077    stronglyVisitWeakReferences(locker, visitor);
    10781078   
    1079     VM::SpaceAndSet::setFor(*subspace()).add(this);
     1079    Heap::SpaceAndSet::setFor(*subspace()).add(this);
    10801080}
    10811081
     
    16651665    updateActivity();
    16661666
    1667     VM::SpaceAndSet::setFor(*subspace()).remove(this);
     1667    Heap::SpaceAndSet::setFor(*subspace()).remove(this);
    16681668
    16691669    // In CodeBlock::shouldVisitStrongly() we may have decided to skip visiting this
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/EvalCodeBlock.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
    44 *
     
    4040
    4141    template<typename, SubspaceAccess>
    42     static IsoSubspace* subspaceFor(VM& vm)
     42    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4343    {
    44         return &vm.codeBlockSpace().space;
     44        return &vm.codeBlockSpace();
    4545    }
    4646
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/ExecutableToCodeBlockEdge.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2018-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4242
    4343    template<typename CellType, SubspaceAccess>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        return &vm.executableToCodeBlockEdgeSpace();
     
    9191
    9292} // namespace JSC
    93 
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/FunctionCodeBlock.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
    44 *
     
    4141
    4242    template<typename, SubspaceAccess>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    45         return &vm.codeBlockSpace().space;
     45        return &vm.codeBlockSpace();
    4646    }
    4747
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/ModuleProgramCodeBlock.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
    44 *
     
    4141
    4242    template<typename, SubspaceAccess>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    45         return &vm.codeBlockSpace().space;
     45        return &vm.codeBlockSpace();
    4646    }
    4747
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/ProgramCodeBlock.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
    44 *
     
    4141
    4242    template<typename, SubspaceAccess>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    45         return &vm.codeBlockSpace().space;
     45        return &vm.codeBlockSpace();
    4646    }
    4747
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/UnlinkedEvalCodeBlock.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess mode>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        return vm.unlinkedEvalCodeBlockSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionCodeBlock.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.unlinkedFunctionCodeBlockSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp

    r286347 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    252252        break;
    253253    }
    254     vm.unlinkedFunctionExecutableSpace().set.add(this);
     254    // FIXME GlobalGC: Need syncrhonization here for accessing the Heap server.
     255    vm.heap.unlinkedFunctionExecutableSpaceAndSet.set.add(this);
    255256    return result;
    256257}
     
    310311        clearIfDead(m_unlinkedCodeBlockForCall);
    311312        clearIfDead(m_unlinkedCodeBlockForConstruct);
    312         if (isCleared && !isStillValid)
    313             vm.unlinkedFunctionExecutableSpace().set.remove(this);
     313        if (isCleared && !isStillValid) {
     314            // FIXME GlobalGC: Need syncrhonization here for accessing the Heap server.
     315            vm.heap.unlinkedFunctionExecutableSpaceAndSet.set.remove(this);
     316        }
    314317    }
    315318}
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    6767
    6868    template<typename CellType, SubspaceAccess>
    69     static IsoSubspace* subspaceFor(VM& vm)
    70     {
    71         return &vm.unlinkedFunctionExecutableSpace().space;
     69    static GCClient::IsoSubspace* subspaceFor(VM& vm)
     70    {
     71        return &vm.unlinkedFunctionExecutableSpace();
    7272    }
    7373
     
    133133        m_unlinkedCodeBlockForCall.clear();
    134134        m_unlinkedCodeBlockForConstruct.clear();
    135         vm.unlinkedFunctionExecutableSpace().set.remove(this);
     135        // FIXME GlobalGC: Need syncrhonization here for accessing the Heap server.
     136        vm.heap.unlinkedFunctionExecutableSpaceAndSet.set.remove(this);
    136137    }
    137138
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/UnlinkedModuleProgramCodeBlock.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess mode>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        return vm.unlinkedModuleProgramCodeBlockSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/bytecode/UnlinkedProgramCodeBlock.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.unlinkedProgramCodeBlockSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/debugger/DebuggerScope.h

    r278589 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4040
    4141    template<typename CellType, SubspaceAccess mode>
    42     static IsoSubspace* subspaceFor(VM& vm)
     42    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4343    {
    4444        return vm.debuggerScopeSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/heap/Heap.cpp

    r289863 r290129  
    4949#include "IsoCellSetInlines.h"
    5050#include "IsoInlinedHeapCellTypeInlines.h"
     51#include "IsoSubspacePerVM.h"
    5152#include "JITStubRoutineSet.h"
    5253#include "JITWorklistInlines.h"
     
    264265    Heap& m_heap;
    265266};
     267
     268#define INIT_SERVER_ISO_SUBSPACE(name, heapCellType, type) \
     269    , name ISO_SUBSPACE_INIT(*this, heapCellType, type)
     270
     271#define INIT_SERVER_STRUCTURE_ISO_SUBSPACE(name, heapCellType, type) \
     272    , name("Isolated" #name "Space", *this, heapCellType, sizeof(type), type::numberOfLowerTierCells, makeUnique<StructureAlignedMemoryAllocator>("Structure"))
    266273
    267274Heap::Heap(VM& vm, HeapType heapType)
     
    360367    , variableSizedCellSpace("Variable Sized JSCell", *this, cellHeapCellType, fastMallocAllocator.get()) // Hash:0xbcd769cc
    361368    , destructibleObjectSpace("JSDestructibleObject", *this, destructibleObjectHeapCellType, fastMallocAllocator.get()) // Hash:0x4f5ed7a9
    362     , arraySpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSArray)
    363     , bigIntSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSBigInt)
    364     , calleeSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSCallee)
    365     , clonedArgumentsSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, ClonedArguments)
    366     , customGetterSetterSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, CustomGetterSetter)
    367     , dateInstanceSpace ISO_SUBSPACE_INIT(*this, dateInstanceHeapCellType, DateInstance)
    368     , domAttributeGetterSetterSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, DOMAttributeGetterSetter)
    369     , exceptionSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, Exception)
    370     , executableToCodeBlockEdgeSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, ExecutableToCodeBlockEdge) // Hash:0x7b730b20
    371     , functionSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSFunction) // Hash:0x800fca72
    372     , getterSetterSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, GetterSetter)
    373     , globalLexicalEnvironmentSpace ISO_SUBSPACE_INIT(*this, globalLexicalEnvironmentHeapCellType, JSGlobalLexicalEnvironment)
    374     , internalFunctionSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, InternalFunction) // Hash:0xf845c464
    375     , jsProxySpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSProxy)
    376     , nativeExecutableSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, NativeExecutable) // Hash:0x67567f95
    377     , numberObjectSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, NumberObject)
    378     , plainObjectSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSNonFinalObject) // Mainly used for prototypes.
    379     , promiseSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSPromise)
    380     , propertyNameEnumeratorSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, JSPropertyNameEnumerator)
    381     , propertyTableSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, PropertyTable) // Hash:0xc6bc9f12
    382     , regExpSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, RegExp)
    383     , regExpObjectSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, RegExpObject)
    384     , ropeStringSpace ISO_SUBSPACE_INIT(*this, stringHeapCellType, JSRopeString)
    385     , scopedArgumentsSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, ScopedArguments)
    386     , sparseArrayValueMapSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, SparseArrayValueMap)
    387     , stringSpace ISO_SUBSPACE_INIT(*this, stringHeapCellType, JSString) // Hash:0x90cf758f
    388     , stringObjectSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, StringObject)
    389     , structureChainSpace ISO_SUBSPACE_INIT(*this, cellHeapCellType, StructureChain)
    390     , structureRareDataSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, StructureRareData) // Hash:0xaca4e62d
    391     , structureSpace("IsolatedStructureSpace", *this, destructibleCellHeapCellType, sizeof(Structure), Structure::numberOfLowerTierCells, makeUnique<StructureAlignedMemoryAllocator>("Structure"))
    392     , brandedStructureSpace("IsolatedBrandedStructureSpace", *this, destructibleCellHeapCellType, sizeof(BrandedStructure), BrandedStructure::numberOfLowerTierCells, makeUnique<StructureAlignedMemoryAllocator>("Structure"))
    393     , symbolTableSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, SymbolTable) // Hash:0xc5215afd
     369    FOR_EACH_JSC_COMMON_ISO_SUBSPACE(INIT_SERVER_ISO_SUBSPACE)
     370    FOR_EACH_JSC_STRUCTURE_ISO_SUBSPACE(INIT_SERVER_STRUCTURE_ISO_SUBSPACE)
    394371    , executableToCodeBlockEdgesWithConstraints(executableToCodeBlockEdgeSpace)
    395372    , executableToCodeBlockEdgesWithFinalizers(executableToCodeBlockEdgeSpace)
    396     , codeBlockSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, CodeBlock) // Hash:0x77e66ec9
    397     , functionExecutableSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, FunctionExecutable) // Hash:0x5d158f3
    398     , programExecutableSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, ProgramExecutable) // Hash:0x527c77e7
    399     , unlinkedFunctionExecutableSpace ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, UnlinkedFunctionExecutable) // Hash:0xf6b828d9
     373    , codeBlockSpaceAndSet ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, CodeBlock) // Hash:0x77e66ec9
     374    , functionExecutableSpaceAndSet ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, FunctionExecutable) // Hash:0x5d158f3
     375    , programExecutableSpaceAndSet ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, ProgramExecutable) // Hash:0x527c77e7
     376    , unlinkedFunctionExecutableSpaceAndSet ISO_SUBSPACE_INIT(*this, destructibleCellHeapCellType, UnlinkedFunctionExecutable) // Hash:0xf6b828d9
    400377
    401378{
     
    434411}
    435412
     413#undef INIT_SERVER_ISO_SUBSPACE
     414#undef INIT_SERVER_STRUCTURE_ISO_SUBSPACE
     415
    436416Heap::~Heap()
    437417{
     
    448428    for (WeakBlock* block : m_logicallyEmptyWeakBlocks)
    449429        WeakBlock::destroy(*this, block);
     430
     431    for (auto* perVMIsoSubspace : perVMIsoSubspaces)
     432        perVMIsoSubspace->releaseIsoSubspace(*this);
    450433}
    451434
     
    692675    VM& vm = this->vm();
    693676    vm.builtinExecutables()->finalizeUnconditionally();
    694     finalizeMarkedUnconditionalFinalizers<FunctionExecutable>(functionExecutableSpace.space);
     677    finalizeMarkedUnconditionalFinalizers<FunctionExecutable>(functionExecutableSpaceAndSet.space);
    695678    finalizeMarkedUnconditionalFinalizers<SymbolTable>(symbolTableSpace);
    696679    finalizeMarkedUnconditionalFinalizers<ExecutableToCodeBlockEdge>(executableToCodeBlockEdgesWithFinalizers); // We run this before CodeBlock's unconditional finalizer since CodeBlock looks at the owner executable's installed CodeBlock in its finalizeUnconditionally.
     
    700683        });
    701684    finalizeMarkedUnconditionalFinalizers<StructureRareData>(structureRareDataSpace);
    702     finalizeMarkedUnconditionalFinalizers<UnlinkedFunctionExecutable>(unlinkedFunctionExecutableSpace.set);
     685    finalizeMarkedUnconditionalFinalizers<UnlinkedFunctionExecutable>(unlinkedFunctionExecutableSpaceAndSet.set);
    703686    if (m_weakSetSpace)
    704687        finalizeMarkedUnconditionalFinalizers<JSWeakSet>(*m_weakSetSpace);
     
    10581041
    10591042    HeapIterationScope heapIterationScope(*this);
    1060     unlinkedFunctionExecutableSpace.set.forEachLiveCell(
     1043    unlinkedFunctionExecutableSpaceAndSet.set.forEachLiveCell(
    10611044        [&] (HeapCell* cell, HeapCell::Kind) {
    10621045            UnlinkedFunctionExecutable* executable = static_cast<UnlinkedFunctionExecutable*>(cell);
     
    31733156}
    31743157
    3175 #define DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(name, heapCellType, type) \
     3158#define DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW(name, heapCellType, type) \
    31763159    IsoSubspace* Heap::name##Slow() \
    31773160    { \
     
    31833166    }
    31843167
    3185 
    3186 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(apiGlobalObjectSpace, apiGlobalObjectHeapCellType, JSAPIGlobalObject)
    3187 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(apiValueWrapperSpace, cellHeapCellType, JSAPIValueWrapper)
    3188 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(arrayBufferSpace, cellHeapCellType, JSArrayBuffer)
    3189 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(arrayIteratorSpace, cellHeapCellType, JSArrayIterator)
    3190 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(asyncGeneratorSpace, cellHeapCellType, JSAsyncGenerator)
    3191 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(bigInt64ArraySpace, cellHeapCellType, JSBigInt64Array)
    3192 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(bigIntObjectSpace, cellHeapCellType, BigIntObject)
    3193 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(bigUint64ArraySpace, cellHeapCellType, JSBigUint64Array)
    3194 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(booleanObjectSpace, cellHeapCellType, BooleanObject)
    3195 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(boundFunctionSpace, cellHeapCellType, JSBoundFunction) // Hash:0xd7916d41
    3196 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(callbackConstructorSpace, callbackConstructorHeapCellType, JSCallbackConstructor)
    3197 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(callbackGlobalObjectSpace, callbackGlobalObjectHeapCellType, JSCallbackObject<JSGlobalObject>)
    3198 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(callbackFunctionSpace, cellHeapCellType, JSCallbackFunction) // Hash:0xe7648ebc
    3199 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(callbackObjectSpace, callbackObjectHeapCellType, JSCallbackObject<JSNonFinalObject>)
    3200 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(customGetterFunctionSpace, customGetterFunctionHeapCellType, JSCustomGetterFunction)
    3201 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(customSetterFunctionSpace, customSetterFunctionHeapCellType, JSCustomSetterFunction)
    3202 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(dataViewSpace, cellHeapCellType, JSDataView)
    3203 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(debuggerScopeSpace, cellHeapCellType, DebuggerScope)
    3204 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(errorInstanceSpace, errorInstanceHeapCellType, ErrorInstance) // Hash:0x3f40d4a
    3205 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(float32ArraySpace, cellHeapCellType, JSFloat32Array)
    3206 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(float64ArraySpace, cellHeapCellType, JSFloat64Array)
    3207 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(functionRareDataSpace, destructibleCellHeapCellType, FunctionRareData)
    3208 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(generatorSpace, cellHeapCellType, JSGenerator)
    3209 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(globalObjectSpace, globalObjectHeapCellType, JSGlobalObject)
    3210 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(injectedScriptHostSpace, injectedScriptHostSpaceHeapCellType, Inspector::JSInjectedScriptHost)
    3211 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(int8ArraySpace, cellHeapCellType, JSInt8Array)
    3212 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(int16ArraySpace, cellHeapCellType, JSInt16Array)
    3213 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(int32ArraySpace, cellHeapCellType, JSInt32Array)
    3214 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(javaScriptCallFrameSpace, javaScriptCallFrameHeapCellType, Inspector::JSJavaScriptCallFrame)
    3215 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(jsModuleRecordSpace, jsModuleRecordHeapCellType, JSModuleRecord)
    3216 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(mapBucketSpace, cellHeapCellType, JSMap::BucketType)
    3217 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(mapIteratorSpace, cellHeapCellType, JSMapIterator)
    3218 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(mapSpace, cellHeapCellType, JSMap)
    3219 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(moduleNamespaceObjectSpace, moduleNamespaceObjectHeapCellType, JSModuleNamespaceObject)
    3220 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(nativeStdFunctionSpace, nativeStdFunctionHeapCellType, JSNativeStdFunction) // Hash:0x70ed61e4
    3221 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(proxyObjectSpace, cellHeapCellType, ProxyObject)
    3222 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(proxyRevokeSpace, cellHeapCellType, ProxyRevoke) // Hash:0xb506a939
    3223 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(remoteFunctionSpace, cellHeapCellType, JSRemoteFunction)
    3224 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(scopedArgumentsTableSpace, destructibleCellHeapCellType, ScopedArgumentsTable)
    3225 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(scriptFetchParametersSpace, destructibleCellHeapCellType, JSScriptFetchParameters)
    3226 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(scriptFetcherSpace, destructibleCellHeapCellType, JSScriptFetcher)
    3227 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(setBucketSpace, cellHeapCellType, JSSet::BucketType)
    3228 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(setIteratorSpace, cellHeapCellType, JSSetIterator)
    3229 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(setSpace, cellHeapCellType, JSSet)
    3230 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(shadowRealmSpace, cellHeapCellType, ShadowRealmObject)
    3231 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(strictEvalActivationSpace, cellHeapCellType, StrictEvalActivation)
    3232 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(stringIteratorSpace, cellHeapCellType, JSStringIterator)
    3233 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(sourceCodeSpace, destructibleCellHeapCellType, JSSourceCode)
    3234 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(symbolSpace, destructibleCellHeapCellType, Symbol)
    3235 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(symbolObjectSpace, cellHeapCellType, SymbolObject)
    3236 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(templateObjectDescriptorSpace, destructibleCellHeapCellType, JSTemplateObjectDescriptor)
    3237 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(temporalCalendarSpace, cellHeapCellType, TemporalCalendar)
    3238 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(temporalDurationSpace, cellHeapCellType, TemporalDuration)
    3239 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(temporalInstantSpace, cellHeapCellType, TemporalInstant)
    3240 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(temporalPlainTimeSpace, cellHeapCellType, TemporalPlainTime)
    3241 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(temporalTimeZoneSpace, cellHeapCellType, TemporalTimeZone)
    3242 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(uint8ArraySpace, cellHeapCellType, JSUint8Array)
    3243 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(uint8ClampedArraySpace, cellHeapCellType, JSUint8ClampedArray)
    3244 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(uint16ArraySpace, cellHeapCellType, JSUint16Array)
    3245 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(uint32ArraySpace, cellHeapCellType, JSUint32Array)
    3246 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(unlinkedEvalCodeBlockSpace, destructibleCellHeapCellType, UnlinkedEvalCodeBlock)
    3247 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(unlinkedFunctionCodeBlockSpace, destructibleCellHeapCellType, UnlinkedFunctionCodeBlock)
    3248 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(unlinkedModuleProgramCodeBlockSpace, destructibleCellHeapCellType, UnlinkedModuleProgramCodeBlock)
    3249 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(unlinkedProgramCodeBlockSpace, destructibleCellHeapCellType, UnlinkedProgramCodeBlock)
    3250 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(weakMapSpace, weakMapHeapCellType, JSWeakMap) // Hash:0x662b12a3
    3251 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(weakSetSpace, weakSetHeapCellType, JSWeakSet) // Hash:0x4c781b30
    3252 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(weakObjectRefSpace, cellHeapCellType, JSWeakObjectRef) // Hash:0x8ec68f1f
    3253 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(withScopeSpace, cellHeapCellType, JSWithScope)
    3254 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(finalizationRegistrySpace, finalizationRegistryCellType, JSFinalizationRegistry)
    3255 #if JSC_OBJC_API_ENABLED
    3256 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(apiWrapperObjectSpace, apiWrapperObjectHeapCellType, JSCallbackObject<JSAPIWrapperObject>)
    3257 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(objCCallbackFunctionSpace, objCCallbackFunctionHeapCellType, ObjCCallbackFunction) // Hash:0x10f610b8
    3258 #endif
    3259 #ifdef JSC_GLIB_API_ENABLED
    3260 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(apiWrapperObjectSpace, apiWrapperObjectHeapCellType, JSCallbackObject<JSAPIWrapperObject>)
    3261 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(jscCallbackFunctionSpace, jscCallbackFunctionHeapCellType, JSCCallbackFunction)
    3262 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(callbackAPIWrapperGlobalObjectSpace, callbackAPIWrapperGlobalObjectHeapCellType, JSCallbackObject<JSAPIWrapperGlobalObject>)
    3263 #endif
    3264 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlCollatorSpace, intlCollatorHeapCellType, IntlCollator)
    3265 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlDateTimeFormatSpace, intlDateTimeFormatHeapCellType, IntlDateTimeFormat)
    3266 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlDisplayNamesSpace, intlDisplayNamesHeapCellType, IntlDisplayNames)
    3267 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlListFormatSpace, intlListFormatHeapCellType, IntlListFormat)
    3268 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlLocaleSpace, intlLocaleHeapCellType, IntlLocale)
    3269 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlNumberFormatSpace, intlNumberFormatHeapCellType, IntlNumberFormat)
    3270 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlPluralRulesSpace, intlPluralRulesHeapCellType, IntlPluralRules)
    3271 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlRelativeTimeFormatSpace, intlRelativeTimeFormatHeapCellType, IntlRelativeTimeFormat)
    3272 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlSegmentIteratorSpace, intlSegmentIteratorHeapCellType, IntlSegmentIterator)
    3273 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlSegmenterSpace, intlSegmenterHeapCellType, IntlSegmenter)
    3274 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlSegmentsSpace, intlSegmentsHeapCellType, IntlSegments)
    3275 #if ENABLE(WEBASSEMBLY)
    3276 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(jsToWasmICCalleeSpace, cellHeapCellType, JSToWasmICCallee)
    3277 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyExceptionSpace, webAssemblyExceptionHeapCellType, JSWebAssemblyException)
    3278 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyFunctionSpace, webAssemblyFunctionHeapCellType, WebAssemblyFunction) // Hash:0x8b7c32db
    3279 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyGlobalSpace, webAssemblyGlobalHeapCellType, JSWebAssemblyGlobal)
    3280 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyInstanceSpace, webAssemblyInstanceHeapCellType, JSWebAssemblyInstance)
    3281 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyMemorySpace, webAssemblyMemoryHeapCellType, JSWebAssemblyMemory)
    3282 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyModuleSpace, webAssemblyModuleHeapCellType, JSWebAssemblyModule)
    3283 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyModuleRecordSpace, webAssemblyModuleRecordHeapCellType, WebAssemblyModuleRecord)
    3284 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyTableSpace, webAssemblyTableHeapCellType, JSWebAssemblyTable)
    3285 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyTagSpace, webAssemblyTagHeapCellType, JSWebAssemblyTag)
    3286 DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(webAssemblyWrapperFunctionSpace, cellHeapCellType, WebAssemblyWrapperFunction) // Hash:0xd4a5ff01
    3287 #endif
    3288 
    3289 #undef DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW
    3290 
    3291 #define DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER_SLOW(name, heapCellType, type) \
     3168FOR_EACH_JSC_DYNAMIC_ISO_SUBSPACE(DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW)
     3169
     3170#undef DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW
     3171
     3172#define DEFINE_DYNAMIC_SPACE_AND_SET_MEMBER_SLOW(name, heapCellType, type) \
    32923173    IsoSubspace* Heap::name##Slow() \
    32933174    { \
     
    32993180    }
    33003181
    3301 DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER_SLOW(evalExecutableSpace, destructibleCellHeapCellType, EvalExecutable) // Hash:0x958e3e9d
    3302 DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER_SLOW(moduleProgramExecutableSpace, destructibleCellHeapCellType, ModuleProgramExecutable) // Hash:0x6506fa3c
    3303 
    3304 #undef DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER_SLOW
     3182DEFINE_DYNAMIC_SPACE_AND_SET_MEMBER_SLOW(evalExecutableSpace, destructibleCellHeapCellType, EvalExecutable) // Hash:0x958e3e9d
     3183DEFINE_DYNAMIC_SPACE_AND_SET_MEMBER_SLOW(moduleProgramExecutableSpace, destructibleCellHeapCellType, ModuleProgramExecutable) // Hash:0x6506fa3c
     3184
     3185#undef DEFINE_DYNAMIC_SPACE_AND_SET_MEMBER_SLOW
     3186
     3187
     3188namespace GCClient {
     3189
     3190#define INIT_CLIENT_ISO_SUBSPACE_FROM_SPACE_AND_SET(subspace) subspace(heap.subspace##AndSet.space)
     3191
     3192#define INIT_CLIENT_ISO_SUBSPACE(name, heapCellType, type) \
     3193    , name(heap.name)
     3194
     3195Heap::Heap(JSC::Heap& heap)
     3196    : m_server(heap)
     3197    FOR_EACH_JSC_ISO_SUBSPACE(INIT_CLIENT_ISO_SUBSPACE)
     3198    , INIT_CLIENT_ISO_SUBSPACE_FROM_SPACE_AND_SET(codeBlockSpace)
     3199    , INIT_CLIENT_ISO_SUBSPACE_FROM_SPACE_AND_SET(functionExecutableSpace)
     3200    , INIT_CLIENT_ISO_SUBSPACE_FROM_SPACE_AND_SET(programExecutableSpace)
     3201    , INIT_CLIENT_ISO_SUBSPACE_FROM_SPACE_AND_SET(unlinkedFunctionExecutableSpace)
     3202{
     3203}
     3204
     3205Heap::~Heap()
     3206{
     3207    for (auto* perVMIsoSubspace : perVMIsoSubspaces)
     3208        perVMIsoSubspace->releaseClientIsoSubspace(vm());
     3209}
     3210
     3211#undef INIT_CLIENT_ISO_SUBSPACE
     3212#undef CLIENT_ISO_SUBSPACE_INIT_FROM_SPACE_AND_SET
     3213
     3214
     3215#define DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW_IMPL(name, heapCellType, type) \
     3216    IsoSubspace* Heap::name##Slow() \
     3217    { \
     3218        ASSERT(!m_##name); \
     3219        Locker locker { server().m_lock }; \
     3220        JSC::IsoSubspace& serverSpace = *server().name<SubspaceAccess::OnMainThread>(); \
     3221        auto space = makeUnique<IsoSubspace>(serverSpace); \
     3222        WTF::storeStoreFence(); \
     3223        m_##name = WTFMove(space); \
     3224        return m_##name.get(); \
     3225    }
     3226
     3227#define DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW(name) \
     3228    DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW_IMPL(name, unused, unused2) \
     3229
     3230FOR_EACH_JSC_DYNAMIC_ISO_SUBSPACE(DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW_IMPL)
     3231
     3232DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW(evalExecutableSpace)
     3233DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW(moduleProgramExecutableSpace)
     3234
     3235#undef DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW_IMPL
     3236#undef DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_SLOW
     3237
     3238} // namespace GCClient
    33053239
    33063240} // namespace JSC
  • TabularUnified trunk/Source/JavaScriptCore/heap/Heap.h

    r289863 r290129  
    7474class HeapVerifier;
    7575class IncrementalSweeper;
     76class IsoSubspacePerVM;
    7677class JITStubRoutine;
    7778class JITStubRoutineSet;
     
    107108}
    108109
     110namespace GCClient {
     111class Heap;
     112}
     113
     114#define FOR_EACH_JSC_COMMON_ISO_SUBSPACE(v) \
     115    v(arraySpace, cellHeapCellType, JSArray) \
     116    v(bigIntSpace, cellHeapCellType, JSBigInt) \
     117    v(calleeSpace, cellHeapCellType, JSCallee) \
     118    v(clonedArgumentsSpace, cellHeapCellType, ClonedArguments) \
     119    v(customGetterSetterSpace, cellHeapCellType, CustomGetterSetter) \
     120    v(dateInstanceSpace, dateInstanceHeapCellType, DateInstance) \
     121    v(domAttributeGetterSetterSpace, cellHeapCellType, DOMAttributeGetterSetter) \
     122    v(exceptionSpace, destructibleCellHeapCellType, Exception) \
     123    v(executableToCodeBlockEdgeSpace, cellHeapCellType, ExecutableToCodeBlockEdge) \
     124    v(functionSpace, cellHeapCellType, JSFunction) \
     125    v(getterSetterSpace, cellHeapCellType, GetterSetter) \
     126    v(globalLexicalEnvironmentSpace, globalLexicalEnvironmentHeapCellType, JSGlobalLexicalEnvironment) \
     127    v(internalFunctionSpace, cellHeapCellType, InternalFunction) \
     128    v(jsProxySpace, cellHeapCellType, JSProxy) \
     129    v(nativeExecutableSpace, destructibleCellHeapCellType, NativeExecutable) \
     130    v(numberObjectSpace, cellHeapCellType, NumberObject) \
     131    v(plainObjectSpace, cellHeapCellType, JSNonFinalObject) \
     132    v(promiseSpace, cellHeapCellType, JSPromise) \
     133    v(propertyNameEnumeratorSpace, cellHeapCellType, JSPropertyNameEnumerator) \
     134    v(propertyTableSpace, destructibleCellHeapCellType, PropertyTable) \
     135    v(regExpSpace, destructibleCellHeapCellType, RegExp) \
     136    v(regExpObjectSpace, cellHeapCellType, RegExpObject) \
     137    v(ropeStringSpace, stringHeapCellType, JSRopeString) \
     138    v(scopedArgumentsSpace, cellHeapCellType, ScopedArguments) \
     139    v(sparseArrayValueMapSpace, destructibleCellHeapCellType, SparseArrayValueMap) \
     140    v(stringSpace, stringHeapCellType, JSString) \
     141    v(stringObjectSpace, cellHeapCellType, StringObject) \
     142    v(structureChainSpace, cellHeapCellType, StructureChain) \
     143    v(structureRareDataSpace, destructibleCellHeapCellType, StructureRareData) \
     144    v(symbolTableSpace, destructibleCellHeapCellType, SymbolTable)
     145   
     146#define FOR_EACH_JSC_STRUCTURE_ISO_SUBSPACE(v) \
     147    v(structureSpace, destructibleCellHeapCellType, Structure) \
     148    v(brandedStructureSpace, destructibleCellHeapCellType, BrandedStructure) \
     149
     150#define FOR_EACH_JSC_ISO_SUBSPACE(v) \
     151    FOR_EACH_JSC_COMMON_ISO_SUBSPACE(v) \
     152    FOR_EACH_JSC_STRUCTURE_ISO_SUBSPACE(v)
     153
     154#if JSC_OBJC_API_ENABLED
     155#define FOR_EACH_JSC_OBJC_API_DYNAMIC_ISO_SUBSPACE(v) \
     156    v(apiWrapperObjectSpace, apiWrapperObjectHeapCellType, JSCallbackObject<JSAPIWrapperObject>) \
     157    v(objCCallbackFunctionSpace, objCCallbackFunctionHeapCellType, ObjCCallbackFunction)
     158#else
     159#define FOR_EACH_JSC_OBJC_API_DYNAMIC_ISO_SUBSPACE(v)
     160#endif
     161
     162#ifdef JSC_GLIB_API_ENABLED
     163#define FOR_EACH_JSC_GLIB_API_DYNAMIC_ISO_SUBSPACE(v) \
     164    v(apiWrapperObjectSpace, apiWrapperObjectHeapCellType, JSCallbackObject<JSAPIWrapperObject>) \
     165    v(jscCallbackFunctionSpace, jscCallbackFunctionHeapCellType, JSCCallbackFunction) \
     166    v(callbackAPIWrapperGlobalObjectSpace, callbackAPIWrapperGlobalObjectHeapCellType, JSCallbackObject<JSAPIWrapperGlobalObject>)
     167#else
     168#define FOR_EACH_JSC_GLIB_API_DYNAMIC_ISO_SUBSPACE(v)
     169#endif
     170
     171#if ENABLE(WEBASSEMBLY)
     172#define FOR_EACH_JSC_WEBASSEMBLY_DYNAMIC_ISO_SUBSPACE(v) \
     173    v(jsToWasmICCalleeSpace, cellHeapCellType, JSToWasmICCallee) \
     174    v(webAssemblyExceptionSpace, webAssemblyExceptionHeapCellType, JSWebAssemblyException) \
     175    v(webAssemblyFunctionSpace, webAssemblyFunctionHeapCellType, WebAssemblyFunction) \
     176    v(webAssemblyGlobalSpace, webAssemblyGlobalHeapCellType, JSWebAssemblyGlobal) \
     177    v(webAssemblyInstanceSpace, webAssemblyInstanceHeapCellType, JSWebAssemblyInstance) \
     178    v(webAssemblyMemorySpace, webAssemblyMemoryHeapCellType, JSWebAssemblyMemory) \
     179    v(webAssemblyModuleSpace, webAssemblyModuleHeapCellType, JSWebAssemblyModule) \
     180    v(webAssemblyModuleRecordSpace, webAssemblyModuleRecordHeapCellType, WebAssemblyModuleRecord) \
     181    v(webAssemblyTableSpace, webAssemblyTableHeapCellType, JSWebAssemblyTable) \
     182    v(webAssemblyTagSpace, webAssemblyTagHeapCellType, JSWebAssemblyTag) \
     183    v(webAssemblyWrapperFunctionSpace, cellHeapCellType, WebAssemblyWrapperFunction)
     184#else
     185#define FOR_EACH_JSC_WEBASSEMBLY_DYNAMIC_ISO_SUBSPACE(v)
     186#endif
     187
     188#define FOR_EACH_JSC_DYNAMIC_ISO_SUBSPACE(v) \
     189    FOR_EACH_JSC_OBJC_API_DYNAMIC_ISO_SUBSPACE(v) \
     190    FOR_EACH_JSC_GLIB_API_DYNAMIC_ISO_SUBSPACE(v) \
     191    \
     192    v(apiGlobalObjectSpace, apiGlobalObjectHeapCellType, JSAPIGlobalObject) \
     193    v(apiValueWrapperSpace, cellHeapCellType, JSAPIValueWrapper) \
     194    v(arrayBufferSpace, cellHeapCellType, JSArrayBuffer) \
     195    v(arrayIteratorSpace, cellHeapCellType, JSArrayIterator) \
     196    v(asyncGeneratorSpace, cellHeapCellType, JSAsyncGenerator) \
     197    v(bigInt64ArraySpace, cellHeapCellType, JSBigInt64Array) \
     198    v(bigIntObjectSpace, cellHeapCellType, BigIntObject) \
     199    v(bigUint64ArraySpace, cellHeapCellType, JSBigUint64Array) \
     200    v(booleanObjectSpace, cellHeapCellType, BooleanObject) \
     201    v(boundFunctionSpace, cellHeapCellType, JSBoundFunction) \
     202    v(callbackConstructorSpace, callbackConstructorHeapCellType, JSCallbackConstructor) \
     203    v(callbackGlobalObjectSpace, callbackGlobalObjectHeapCellType, JSCallbackObject<JSGlobalObject>) \
     204    v(callbackFunctionSpace, cellHeapCellType, JSCallbackFunction) \
     205    v(callbackObjectSpace, callbackObjectHeapCellType, JSCallbackObject<JSNonFinalObject>) \
     206    v(customGetterFunctionSpace, customGetterFunctionHeapCellType, JSCustomGetterFunction) \
     207    v(customSetterFunctionSpace, customSetterFunctionHeapCellType, JSCustomSetterFunction) \
     208    v(dataViewSpace, cellHeapCellType, JSDataView) \
     209    v(debuggerScopeSpace, cellHeapCellType, DebuggerScope) \
     210    v(errorInstanceSpace, errorInstanceHeapCellType, ErrorInstance) \
     211    v(finalizationRegistrySpace, finalizationRegistryCellType, JSFinalizationRegistry) \
     212    v(float32ArraySpace, cellHeapCellType, JSFloat32Array) \
     213    v(float64ArraySpace, cellHeapCellType, JSFloat64Array) \
     214    v(functionRareDataSpace, destructibleCellHeapCellType, FunctionRareData) \
     215    v(generatorSpace, cellHeapCellType, JSGenerator) \
     216    v(globalObjectSpace, globalObjectHeapCellType, JSGlobalObject) \
     217    v(injectedScriptHostSpace, injectedScriptHostSpaceHeapCellType, Inspector::JSInjectedScriptHost) \
     218    v(int8ArraySpace, cellHeapCellType, JSInt8Array) \
     219    v(int16ArraySpace, cellHeapCellType, JSInt16Array) \
     220    v(int32ArraySpace, cellHeapCellType, JSInt32Array) \
     221    v(intlCollatorSpace, intlCollatorHeapCellType, IntlCollator) \
     222    v(intlDateTimeFormatSpace, intlDateTimeFormatHeapCellType, IntlDateTimeFormat) \
     223    v(intlDisplayNamesSpace, intlDisplayNamesHeapCellType, IntlDisplayNames) \
     224    v(intlListFormatSpace, intlListFormatHeapCellType, IntlListFormat) \
     225    v(intlLocaleSpace, intlLocaleHeapCellType, IntlLocale) \
     226    v(intlNumberFormatSpace, intlNumberFormatHeapCellType, IntlNumberFormat) \
     227    v(intlPluralRulesSpace, intlPluralRulesHeapCellType, IntlPluralRules) \
     228    v(intlRelativeTimeFormatSpace, intlRelativeTimeFormatHeapCellType, IntlRelativeTimeFormat) \
     229    v(intlSegmentIteratorSpace, intlSegmentIteratorHeapCellType, IntlSegmentIterator) \
     230    v(intlSegmenterSpace, intlSegmenterHeapCellType, IntlSegmenter) \
     231    v(intlSegmentsSpace, intlSegmentsHeapCellType, IntlSegments) \
     232    v(javaScriptCallFrameSpace, javaScriptCallFrameHeapCellType, Inspector::JSJavaScriptCallFrame) \
     233    v(jsModuleRecordSpace, jsModuleRecordHeapCellType, JSModuleRecord) \
     234    v(mapBucketSpace, cellHeapCellType, JSMap::BucketType) \
     235    v(mapIteratorSpace, cellHeapCellType, JSMapIterator) \
     236    v(mapSpace, cellHeapCellType, JSMap) \
     237    v(moduleNamespaceObjectSpace, moduleNamespaceObjectHeapCellType, JSModuleNamespaceObject) \
     238    v(nativeStdFunctionSpace, nativeStdFunctionHeapCellType, JSNativeStdFunction) \
     239    v(proxyObjectSpace, cellHeapCellType, ProxyObject) \
     240    v(proxyRevokeSpace, cellHeapCellType, ProxyRevoke) \
     241    v(remoteFunctionSpace, cellHeapCellType, JSRemoteFunction) \
     242    v(scopedArgumentsTableSpace, destructibleCellHeapCellType, ScopedArgumentsTable) \
     243    v(scriptFetchParametersSpace, destructibleCellHeapCellType, JSScriptFetchParameters) \
     244    v(scriptFetcherSpace, destructibleCellHeapCellType, JSScriptFetcher) \
     245    v(setBucketSpace, cellHeapCellType, JSSet::BucketType) \
     246    v(setIteratorSpace, cellHeapCellType, JSSetIterator) \
     247    v(setSpace, cellHeapCellType, JSSet) \
     248    v(shadowRealmSpace, cellHeapCellType, ShadowRealmObject) \
     249    v(strictEvalActivationSpace, cellHeapCellType, StrictEvalActivation) \
     250    v(stringIteratorSpace, cellHeapCellType, JSStringIterator) \
     251    v(sourceCodeSpace, destructibleCellHeapCellType, JSSourceCode) \
     252    v(symbolSpace, destructibleCellHeapCellType, Symbol) \
     253    v(symbolObjectSpace, cellHeapCellType, SymbolObject) \
     254    v(templateObjectDescriptorSpace, destructibleCellHeapCellType, JSTemplateObjectDescriptor) \
     255    v(temporalCalendarSpace, cellHeapCellType, TemporalCalendar) \
     256    v(temporalDurationSpace, cellHeapCellType, TemporalDuration) \
     257    v(temporalInstantSpace, cellHeapCellType, TemporalInstant) \
     258    v(temporalPlainTimeSpace, cellHeapCellType, TemporalPlainTime) \
     259    v(temporalTimeZoneSpace, cellHeapCellType, TemporalTimeZone) \
     260    v(uint8ArraySpace, cellHeapCellType, JSUint8Array) \
     261    v(uint8ClampedArraySpace, cellHeapCellType, JSUint8ClampedArray) \
     262    v(uint16ArraySpace, cellHeapCellType, JSUint16Array) \
     263    v(uint32ArraySpace, cellHeapCellType, JSUint32Array) \
     264    v(unlinkedEvalCodeBlockSpace, destructibleCellHeapCellType, UnlinkedEvalCodeBlock) \
     265    v(unlinkedFunctionCodeBlockSpace, destructibleCellHeapCellType, UnlinkedFunctionCodeBlock) \
     266    v(unlinkedModuleProgramCodeBlockSpace, destructibleCellHeapCellType, UnlinkedModuleProgramCodeBlock) \
     267    v(unlinkedProgramCodeBlockSpace, destructibleCellHeapCellType, UnlinkedProgramCodeBlock) \
     268    v(weakObjectRefSpace, cellHeapCellType, JSWeakObjectRef) \
     269    v(weakMapSpace, weakMapHeapCellType, JSWeakMap) \
     270    v(weakSetSpace, weakSetHeapCellType, JSWeakSet) \
     271    v(withScopeSpace, cellHeapCellType, JSWithScope) \
     272    \
     273    FOR_EACH_JSC_WEBASSEMBLY_DYNAMIC_ISO_SUBSPACE(v)
     274
     275
    109276typedef HashCountedSet<JSCell*> ProtectCountSet;
    110277typedef HashCountedSet<const char*> TypeCountSet;
     
    407574    friend class HeapUtil;
    408575    friend class HeapVerifier;
     576    friend class IsoSubspacePerVM;
    409577    friend class JITStubRoutine;
    410578    friend class LLIntOffsetsExtractor;
     
    426594    friend class HeapThread;
    427595
     596    friend class GCClient::Heap;
     597
    428598    static constexpr size_t minExtraMemory = 256;
    429599   
     
    435605        void finalize(Handle<Unknown>, void* context) final;
    436606    };
     607
     608    Lock& lock() { return m_lock; }
    437609
    438610    JS_EXPORT_PRIVATE void reportExtraMemoryAllocatedSlowCase(size_t);
     
    576748    void verifyGC();
    577749
     750    Lock m_lock;
    578751    const HeapType m_heapType;
    579752    MutatorState m_mutatorState { MutatorState::Running };
     
    8361009    CompleteSubspace destructibleObjectSpace;
    8371010
    838     IsoSubspace arraySpace;
    839     IsoSubspace bigIntSpace;
    840     IsoSubspace calleeSpace;
    841     IsoSubspace clonedArgumentsSpace;
    842     IsoSubspace customGetterSetterSpace;
    843     IsoSubspace dateInstanceSpace;
    844     IsoSubspace domAttributeGetterSetterSpace;
    845     IsoSubspace exceptionSpace;
    846     IsoSubspace executableToCodeBlockEdgeSpace;
    847     IsoSubspace functionSpace;
    848     IsoSubspace getterSetterSpace;
    849     IsoSubspace globalLexicalEnvironmentSpace;
    850     IsoSubspace internalFunctionSpace;
    851     IsoSubspace jsProxySpace;
    852     IsoSubspace nativeExecutableSpace;
    853     IsoSubspace numberObjectSpace;
    854     IsoSubspace plainObjectSpace;
    855     IsoSubspace promiseSpace;
    856     IsoSubspace propertyNameEnumeratorSpace;
    857     IsoSubspace propertyTableSpace;
    858     IsoSubspace regExpSpace;
    859     IsoSubspace regExpObjectSpace;
    860     IsoSubspace ropeStringSpace;
    861     IsoSubspace scopedArgumentsSpace;
    862     IsoSubspace sparseArrayValueMapSpace;
    863     IsoSubspace stringSpace;
    864     IsoSubspace stringObjectSpace;
    865     IsoSubspace structureChainSpace;
    866     IsoSubspace structureRareDataSpace;
    867     IsoSubspace structureSpace;
    868     IsoSubspace brandedStructureSpace;
    869     IsoSubspace symbolTableSpace;
    870 
    871 #define DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(name) \
     1011#define DECLARE_ISO_SUBSPACE(name, heapCellType, type) \
     1012    IsoSubspace name;
     1013
     1014    FOR_EACH_JSC_ISO_SUBSPACE(DECLARE_ISO_SUBSPACE)
     1015#undef DECLARE_ISO_SUBSPACE
     1016
     1017#define DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER(name, heapCellType, type) \
    8721018    template<SubspaceAccess mode> \
    8731019    IsoSubspace* name() \
     
    8801026    std::unique_ptr<IsoSubspace> m_##name;
    8811027
    882 
    883 #if JSC_OBJC_API_ENABLED
    884     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiWrapperObjectSpace)
    885     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(objCCallbackFunctionSpace)
    886 #endif
    887 #ifdef JSC_GLIB_API_ENABLED
    888     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiWrapperObjectSpace)
    889     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jscCallbackFunctionSpace)
    890     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackAPIWrapperGlobalObjectSpace)
    891 #endif
    892     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiGlobalObjectSpace)
    893     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiValueWrapperSpace)
    894     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(arrayBufferSpace)
    895     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(arrayIteratorSpace)
    896     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(asyncGeneratorSpace)
    897     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigInt64ArraySpace)
    898     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigIntObjectSpace)
    899     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigUint64ArraySpace)
    900     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(booleanObjectSpace)
    901     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(boundFunctionSpace)
    902     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackConstructorSpace)
    903     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackGlobalObjectSpace)
    904     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackFunctionSpace)
    905     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackObjectSpace)
    906     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(customGetterFunctionSpace)
    907     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(customSetterFunctionSpace)
    908     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(dataViewSpace)
    909     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(debuggerScopeSpace)
    910     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(errorInstanceSpace)
    911     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(float32ArraySpace)
    912     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(float64ArraySpace)
    913     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(functionRareDataSpace)
    914     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(generatorSpace)
    915     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(globalObjectSpace)
    916     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(injectedScriptHostSpace)
    917     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int8ArraySpace)
    918     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int16ArraySpace)
    919     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int32ArraySpace)
    920     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(javaScriptCallFrameSpace)
    921     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jsModuleRecordSpace)
    922     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapBucketSpace)
    923     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapIteratorSpace)
    924     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapSpace)
    925     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(moduleNamespaceObjectSpace)
    926     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(nativeStdFunctionSpace)
    927     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(proxyObjectSpace)
    928     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(proxyRevokeSpace)
    929     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(remoteFunctionSpace)
    930     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scopedArgumentsTableSpace)
    931     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scriptFetchParametersSpace)
    932     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scriptFetcherSpace)
    933     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setBucketSpace)
    934     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setIteratorSpace)
    935     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setSpace)
    936     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(shadowRealmSpace);
    937     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(strictEvalActivationSpace)
    938     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(stringIteratorSpace)
    939     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(sourceCodeSpace)
    940     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(symbolSpace)
    941     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(symbolObjectSpace)
    942     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(templateObjectDescriptorSpace)
    943     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalCalendarSpace)
    944     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalDurationSpace)
    945     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalInstantSpace)
    946     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalPlainTimeSpace)
    947     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalTimeZoneSpace)
    948     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint8ArraySpace)
    949     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint8ClampedArraySpace)
    950     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint16ArraySpace)
    951     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint32ArraySpace)
    952     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedEvalCodeBlockSpace)
    953     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedFunctionCodeBlockSpace)
    954     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedModuleProgramCodeBlockSpace)
    955     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedProgramCodeBlockSpace)
    956     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(finalizationRegistrySpace)
    957     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakObjectRefSpace)
    958     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakSetSpace)
    959     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakMapSpace)
    960     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(withScopeSpace)
    961     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlCollatorSpace)
    962     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlDateTimeFormatSpace)
    963     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlDisplayNamesSpace)
    964     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlListFormatSpace)
    965     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlLocaleSpace)
    966     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlNumberFormatSpace)
    967     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlPluralRulesSpace)
    968     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlRelativeTimeFormatSpace)
    969     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmentIteratorSpace)
    970     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmenterSpace)
    971     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmentsSpace)
    972 #if ENABLE(WEBASSEMBLY)
    973     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jsToWasmICCalleeSpace)
    974     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyExceptionSpace)
    975     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyFunctionSpace)
    976     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyGlobalSpace)
    977     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyInstanceSpace)
    978     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyMemorySpace)
    979     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyModuleSpace)
    980     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyModuleRecordSpace)
    981     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyTableSpace)
    982     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyTagSpace)
    983     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyWrapperFunctionSpace)
    984 #endif
    985 
    986 #undef DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER
     1028    FOR_EACH_JSC_DYNAMIC_ISO_SUBSPACE(DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER)
     1029#undef DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER
    9871030   
    9881031    IsoCellSet executableToCodeBlockEdgesWithConstraints;
     
    10231066        }
    10241067    };
    1025    
    1026     SpaceAndSet codeBlockSpace;
     1068
     1069    SpaceAndSet codeBlockSpaceAndSet;
    10271070
    10281071    template<typename Func>
    10291072    void forEachCodeBlockSpace(const Func& func)
    10301073    {
    1031         func(codeBlockSpace);
     1074        func(codeBlockSpaceAndSet);
    10321075    }
    10331076
    10341077    DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER(evalExecutableSpace)
    10351078    DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER(moduleProgramExecutableSpace)
    1036     SpaceAndSet functionExecutableSpace;
    1037     SpaceAndSet programExecutableSpace;
     1079    SpaceAndSet functionExecutableSpaceAndSet;
     1080    SpaceAndSet programExecutableSpaceAndSet;
    10381081
    10391082    template<typename Func>
     
    10421085        if (m_evalExecutableSpace)
    10431086            func(*m_evalExecutableSpace);
    1044         func(functionExecutableSpace);
     1087        func(functionExecutableSpaceAndSet);
    10451088        if (m_moduleProgramExecutableSpace)
    10461089            func(*m_moduleProgramExecutableSpace);
    1047         func(programExecutableSpace);
     1090        func(programExecutableSpaceAndSet);
    10481091    }
    10491092
    1050     SpaceAndSet unlinkedFunctionExecutableSpace;
    1051 
     1093    SpaceAndSet unlinkedFunctionExecutableSpaceAndSet;
     1094
     1095    Vector<IsoSubspacePerVM*> perVMIsoSubspaces;
    10521096#undef DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER
    10531097};
    10541098
     1099namespace GCClient {
     1100
     1101class Heap {
     1102    WTF_MAKE_NONCOPYABLE(Heap);
     1103public:
     1104    Heap(JSC::Heap&);
     1105    ~Heap();
     1106
     1107    VM& vm() const;
     1108    JSC::Heap& server() { return m_server; }
     1109
     1110    // FIXME GlobalGC: need a GCClient::Heap::lastChanceToFinalize() and in there,
     1111    // relinquish memory from the IsoSubspace LocalAllocators back to the server.
     1112    // Currently, this is being handled by BlockDirectory::stopAllocatingForGood().
     1113
     1114private:
     1115    JSC::Heap& m_server;
     1116
     1117#define DECLARE_ISO_SUBSPACE(name, heapCellType, type) \
     1118    IsoSubspace name;
     1119
     1120    FOR_EACH_JSC_ISO_SUBSPACE(DECLARE_ISO_SUBSPACE)
     1121#undef DECLARE_ISO_SUBSPACE
     1122
     1123#define DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_IMPL(name, heapCellType, type) \
     1124    template<SubspaceAccess mode> \
     1125    IsoSubspace* name() \
     1126    { \
     1127        if (m_##name || mode == SubspaceAccess::Concurrently) \
     1128            return m_##name.get(); \
     1129        return name##Slow(); \
     1130    } \
     1131    JS_EXPORT_PRIVATE IsoSubspace* name##Slow(); \
     1132    std::unique_ptr<IsoSubspace> m_##name;
     1133
     1134#define DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER(name) \
     1135    DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_IMPL(name, unused, unused2)
     1136
     1137    FOR_EACH_JSC_DYNAMIC_ISO_SUBSPACE(DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_IMPL)
     1138
     1139    DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER(evalExecutableSpace)
     1140    DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER(moduleProgramExecutableSpace)
     1141
     1142#undef DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER_IMPL
     1143#undef DEFINE_DYNAMIC_ISO_SUBSPACE_MEMBER
     1144
     1145    IsoSubspace codeBlockSpace;
     1146    IsoSubspace functionExecutableSpace;
     1147    IsoSubspace programExecutableSpace;
     1148    IsoSubspace unlinkedFunctionExecutableSpace;
     1149
     1150    Vector<IsoSubspacePerVM*> perVMIsoSubspaces;
     1151
     1152    friend class JSC::VM;
     1153    friend class JSC::IsoSubspacePerVM;
     1154};
     1155
     1156} // namespace GCClient
     1157
    10551158} // namespace JSC
  • TabularUnified trunk/Source/JavaScriptCore/heap/HeapInlines.h

    r285687 r290129  
    11/*
    2  * Copyright (C) 2014-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    271271}
    272272
     273namespace GCClient {
     274
     275ALWAYS_INLINE VM& Heap::vm() const
     276{
     277    return *bitwise_cast<VM*>(bitwise_cast<uintptr_t>(this) - OBJECT_OFFSETOF(VM, clientHeap));
     278}
     279
     280} // namespace GCClient
     281
    273282} // namespace JSC
  • TabularUnified trunk/Source/JavaScriptCore/heap/IsoSubspace.cpp

    r288815 r290129  
    11/*
    2  * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737    : Subspace(name, heap)
    3838    , m_directory(WTF::roundUpToMultipleOf<MarkedBlock::atomSize>(size))
    39     , m_localAllocator(&m_directory)
    4039    , m_isoAlignedMemoryAllocator(allocator ? WTFMove(allocator) : makeUnique<IsoAlignedMemoryAllocator>(name))
    4140{
     
    120119}
    121120
     121namespace GCClient {
     122
     123IsoSubspace::IsoSubspace(JSC::IsoSubspace& server)
     124    : m_localAllocator(&server.m_directory)
     125{
     126}
     127
     128} // namespace GCClient
     129
    122130} // namespace JSC
    123131
  • TabularUnified trunk/Source/JavaScriptCore/heap/IsoSubspace.h

    r288815 r290129  
    11/*
    2  * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636class IsoCellSet;
    3737
     38namespace GCClient {
     39class IsoSubspace;
     40}
     41
    3842class IsoSubspace : public Subspace {
    3943public:
     
    4246
    4347    size_t cellSize() { return m_directory.cellSize(); }
    44 
    45     Allocator allocatorFor(size_t, AllocatorForMode);
    46 
    47     void* allocate(VM&, size_t, GCDeferralContext*, AllocationFailureMode);
    4848
    4949    void sweepLowerTierCell(PreciseAllocation*);
     
    5959private:
    6060    friend class IsoCellSet;
     61    friend class GCClient::IsoSubspace;
    6162   
    6263    void didResizeBits(unsigned newSize) override;
    6364    void didRemoveBlock(unsigned blockIndex) override;
    6465    void didBeginSweepingToFreeList(MarkedBlock::Handle*) override;
    65    
     66
    6667    BlockDirectory m_directory;
    67     LocalAllocator m_localAllocator;
    6868    std::unique_ptr<IsoMemoryAllocatorBase> m_isoAlignedMemoryAllocator;
    6969    SentinelLinkedList<PreciseAllocation, PackedRawSentinelNode<PreciseAllocation>> m_lowerTierFreeList;
    7070    SentinelLinkedList<IsoCellSet, PackedRawSentinelNode<IsoCellSet>> m_cellSets;
     71};
     72
     73
     74namespace GCClient {
     75
     76class IsoSubspace {
     77    WTF_MAKE_NONCOPYABLE(IsoSubspace);
     78    WTF_MAKE_FAST_ALLOCATED;
     79public:
     80    JS_EXPORT_PRIVATE IsoSubspace(JSC::IsoSubspace&);
     81    JS_EXPORT_PRIVATE ~IsoSubspace() = default;
     82
     83    size_t cellSize() { return m_localAllocator.cellSize(); }
     84
     85    Allocator allocatorFor(size_t, AllocatorForMode);
     86
     87    void* allocate(VM&, size_t, GCDeferralContext*, AllocationFailureMode);
     88
     89private:
     90    LocalAllocator m_localAllocator;
    7191};
    7292
     
    7696    return Allocator(&m_localAllocator);
    7797}
     98
     99} // namespace GCClient
    78100
    79101#define ISO_SUBSPACE_INIT(heap, heapCellType, type) ("Isolated " #type " Space", (heap), (heapCellType), sizeof(type), type::numberOfLowerTierCells)
  • TabularUnified trunk/Source/JavaScriptCore/heap/IsoSubspaceInlines.h

    r286572 r290129  
    11/*
    2  * Copyright (C) 2018-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2828namespace JSC {
    2929
     30namespace GCClient {
     31
    3032ALWAYS_INLINE void* IsoSubspace::allocate(VM& vm, size_t size, GCDeferralContext* deferralContext, AllocationFailureMode failureMode)
    3133{
     
    3537    return result;
    3638}
     39
     40} // namespace GCClient
    3741
    3842inline void IsoSubspace::clearIsoCellSetBit(PreciseAllocation* preciseAllocation)
  • TabularUnified trunk/Source/JavaScriptCore/heap/IsoSubspacePerVM.cpp

    r286042 r290129  
    11/*
    2  * Copyright (C) 2018-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3232namespace JSC {
    3333
    34 class IsoSubspacePerVM::AutoremovingIsoSubspace final : public IsoSubspace {
    35 public:
    36     AutoremovingIsoSubspace(IsoSubspacePerVM& perVM, CString name, Heap& heap, const HeapCellType& heapCellType, size_t size)
    37         : IsoSubspace(name, heap, heapCellType, size, /* numberOfLowerTierCells */ 0)
    38         , m_perVM(perVM)
    39     {
    40     }
    41    
    42     ~AutoremovingIsoSubspace() final
    43     {
    44         Locker locker { m_perVM.m_lock };
    45         m_perVM.m_subspacePerVM.remove(&space().heap().vm());
    46     }
    47 
    48 private:
    49     IsoSubspacePerVM& m_perVM;
    50 };
    51 
    52 IsoSubspacePerVM::IsoSubspacePerVM(Function<SubspaceParameters(VM&)> subspaceParameters)
     34IsoSubspacePerVM::IsoSubspacePerVM(Function<SubspaceParameters(Heap&)> subspaceParameters)
    5335    : m_subspaceParameters(WTFMove(subspaceParameters))
    5436{
     
    6042}
    6143
    62 IsoSubspace& IsoSubspacePerVM::forVM(VM& vm)
     44IsoSubspace& IsoSubspacePerVM::isoSubspaceforHeap(LockHolder&, Heap& heap)
    6345{
    64     Locker locker { m_lock };
    65     auto result = m_subspacePerVM.add(&vm, nullptr);
     46    auto result = m_subspacePerHeap.add(&heap, nullptr);
    6647    if (result.isNewEntry) {
    67         SubspaceParameters params = m_subspaceParameters(vm);
    68         result.iterator->value = new AutoremovingIsoSubspace(*this, params.name, vm.heap, *params.heapCellType, params.size);
     48        SubspaceParameters params = m_subspaceParameters(heap);
     49        result.iterator->value = new IsoSubspace(params.name, heap, *params.heapCellType, params.size, 0);
     50
     51        Locker locker { heap.lock() };
     52        heap.perVMIsoSubspaces.append(this);
    6953    }
    7054    return *result.iterator->value;
    7155}
    7256
     57GCClient::IsoSubspace& IsoSubspacePerVM::clientIsoSubspaceforVM(VM& vm)
     58{
     59    Locker locker { m_lock };
     60    auto result = m_clientSubspacePerVM.add(&vm, nullptr);
     61    if (!result.isNewEntry && result.iterator->value)
     62        return *result.iterator->value;
     63
     64    IsoSubspace& subspace = isoSubspaceforHeap(locker, vm.heap);
     65
     66    result.iterator->value = new GCClient::IsoSubspace(subspace);
     67    vm.clientHeap.perVMIsoSubspaces.append(this);
     68    return *result.iterator->value;
     69}
     70
     71void IsoSubspacePerVM::releaseIsoSubspace(Heap& heap)
     72{
     73    IsoSubspace* subspace;
     74    {
     75        Locker locker { m_lock };
     76        subspace = m_subspacePerHeap.take(&heap);
     77    }
     78    delete subspace;
     79}
     80
     81void IsoSubspacePerVM::releaseClientIsoSubspace(VM& vm)
     82{
     83    GCClient::IsoSubspace* clientSubspace;
     84    {
     85        Locker locker { m_lock };
     86        clientSubspace = m_clientSubspacePerVM.take(&vm);
     87    }
     88    delete clientSubspace;
     89}
     90
    7391} // namespace JSC
    7492
  • TabularUnified trunk/Source/JavaScriptCore/heap/IsoSubspacePerVM.h

    r286042 r290129  
    11/*
    2  * Copyright (C) 2018-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3333namespace JSC {
    3434
     35class Heap;
     36class VM;
     37
    3538// This is an appropriate way to stash IsoSubspaces for rarely-used classes or classes that are mostly
    3639// sure to be main-thread-only. But if a class typically gets instantiated from multiple threads at
    3740// once, then this is not great, because concurrent allocations will probably contend on this thing's
    3841// lock.
     42//
     43// Usage: A IsoSubspacePerVM instance is instantiated using NeverDestroyed i.e. each IsoSubspacePerVM
     44// instance is immortal for the life of the process. There is one IsoSubspace type per IsoSubspacePerVM.
     45// IsoSubspacePerVM itself is a factory for those IsoSubspaces per VM and per Heap. IsoSubspacePerVM
     46// also serves as the manager of the IsoSubspaces. Client VMs are responsible for calling
     47// releaseClientIsoSubspace() to release the IsoSubspace when the VM shuts down. Similarly, if the
     48// Heap is not an immortal singleton heap (when global GC is enabled), the per Heap IsoSubspace also
     49// needs to be released when the Heap is destructed.
    3950class IsoSubspacePerVM final {
    4051public:
     
    5465    };
    5566   
    56     JS_EXPORT_PRIVATE IsoSubspacePerVM(Function<SubspaceParameters(VM&)>);
     67    JS_EXPORT_PRIVATE IsoSubspacePerVM(Function<SubspaceParameters(Heap&)>);
    5768    JS_EXPORT_PRIVATE ~IsoSubspacePerVM();
    5869   
    59     JS_EXPORT_PRIVATE IsoSubspace& forVM(VM&);
     70    JS_EXPORT_PRIVATE GCClient::IsoSubspace& clientIsoSubspaceforVM(VM&);
     71
     72    // FIXME: GlobalGC: this is only needed until we have a immortal singleton heap with GlobalGC.
     73    void releaseIsoSubspace(Heap&);
     74
     75    void releaseClientIsoSubspace(VM&);
    6076
    6177private:
    62     class AutoremovingIsoSubspace;
    63     friend class AutoremovingIsoSubspace;
     78    IsoSubspace& isoSubspaceforHeap(LockHolder&, Heap&);
    6479
    6580    Lock m_lock;
    66     HashMap<VM*, IsoSubspace*> m_subspacePerVM WTF_GUARDED_BY_LOCK(m_lock);
    67     Function<SubspaceParameters(VM&)> m_subspaceParameters;
     81
     82    HashMap<Heap*, IsoSubspace*> m_subspacePerHeap;
     83    HashMap<VM*, GCClient::IsoSubspace*> m_clientSubspacePerVM WTF_GUARDED_BY_LOCK(m_lock);
     84    Function<SubspaceParameters(Heap&)> m_subspaceParameters;
    6885};
    6986
  • TabularUnified trunk/Source/JavaScriptCore/heap/LocalAllocator.cpp

    r277909 r290129  
    135135        return result;
    136136
     137    // FIXME GlobalGC: Need to synchronize here to when allocating from the BlockDirectory in the server.
     138
    137139    Subspace* subspace = m_directory->m_subspace;
    138140    if (subspace->isIsoSubspace()) {
     
    165167void* LocalAllocator::tryAllocateWithoutCollecting()
    166168{
     169    // FIXME: GlobalGC
    167170    // FIXME: If we wanted this to be used for real multi-threaded allocations then we would have to
    168171    // come up with some concurrency protocol here. That protocol would need to be able to handle:
     
    250253void LocalAllocator::doTestCollectionsIfNeeded(Heap& heap, GCDeferralContext* deferralContext)
    251254{
    252     if (!Options::slowPathAllocsBetweenGCs())
     255    if (LIKELY(!Options::slowPathAllocsBetweenGCs()))
    253256        return;
    254257
  • TabularUnified trunk/Source/JavaScriptCore/heap/LocalAllocator.h

    r254023 r290129  
    11/*
    2  * Copyright (C) 2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4242public:
    4343    LocalAllocator(BlockDirectory*);
    44     ~LocalAllocator();
     44    JS_EXPORT_PRIVATE ~LocalAllocator();
    4545   
    4646    void* allocate(Heap&, GCDeferralContext*, AllocationFailureMode);
     
    5757   
    5858    bool isFreeListedCell(const void*) const;
    59    
     59
     60    BlockDirectory& directory() const { return *m_directory; }
     61
    6062private:
    6163    friend class BlockDirectory;
  • TabularUnified trunk/Source/JavaScriptCore/heap/MarkedBlock.cpp

    r277909 r290129  
    11/*
    2  * Copyright (C) 2011-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    148148    freeList.forEach(
    149149        [&] (HeapCell* cell) {
    150             if (MarkedBlockInternal::verbose)
     150            if constexpr (MarkedBlockInternal::verbose)
    151151                dataLog("Free cell: ", RawPointer(cell), "\n");
    152152            if (m_attributes.destruction == NeedsDestruction)
  • TabularUnified trunk/Source/JavaScriptCore/heap/MutatorState.h

    r212778 r290129  
    11/*
    2  * Copyright (C) 2016 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2828namespace JSC {
    2929
    30 enum class MutatorState {
     30enum class MutatorState : uint8_t {
    3131    // The mutator is running when it's not inside a Heap slow path.
    3232    Running,
  • TabularUnified trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, JSC::SubspaceAccess mode>
    41     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     41    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4242    {
    4343        return vm.injectedScriptHostSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHostPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, JSC::SubspaceAccess>
    40     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     40    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4141    {
    4242        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSInjectedScriptHostPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2014-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, JSC::SubspaceAccess mode>
    40     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     40    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4141    {
    4242        return vm.javaScriptCallFrameSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFramePrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2014-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, JSC::SubspaceAccess>
    40     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     40    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4141    {
    4242        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSJavaScriptCallFramePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/AggregateErrorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4242
    4343    template<typename CellType, SubspaceAccess>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(AggregateErrorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ArrayIteratorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(ArrayIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/AsyncFromSyncIteratorPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2017-2019 Oleksandr Skachkov <gskachkov@gmail.com>.
    3  * Copyright (C) 2021 Apple, Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple, Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(AsyncFromSyncIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/AsyncFunctionPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2016 Caitlin Potter <caitp@igalia.com>.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(AsyncFunctionPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/AsyncGeneratorFunctionPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2017-2019 Oleksandr Skachkov <gskachkov@gmail.com>.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(AsyncGeneratorFunctionPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/AsyncGeneratorPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2017 Oleksandr Skachkov <gskachkov@gmail.com>.
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(AsyncGeneratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/AsyncIteratorPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2017 Oleksandr Skachkov <gskachkov@gmail.com>.
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(AsyncIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/AtomicsObject.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(AtomicsObject, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/BigIntObject.h

    r275569 r290129  
    11/*
    22 * Copyright (C) 2017 Caio Lima <ticaiolima@gmail.com>.
    3  * Copyright (C) 2017-2020 Apple Inc. All rights reserved.
     3 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename, SubspaceAccess mode>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        return vm.bigIntObjectSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/BigIntPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2017 Caio Lima <ticaiolima@gmail.com>.
    3  * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(BigIntPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/BooleanObject.h

    r285730 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3434
    3535    template<typename, SubspaceAccess mode>
    36     static IsoSubspace* subspaceFor(VM& vm)
     36    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3737    {
    3838        return vm.booleanObjectSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/BrandedStructure.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2021 Igalia S.A. All rights reserved.
    44 *
     
    4646
    4747    template<typename CellType, SubspaceAccess>
    48     static IsoSubspace* subspaceFor(VM& vm)
     48    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4949    {
    5050        return &vm.brandedStructureSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ClonedArguments.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4444
    4545    template<typename CellType, SubspaceAccess mode>
    46     static IsoSubspace* subspaceFor(VM& vm)
     46    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4747    {
    4848        static_assert(!CellType::needsDestruction, "");
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ConsoleObject.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2014-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(ConsoleObject, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/CustomGetterSetter.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2014-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4242
    4343    template<typename CellType, SubspaceAccess>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        return &vm.customGetterSetterSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/DOMAttributeGetterSetter.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4242
    4343    template<typename CellType, SubspaceAccess>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        return &vm.domAttributeGetterSetterSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/DateInstance.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3636
    3737    template<typename CellType, SubspaceAccess mode>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        return &vm.dateInstanceSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/DatePrototype.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3333
    3434    template<typename CellType, SubspaceAccess>
    35     static IsoSubspace* subspaceFor(VM& vm)
     35    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3636    {
    3737        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(DatePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ErrorInstance.h

    r285730 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    4040
    4141    template<typename CellType, SubspaceAccess mode>
    42     static IsoSubspace* subspaceFor(VM& vm)
     42    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4343    {
    4444        return vm.errorInstanceSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ErrorPrototype.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    4343
    4444    template<typename CellType, SubspaceAccess>
    45     static IsoSubspace* subspaceFor(VM& vm)
     45    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4646    {
    4747        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(ErrorPrototypeBase, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/EvalExecutable.h

    r273931 r290129  
    11/*
    2  * Copyright (C) 2009-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2009-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5656
    5757    template<typename CellType, SubspaceAccess mode>
    58     static IsoSubspace* subspaceFor(VM& vm)
     58    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5959    {
    6060        return vm.evalExecutableSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/Exception.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess mode>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        return &vm.exceptionSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/FinalizationRegistryPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(FinalizationRegistryPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/FunctionExecutable.h

    r288815 r290129  
    11/*
    2  * Copyright (C) 2009-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2009-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545
    4646    template<typename CellType, SubspaceAccess>
    47     static IsoSubspace* subspaceFor(VM& vm)
    48     {
    49         return &vm.functionExecutableSpace().space;
     47    static GCClient::IsoSubspace* subspaceFor(VM& vm)
     48    {
     49        return &vm.functionExecutableSpace();
    5050    }
    5151
  • TabularUnified trunk/Source/JavaScriptCore/runtime/FunctionRareData.h

    r288815 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5757
    5858    template<typename CellType, SubspaceAccess mode>
    59     static IsoSubspace* subspaceFor(VM& vm)
     59    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6060    {
    6161        return vm.functionRareDataSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/GeneratorFunctionPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(GeneratorFunctionPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/GeneratorPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(GeneratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/GetterSetter.h

    r286347 r290129  
    22 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
    33 *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
    4  *  Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     4 *  Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    55 *
    66 *  This library is free software; you can redistribute it and/or
     
    5858
    5959    template<typename CellType, SubspaceAccess>
    60     static IsoSubspace* subspaceFor(VM& vm)
     60    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6161    {
    6262        return &vm.getterSetterSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/HashMapImpl.h

    r286572 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    7474
    7575    template<typename CellType, SubspaceAccess mode>
    76     static IsoSubspace* subspaceFor(VM& vm)
     76    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    7777    {
    7878        if constexpr (Type == HashTableType::Key)
  • TabularUnified trunk/Source/JavaScriptCore/runtime/InternalFunction.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    44 *  Copyright (C) 2007 Cameron Zwarich (cwzwarich@uwaterloo.ca)
    55 *  Copyright (C) 2007 Maks Orlovich
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        static_assert(sizeof(CellType) == sizeof(InternalFunction), "InternalFunction subclasses that add fields need to override subspaceFor<>()");
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlCollator.h

    r275410 r290129  
    11/*
    22 * Copyright (C) 2015 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2021 Apple Inc. All Rights Reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All Rights Reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4949
    5050    template<typename CellType, SubspaceAccess mode>
    51     static IsoSubspace* subspaceFor(VM& vm)
     51    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5252    {
    5353        return vm.intlCollatorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlCollatorPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2015 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlCollatorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlDateTimeFormat.h

    r285178 r290129  
    11/*
    22 * Copyright (C) 2015 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    6161
    6262    template<typename CellType, SubspaceAccess mode>
    63     static IsoSubspace* subspaceFor(VM& vm)
     63    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6464    {
    6565        return vm.intlDateTimeFormatSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlDateTimeFormatPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2015 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlDateTimeFormatPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlDisplayNames.h

    r283459 r290129  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4646
    4747    template<typename CellType, SubspaceAccess mode>
    48     static IsoSubspace* subspaceFor(VM& vm)
     48    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4949    {
    5050        return vm.intlDisplayNamesSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlDisplayNamesPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlDisplayNamesPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlListFormat.h

    r268956 r290129  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5757
    5858    template<typename CellType, SubspaceAccess mode>
    59     static IsoSubspace* subspaceFor(VM& vm)
     59    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6060    {
    6161        return vm.intlListFormatSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlListFormatPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlListFormatPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlLocale.h

    r281374 r290129  
    11/*
    22 * Copyright (C) 2020 Sony Interactive Entertainment Inc.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4343
    4444    template<typename CellType, SubspaceAccess mode>
    45     static IsoSubspace* subspaceFor(VM& vm)
     45    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4646    {
    4747        return vm.intlLocaleSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlLocalePrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2020 Sony Interactive Entertainment Inc.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlLocalePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlNumberFormat.h

    r286255 r290129  
    22 * Copyright (C) 2015 Andy VanWagoner (andy@vanwagoner.family)
    33 * Copyright (C) 2020 Sony Interactive Entertainment Inc.
    4  * Copyright (C) 2021 Apple Inc. All rights reserved.
     4 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    55 *
    66 * Redistribution and use in source and binary forms, with or without
     
    165165
    166166    template<typename CellType, SubspaceAccess mode>
    167     static IsoSubspace* subspaceFor(VM& vm)
     167    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    168168    {
    169169        return vm.intlNumberFormatSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlNumberFormatPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2015 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlNumberFormatPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlObject.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2015 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 * Copyright (C) 2020 Sony Interactive Entertainment Inc.
    55 *
     
    7474
    7575    template<typename CellType, SubspaceAccess>
    76     static IsoSubspace* subspaceFor(VM& vm)
     76    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    7777    {
    7878        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlObject, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlPluralRules.h

    r285418 r290129  
    11/*
    22 * Copyright (C) 2018 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    5353
    5454    template<typename CellType, SubspaceAccess mode>
    55     static IsoSubspace* subspaceFor(VM& vm)
     55    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5656    {
    5757        return vm.intlPluralRulesSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlPluralRulesPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2018 Andy VanWagoner (andy@vanwagoner.family)
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlPluralRulesPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlRelativeTimeFormat.h

    r273138 r290129  
    11/*
    22 * Copyright (C) 2020 Sony Interactive Entertainment Inc.
    3  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4747
    4848    template<typename CellType, SubspaceAccess mode>
    49     static IsoSubspace* subspaceFor(VM& vm)
     49    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5050    {
    5151        return vm.intlRelativeTimeFormatSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlRelativeTimeFormatPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2020 Sony Interactive Entertainment Inc.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlRelativeTimeFormatPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlSegmentIterator.h

    r273138 r290129  
    11/*
    22 * Copyright (C) 2020 Apple Inc. All rights reserved.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4343
    4444    template<typename CellType, SubspaceAccess mode>
    45     static IsoSubspace* subspaceFor(VM& vm)
     45    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4646    {
    4747        return vm.intlSegmentIteratorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlSegmentIteratorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlSegmentIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlSegmenter.h

    r275920 r290129  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4646
    4747    template<typename CellType, SubspaceAccess mode>
    48     static IsoSubspace* subspaceFor(VM& vm)
     48    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4949    {
    5050        return vm.intlSegmenterSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlSegmenterPrototype.h

    r286347 r290129  
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlSegmenterPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlSegments.h

    r273138 r290129  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    43 *
    54 * Redistribution and use in source and binary forms, with or without
     
    4342
    4443    template<typename CellType, SubspaceAccess mode>
    45     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4645    {
    4746        return vm.intlSegmentsSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IntlSegmentsPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IntlSegmentsPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/IteratorPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(IteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSArray.h

    r287800 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    5050
    5151    template<typename CellType, SubspaceAccess>
    52     static IsoSubspace* subspaceFor(VM& vm)
     52    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5353    {
    5454        return &vm.arraySpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSArrayBuffer.h

    r269974 r290129  
    11/*
    2  * Copyright (C) 2013-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess mode>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        return vm.arrayBufferSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSArrayBufferPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSArrayIterator.h

    r273138 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4848   
    4949    template<typename CellType, SubspaceAccess mode>
    50     static IsoSubspace* subspaceFor(VM& vm)
     50    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5151    {
    5252        return vm.arrayIteratorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSAsyncGenerator.h

    r273225 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4343
    4444    template<typename CellType, SubspaceAccess mode>
    45     static IsoSubspace* subspaceFor(VM& vm)
     45    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4646    {
    4747        return vm.asyncGeneratorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSBigInt.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2017 Caio Lima <ticaiolima@gmail.com>
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    5555
    5656    template<typename CellType, SubspaceAccess>
    57     static IsoSubspace* subspaceFor(VM& vm)
     57    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5858    {
    5959        return &vm.bigIntSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSBoundFunction.h

    r283881 r290129  
    11/*
    2  * Copyright (C) 2011-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4444
    4545    template<typename CellType, SubspaceAccess mode>
    46     static IsoSubspace* subspaceFor(VM& vm)
     46    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4747    {
    4848        return vm.boundFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSCallee.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2014-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4949
    5050    template<typename CellType, SubspaceAccess>
    51     static IsoSubspace* subspaceFor(VM& vm)
     51    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5252    {
    5353        return &vm.calleeSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSCustomGetterFunction.h

    r278253 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.customGetterFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSCustomSetterFunction.h

    r275261 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.customSetterFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSDataView.h

    r284330 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.dataViewSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSDataViewPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSDataViewPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSFinalizationRegistry.h

    r287421 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545
    4646    template<typename CellType, SubspaceAccess mode>
    47     static IsoSubspace* subspaceFor(VM& vm)
     47    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4848    {
    4949        return vm.finalizationRegistrySpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSFunction.h

    r289417 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    44 *  Copyright (C) 2007 Cameron Zwarich (cwzwarich@uwaterloo.ca)
    55 *  Copyright (C) 2007 Maks Orlovich
     
    6565   
    6666    template<typename CellType, SubspaceAccess>
    67     static IsoSubspace* subspaceFor(VM& vm)
     67    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6868    {
    6969        return &vm.functionSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSGenerator.h

    r273225 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4242
    4343    template<typename CellType, SubspaceAccess mode>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        return vm.generatorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h

    r284330 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    261261
    262262    template<typename CellType, SubspaceAccess mode>
    263     static IsoSubspace* subspaceFor(VM& vm)
     263    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    264264    {
    265265        switch (Adaptor::typeValue) {
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSGenericTypedArrayViewPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSGlobalLexicalEnvironment.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess mode>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        return &vm.globalLexicalEnvironmentSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h

    r289417 r290129  
    11/*
    22 *  Copyright (C) 2007 Eric Seidel <eric@webkit.org>
    3  *  Copyright (C) 2007-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2007-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    630630    static constexpr bool needsDestruction = true;
    631631    template<typename CellType, SubspaceAccess mode>
    632     static IsoSubspace* subspaceFor(VM& vm)
     632    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    633633    {
    634634        return vm.globalObjectSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSMap.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.mapSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSMapIterator.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5959
    6060    template<typename CellType, SubspaceAccess mode>
    61     static IsoSubspace* subspaceFor(VM& vm)
     61    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6262    {
    6363        return vm.mapIteratorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSModuleLoader.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All Rights Reserved.
    33 * Copyright (C) 2016 Yusuke Suzuki <utatane.tea@gmail.com>.
    44 *
     
    4242
    4343    template<typename CellType, SubspaceAccess>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSModuleLoader, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.moduleNamespaceObjectSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSModuleRecord.h

    r273225 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4747
    4848    template<typename CellType, SubspaceAccess mode>
    49     static IsoSubspace* subspaceFor(VM& vm)
     49    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5050    {
    5151        return vm.jsModuleRecordSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSNativeStdFunction.h

    r273138 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4646
    4747    template<typename CellType, SubspaceAccess mode>
    48     static IsoSubspace* subspaceFor(VM& vm)
     48    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4949    {
    5050        return vm.nativeStdFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSONObject.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2009-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2009-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSONObject, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSPromise.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess mode>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        return &vm.promiseSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSPromisePrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSPromisePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.h

    r288815 r290129  
    11/*
    2  * Copyright (C) 2014-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5050
    5151    template<typename CellType, SubspaceAccess mode>
    52     static IsoSubspace* subspaceFor(VM& vm)
     52    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5353    {
    5454        return &vm.propertyNameEnumeratorSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSProxy.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2011-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        static_assert(sizeof(CellType) == sizeof(JSProxy));
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSRemoteFunction.h

    r289469 r290129  
    22 * Copyright (C) 2021 Igalia S.L.
    33 * Author: Caitlin Potter <caitp@igalia.com>
     4 * Copyright (C) 2022 Apple Inc. All Rights Reserved.
    45 *
    56 * Redistribution and use in source and binary forms, with or without
     
    4849
    4950    template<typename CellType, SubspaceAccess mode>
    50     static IsoSubspace* subspaceFor(VM& vm)
     51    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5152    {
    5253        return vm.remoteFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSScriptFetchParameters.h

    r285730 r290129  
    11/*
    22 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>
    3  * Copyright (C) 2018-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4444
    4545    template<typename CellType, SubspaceAccess mode>
    46     static IsoSubspace* subspaceFor(VM& vm)
     46    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4747    {
    4848        return vm.scriptFetchParametersSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSScriptFetcher.h

    r285730 r290129  
    11/*
    22 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>
    3  * Copyright (C) 2018-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4444
    4545    template<typename CellType, SubspaceAccess mode>
    46     static IsoSubspace* subspaceFor(VM& vm)
     46    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4747    {
    4848        return vm.scriptFetcherSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSSet.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.setSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSSetIterator.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5959
    6060    template<typename CellType, SubspaceAccess mode>
    61     static IsoSubspace* subspaceFor(VM& vm)
     61    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6262    {
    6363        return vm.setIteratorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSSourceCode.h

    r285730 r290129  
    11/*
    22 * Copyright (C) 2016 Yusuke Suzuki <utatane.tea@gmail.com>
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4343
    4444    template<typename CellType, SubspaceAccess mode>
    45     static IsoSubspace* subspaceFor(VM& vm)
     45    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4646    {
    4747        return vm.sourceCodeSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSString.h

    r289515 r290129  
    22 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
    33 *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
    4  *  Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     4 *  Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    55 *
    66 *  This library is free software; you can redistribute it and/or
     
    110110    // necessary if JSString didn't have a destructor.
    111111    template<typename, SubspaceAccess>
    112     static IsoSubspace* subspaceFor(VM& vm)
     112    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    113113    {
    114114        return &vm.stringSpace();
     
    273273public:
    274274    template<typename, SubspaceAccess>
    275     static IsoSubspace* subspaceFor(VM& vm)
     275    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    276276    {
    277277        return &vm.ropeStringSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSStringIterator.h

    r285730 r290129  
    11/*
    22 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4949
    5050    template<typename CellType, SubspaceAccess mode>
    51     static IsoSubspace* subspaceFor(VM& vm)
     51    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5252    {
    5353        return vm.stringIteratorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSTemplateObjectDescriptor.h

    r260415 r290129  
    11/*
    22 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    3  * Copyright (C) 2019 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3939    static constexpr bool needsDestruction = true;
    4040    template<typename CellType, SubspaceAccess mode>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        return vm.templateObjectDescriptorSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSTypedArrayViewPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTypedArrayViewPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSWeakObjectRef.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    6060
    6161    template<typename CellType, SubspaceAccess mode>
    62     static IsoSubspace* subspaceFor(VM& vm)
     62    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6363    {
    6464        return vm.weakObjectRefSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/JSWithScope.h

    r273138 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess mode>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        return vm.withScopeSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/MapIteratorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(MapIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/MapPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(MapPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/MathObject.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3030
    3131    template<typename CellType, SubspaceAccess>
    32     static IsoSubspace* subspaceFor(VM& vm)
     32    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3333    {
    3434        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(MathObject, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ModuleProgramExecutable.h

    r273931 r290129  
    11/*
    2  * Copyright (C) 2009-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2009-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.moduleProgramExecutableSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/NativeErrorPrototype.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3232    using Base = ErrorPrototypeBase;
    3333    template<typename CellType, SubspaceAccess>
    34     static IsoSubspace* subspaceFor(VM& vm)
     34    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3535    {
    3636        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(NativeErrorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/NativeExecutable.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2009-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2009-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4242   
    4343    template<typename CellType, SubspaceAccess>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        return &vm.nativeExecutableSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/NumberObject.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3434
    3535    template<typename, SubspaceAccess mode>
    36     static IsoSubspace* subspaceFor(VM& vm)
     36    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3737    {
    3838        return &vm.numberObjectSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ObjectPrototype.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3131
    3232    template<typename CellType, SubspaceAccess>
    33     static IsoSubspace* subspaceFor(VM& vm)
     33    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3434    {
    3535        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(ObjectPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/OptionsList.h

    r290119 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    356356    v(GCLogLevel, logGC, GCLogging::None, Normal, "debugging option to log GC activity (0 = None, 1 = Basic, 2 = Verbose)") \
    357357    v(Bool, useGC, true, Normal, nullptr) \
     358    v(Bool, useGlobalGC, false, Normal, nullptr) \
    358359    v(Bool, gcAtEnd, false, Normal, "If true, the jsc CLI will do a GC before exiting") \
    359360    v(Bool, forceGCSlowPaths, false, Normal, "If true, we will force all JIT fast allocations down their slow paths.") \
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ProgramExecutable.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2009-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2009-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4040
    4141    template<typename CellType, SubspaceAccess>
    42     static IsoSubspace* subspaceFor(VM& vm)
     42    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4343    {
    44         return &vm.programExecutableSpace().space;
     44        return &vm.programExecutableSpace();
    4545    }
    4646
  • TabularUnified trunk/Source/JavaScriptCore/runtime/PropertyTable.h

    r286816 r290129  
    11/*
    2  *  Copyright (C) 2004-2021 Apple Inc. All rights reserved.
     2 *  Copyright (C) 2004-2022 Apple Inc. All rights reserved.
    33 *
    44 *  This library is free software; you can redistribute it and/or
     
    128128
    129129    template<typename CellType, SubspaceAccess>
    130     static IsoSubspace* subspaceFor(VM& vm)
     130    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    131131    {
    132132        return &vm.propertyTableSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ProxyObject.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.proxyObjectSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ProxyRevoke.h

    r273138 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.proxyRevokeSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ReflectObject.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All Rights Reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All Rights Reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(ReflectObject, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/RegExp.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2007-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2007-2022 Apple Inc. All rights reserved.
    44 *  Copyright (C) 2009 Torch Mobile, Inc.
    55 *
     
    4848
    4949    template<typename CellType, SubspaceAccess mode>
    50     static IsoSubspace* subspaceFor(VM& vm)
     50    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5151    {
    5252        return &vm.regExpSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/RegExpObject.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2003-2021 Apple Inc. All Rights Reserved.
     3 *  Copyright (C) 2003-2022 Apple Inc. All Rights Reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3434
    3535    template<typename CellType, SubspaceAccess mode>
    36     static IsoSubspace* subspaceFor(VM& vm)
     36    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3737    {
    3838        static_assert(!CellType::needsDestruction, "");
  • TabularUnified trunk/Source/JavaScriptCore/runtime/RegExpPrototype.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2003-2021 Apple Inc. All Rights Reserved.
     3 *  Copyright (C) 2003-2022 Apple Inc. All Rights Reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3232
    3333    template<typename CellType, SubspaceAccess>
    34     static IsoSubspace* subspaceFor(VM& vm)
     34    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3535    {
    3636        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(RegExpPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/RegExpStringIteratorPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2019 Alexey Shvayka <shvaikalesh@gmail.com>.
    3  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(RegExpStringIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ScopedArguments.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545public:
    4646    template<typename CellType, SubspaceAccess>
    47     static IsoSubspace* subspaceFor(VM& vm)
     47    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4848    {
    4949        static_assert(!CellType::needsDestruction, "");
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ScopedArgumentsTable.h

    r259646 r290129  
    11/*
    2  * Copyright (C) 2015-2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4949
    5050    template<typename CellType, SubspaceAccess mode>
    51     static IsoSubspace* subspaceFor(VM& vm)
     51    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5252    {
    5353        return vm.scopedArgumentsTableSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp

    r285687 r290129  
    11/*
    2  * Copyright (C) 2009-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2009-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    109109    }
    110110
    111     ASSERT(&VM::SpaceAndSet::setFor(*subspace()) == &clearableCodeSet);
     111    ASSERT(&Heap::SpaceAndSet::setFor(*subspace()) == &clearableCodeSet);
    112112    clearableCodeSet.remove(this);
    113113}
     
    188188    }
    189189
    190     auto& clearableCodeSet = VM::SpaceAndSet::setFor(*subspace());
     190    auto& clearableCodeSet = Heap::SpaceAndSet::setFor(*subspace());
    191191    if (hasClearableCode(vm))
    192192        clearableCodeSet.add(this);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/SetIteratorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(SetIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/SetPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(SetPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ShadowRealmObject.h

    r288442 r290129  
    11/*
    22 * Copyright (C) 2021 Igalia S.L.
     3 * Copyright (C) 2022 Apple Inc. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    3738
    3839    template<typename CellType, SubspaceAccess mode>
    39     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4041    {
    4142        return vm.shadowRealmSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ShadowRealmPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2021 Igalia S.L.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(ShadowRealmPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/SparseArrayValueMap.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2011-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    109109
    110110    template<typename CellType, SubspaceAccess>
    111     static IsoSubspace* subspaceFor(VM& vm)
     111    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    112112    {
    113113        return &vm.sparseArrayValueMapSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/StrictEvalActivation.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2010-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2010-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess mode>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        return vm.strictEvalActivationSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/StringIteratorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple, Inc. All rights reserved.
    33 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    44 *
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(StringIteratorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/StringObject.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2007-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2007-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3232
    3333    template<typename, SubspaceAccess mode>
    34     static IsoSubspace* subspaceFor(VM& vm)
     34    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3535    {
    3636        return &vm.stringObjectSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/Structure.h

    r288815 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    128128   
    129129    template<typename CellType, SubspaceAccess>
    130     static IsoSubspace* subspaceFor(VM& vm)
     130    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    131131    {
    132132        return &vm.structureSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/StructureChain.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545
    4646    template<typename CellType, SubspaceAccess>
    47     static IsoSubspace* subspaceFor(VM& vm)
     47    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4848    {
    4949        return &vm.structureChainSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/StructureRareData.h

    r289020 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    6666
    6767    template<typename CellType, SubspaceAccess>
    68     static IsoSubspace* subspaceFor(VM& vm)
     68    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6969    {
    7070        return &vm.structureRareDataSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/Symbol.h

    r270298 r290129  
    11/*
    2  * Copyright (C) 2012-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2015-2016 Yusuke Suzuki <utatane.tea@gmail.com>.
    44 *
     
    4242
    4343    template<typename CellType, SubspaceAccess mode>
    44     static IsoSubspace* subspaceFor(VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4545    {
    4646        return vm.symbolSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/SymbolObject.h

    r285730 r290129  
    11/*
    22 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2007-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2007-2022 Apple Inc. All rights reserved.
    44 *  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    55 *
     
    3232
    3333    template<typename, SubspaceAccess mode>
    34     static IsoSubspace* subspaceFor(VM& vm)
     34    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3535    {
    3636        return vm.symbolObjectSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/SymbolPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2012-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2012-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
    44 *
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(SymbolPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/SymbolTable.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2007-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2007-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    455455
    456456    template<typename CellType, SubspaceAccess>
    457     static IsoSubspace* subspaceFor(VM& vm)
     457    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    458458    {
    459459        return &vm.symbolTableSpace();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalCalendar.h

    r281788 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess mode>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        return vm.temporalCalendarSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalCalendarPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(TemporalCalendarPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalDuration.h

    r285178 r290129  
    11/*
    22 * Copyright (C) 2021 Sony Interactive Entertainment Inc.
     3 * Copyright (C) 2022 Apple Inc. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    3536
    3637    template<typename CellType, SubspaceAccess mode>
    37     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3839    {
    3940        return vm.temporalDurationSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalDurationPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2021 Sony Interactive Entertainment Inc.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(TemporalDurationPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalInstant.h

    r285178 r290129  
    11/*
    22 * Copyright (C) 2021 Igalia S.L.
     3 * Copyright (C) 2022 Apple Inc. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    4041
    4142    template<typename CellType, SubspaceAccess mode>
    42     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4344    {
    4445        return vm.temporalInstantSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalInstantPrototype.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2021 Igalia S.L.
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(TemporalInstantPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalNow.h

    r286347 r290129  
    11/*
    22 *  Copyright (C) 2021 Igalia, S.L. All rights reserved.
    3  *  Copyright (C) 2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3131
    3232    template<typename CellType, SubspaceAccess>
    33     static IsoSubspace* subspaceFor(VM& vm)
     33    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3434    {
    3535        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(TemporalNow, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalObject.h

    r286347 r290129  
    22 *  Copyright (C) 2021 Igalia, S.L. All rights reserved.
    33 *  Copyright (C) 2021 Sony Interactive Entertainment Inc.
    4  *  Copyright (C) 2021 Apple Inc. All rights reserved.
     4 *  Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    55 *
    66 *  This library is free software; you can redistribute it and/or
     
    6363
    6464    template<typename CellType, SubspaceAccess>
    65     static IsoSubspace* subspaceFor(VM& vm)
     65    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6666    {
    6767        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(TemporalObject, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalPlainTime.h

    r282259 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename CellType, SubspaceAccess mode>
    39     static IsoSubspace* subspaceFor(VM& vm)
     39    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4040    {
    4141        return vm.temporalPlainTimeSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalPlainTimePrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(TemporalPlainTimePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalTimeZone.h

    r284213 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess mode>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        return vm.temporalTimeZoneSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/runtime/TemporalTimeZonePrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3636
    3737    template<typename CellType, SubspaceAccess>
    38     static IsoSubspace* subspaceFor(VM& vm)
     38    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3939    {
    4040        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(TemporalTimeZonePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/VM.cpp

    r289863 r290129  
    209209    , m_integrityRandom(*this)
    210210    , heap(*this, heapType)
     211    , clientHeap(heap)
    211212    , vmType(vmType)
    212213    , clientData(nullptr)
  • TabularUnified trunk/Source/JavaScriptCore/runtime/VM.h

    r289863 r290129  
    334334public:
    335335    Heap heap;
     336    GCClient::Heap clientHeap;
    336337
    337338    const HeapCellType& cellHeapCellType() { return heap.cellHeapCellType; }
     
    350351    ALWAYS_INLINE CompleteSubspace& destructibleObjectSpace() { return heap.destructibleObjectSpace; }
    351352
    352     ALWAYS_INLINE IsoSubspace& arraySpace() { return heap.arraySpace; }
    353     ALWAYS_INLINE IsoSubspace& bigIntSpace() { return heap.bigIntSpace; }
    354     ALWAYS_INLINE IsoSubspace& calleeSpace() { return heap.calleeSpace; }
    355     ALWAYS_INLINE IsoSubspace& clonedArgumentsSpace() { return heap.clonedArgumentsSpace; }
    356     ALWAYS_INLINE IsoSubspace& customGetterSetterSpace() { return heap.customGetterSetterSpace; }
    357     ALWAYS_INLINE IsoSubspace& dateInstanceSpace() { return heap.dateInstanceSpace; }
    358     ALWAYS_INLINE IsoSubspace& domAttributeGetterSetterSpace() { return heap.domAttributeGetterSetterSpace; }
    359     ALWAYS_INLINE IsoSubspace& exceptionSpace() { return heap.exceptionSpace; }
    360     ALWAYS_INLINE IsoSubspace& executableToCodeBlockEdgeSpace() { return heap.executableToCodeBlockEdgeSpace; }
    361     ALWAYS_INLINE IsoSubspace& functionSpace() { return heap.functionSpace; }
    362     ALWAYS_INLINE IsoSubspace& getterSetterSpace() { return heap.getterSetterSpace; }
    363     ALWAYS_INLINE IsoSubspace& globalLexicalEnvironmentSpace() { return heap.globalLexicalEnvironmentSpace; }
    364     ALWAYS_INLINE IsoSubspace& internalFunctionSpace() { return heap.internalFunctionSpace; }
    365     ALWAYS_INLINE IsoSubspace& jsProxySpace() { return heap.jsProxySpace; }
    366     ALWAYS_INLINE IsoSubspace& nativeExecutableSpace() { return heap.nativeExecutableSpace; }
    367     ALWAYS_INLINE IsoSubspace& numberObjectSpace() { return heap.numberObjectSpace; }
    368     ALWAYS_INLINE IsoSubspace& plainObjectSpace() { return heap.plainObjectSpace; }
    369     ALWAYS_INLINE IsoSubspace& promiseSpace() { return heap.promiseSpace; }
    370     ALWAYS_INLINE IsoSubspace& propertyNameEnumeratorSpace() { return heap.propertyNameEnumeratorSpace; }
    371     ALWAYS_INLINE IsoSubspace& propertyTableSpace() { return heap.propertyTableSpace; }
    372     ALWAYS_INLINE IsoSubspace& regExpSpace() { return heap.regExpSpace; }
    373     ALWAYS_INLINE IsoSubspace& regExpObjectSpace() { return heap.regExpObjectSpace; }
    374     ALWAYS_INLINE IsoSubspace& ropeStringSpace() { return heap.ropeStringSpace; }
    375     ALWAYS_INLINE IsoSubspace& scopedArgumentsSpace() { return heap.scopedArgumentsSpace; }
    376     ALWAYS_INLINE IsoSubspace& sparseArrayValueMapSpace() { return heap.sparseArrayValueMapSpace; }
    377     ALWAYS_INLINE IsoSubspace& stringSpace() { return heap.stringSpace; }
    378     ALWAYS_INLINE IsoSubspace& stringObjectSpace() { return heap.stringObjectSpace; }
    379     ALWAYS_INLINE IsoSubspace& structureChainSpace() { return heap.structureChainSpace; }
    380     ALWAYS_INLINE IsoSubspace& structureRareDataSpace() { return heap.structureRareDataSpace; }
    381     ALWAYS_INLINE IsoSubspace& structureSpace() { return heap.structureSpace; }
    382     ALWAYS_INLINE IsoSubspace& brandedStructureSpace() { return heap.brandedStructureSpace; }
    383     ALWAYS_INLINE IsoSubspace& symbolTableSpace() { return heap.symbolTableSpace; }
    384 
    385 #define DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(name) \
     353#define DEFINE_ISO_SUBSPACE_ACCESSOR(name, heapCellType, type) \
     354    ALWAYS_INLINE GCClient::IsoSubspace& name() { return clientHeap.name; }
     355
     356    FOR_EACH_JSC_ISO_SUBSPACE(DEFINE_ISO_SUBSPACE_ACCESSOR)
     357#undef DEFINE_ISO_SUBSPACE_ACCESSOR
     358
     359#define DEFINE_DYNAMIC_ISO_SUBSPACE_ACCESSOR_IMPL(name, heapCellType, type) \
    386360    template<SubspaceAccess mode> \
    387     ALWAYS_INLINE IsoSubspace* name() { return heap.name<mode>(); }
    388 
    389 #if JSC_OBJC_API_ENABLED
    390     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiWrapperObjectSpace)
    391     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(objCCallbackFunctionSpace)
    392 #endif
    393 #ifdef JSC_GLIB_API_ENABLED
    394     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiWrapperObjectSpace)
    395     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jscCallbackFunctionSpace)
    396     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackAPIWrapperGlobalObjectSpace)
    397 #endif
    398     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiGlobalObjectSpace)
    399     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(apiValueWrapperSpace)
    400     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(arrayBufferSpace)
    401     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(arrayIteratorSpace)
    402     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(asyncGeneratorSpace)
    403     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigInt64ArraySpace)
    404     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigIntObjectSpace)
    405     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(bigUint64ArraySpace)
    406     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(booleanObjectSpace)
    407     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(boundFunctionSpace)
    408     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackConstructorSpace)
    409     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackGlobalObjectSpace)
    410     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackFunctionSpace)
    411     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(callbackObjectSpace)
    412     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(customGetterFunctionSpace)
    413     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(customSetterFunctionSpace)
    414     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(dataViewSpace)
    415     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(debuggerScopeSpace)
    416     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(errorInstanceSpace)
    417     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(float32ArraySpace)
    418     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(float64ArraySpace)
    419     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(functionRareDataSpace)
    420     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(generatorSpace)
    421     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(globalObjectSpace)
    422     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(injectedScriptHostSpace)
    423     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int8ArraySpace)
    424     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int16ArraySpace)
    425     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(int32ArraySpace)
    426     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(javaScriptCallFrameSpace)
    427     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jsModuleRecordSpace)
    428     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapBucketSpace)
    429     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapIteratorSpace)
    430     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(mapSpace)
    431     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(moduleNamespaceObjectSpace)
    432     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(nativeStdFunctionSpace)
    433     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(proxyObjectSpace)
    434     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(proxyRevokeSpace)
    435     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(remoteFunctionSpace)
    436     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scopedArgumentsTableSpace)
    437     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scriptFetchParametersSpace)
    438     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(scriptFetcherSpace)
    439     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setBucketSpace)
    440     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setIteratorSpace)
    441     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(setSpace)
    442     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(shadowRealmSpace);
    443     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(strictEvalActivationSpace)
    444     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(stringIteratorSpace)
    445     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(sourceCodeSpace)
    446     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(symbolSpace)
    447     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(symbolObjectSpace)
    448     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(templateObjectDescriptorSpace)
    449     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalCalendarSpace)
    450     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalDurationSpace)
    451     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalInstantSpace)
    452     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalPlainTimeSpace)
    453     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(temporalTimeZoneSpace)
    454     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint8ArraySpace)
    455     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint8ClampedArraySpace)
    456     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint16ArraySpace)
    457     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(uint32ArraySpace)
    458     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedEvalCodeBlockSpace)
    459     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedFunctionCodeBlockSpace)
    460     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedModuleProgramCodeBlockSpace)
    461     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(unlinkedProgramCodeBlockSpace)
    462     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(finalizationRegistrySpace)
    463     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakObjectRefSpace)
    464     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakSetSpace)
    465     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(weakMapSpace)
    466     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(withScopeSpace)
    467     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlCollatorSpace)
    468     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlDateTimeFormatSpace)
    469     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlDisplayNamesSpace)
    470     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlListFormatSpace)
    471     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlLocaleSpace)
    472     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlNumberFormatSpace)
    473     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlPluralRulesSpace)
    474     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlRelativeTimeFormatSpace)
    475     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmentIteratorSpace)
    476     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmenterSpace)
    477     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(intlSegmentsSpace)
    478 #if ENABLE(WEBASSEMBLY)
    479     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(jsToWasmICCalleeSpace)
    480     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyExceptionSpace)
    481     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyFunctionSpace)
    482     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyGlobalSpace)
    483     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyInstanceSpace)
    484     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyMemorySpace)
    485     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyModuleSpace)
    486     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyModuleRecordSpace)
    487     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyTableSpace)
    488     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyTagSpace)
    489     DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER(webAssemblyWrapperFunctionSpace)
    490 #endif
    491 
    492 #undef DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER
     361    ALWAYS_INLINE GCClient::IsoSubspace* name() { return clientHeap.name<mode>(); }
     362
     363#define DEFINE_DYNAMIC_ISO_SUBSPACE_ACCESSOR(name) \
     364    DEFINE_DYNAMIC_ISO_SUBSPACE_ACCESSOR_IMPL(name, unused, unused2)
     365
     366    FOR_EACH_JSC_DYNAMIC_ISO_SUBSPACE(DEFINE_DYNAMIC_ISO_SUBSPACE_ACCESSOR_IMPL)
    493367
    494368    ALWAYS_INLINE IsoCellSet& executableToCodeBlockEdgesWithConstraints() { return heap.executableToCodeBlockEdgesWithConstraints; }
    495369    ALWAYS_INLINE IsoCellSet& executableToCodeBlockEdgesWithFinalizers() { return heap.executableToCodeBlockEdgesWithFinalizers; }
    496370
    497 #define DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER(name) \
    498     template<SubspaceAccess mode> \
    499     ALWAYS_INLINE IsoSubspace* name() { return heap.name<mode>(); }
    500 
    501     using SpaceAndSet = Heap::SpaceAndSet;
    502     ALWAYS_INLINE SpaceAndSet& codeBlockSpace() { return heap.codeBlockSpace; }
    503 
    504     DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER(evalExecutableSpace)
    505     DYNAMIC_SPACE_AND_SET_DEFINE_MEMBER(moduleProgramExecutableSpace)
    506 
    507     ALWAYS_INLINE SpaceAndSet& functionExecutableSpace() { return heap.functionExecutableSpace; }
    508     ALWAYS_INLINE SpaceAndSet& programExecutableSpace() { return heap.programExecutableSpace; }
    509     ALWAYS_INLINE SpaceAndSet& unlinkedFunctionExecutableSpace() { return heap.unlinkedFunctionExecutableSpace; }
     371    ALWAYS_INLINE GCClient::IsoSubspace& codeBlockSpace() { return clientHeap.codeBlockSpace; }
     372
     373    DEFINE_DYNAMIC_ISO_SUBSPACE_ACCESSOR(evalExecutableSpace)
     374    DEFINE_DYNAMIC_ISO_SUBSPACE_ACCESSOR(moduleProgramExecutableSpace)
     375
     376#undef DEFINE_DYNAMIC_ISO_SUBSPACE_ACCESSOR_IMPL
     377#undef DEFINE_DYNAMIC_ISO_SUBSPACE_GETTER
     378
     379    ALWAYS_INLINE GCClient::IsoSubspace& functionExecutableSpace() { return clientHeap.functionExecutableSpace; }
     380    ALWAYS_INLINE GCClient::IsoSubspace& programExecutableSpace() { return clientHeap.programExecutableSpace; }
     381    ALWAYS_INLINE GCClient::IsoSubspace& unlinkedFunctionExecutableSpace() { return clientHeap.unlinkedFunctionExecutableSpace; }
    510382
    511383    VMType vmType;
  • TabularUnified trunk/Source/JavaScriptCore/runtime/WeakMapImpl.h

    r278338 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>.
    44 *
     
    283283
    284284    template<typename CellType, SubspaceAccess mode>
    285     static IsoSubspace* subspaceFor(VM& vm)
     285    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    286286    {
    287287        if constexpr (isWeakMap())
  • TabularUnified trunk/Source/JavaScriptCore/runtime/WeakMapPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2013-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2013-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WeakMapPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/WeakObjectRefPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3535
    3636    template<typename CellType, SubspaceAccess>
    37     static IsoSubspace* subspaceFor(VM& vm)
     37    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    3838    {
    3939        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WeakObjectRefPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/runtime/WeakSetPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2015-2021 Apple, Inc. All rights reserved.
     2 * Copyright (C) 2015-2022 Apple, Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WeakSetPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSToWasmICCallee.h

    r273138 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.jsToWasmICCalleeSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssembly.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSWebAssembly, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyException.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.webAssemblyExceptionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyGlobal.h

    r275438 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545
    4646    template<typename CellType, SubspaceAccess mode>
    47     static IsoSubspace* subspaceFor(VM& vm)
     47    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4848    {
    4949        return vm.webAssemblyGlobalSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h

    r288573 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5656
    5757    template<typename CellType, SubspaceAccess mode>
    58     static IsoSubspace* subspaceFor(VM& vm)
     58    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5959    {
    6060        return vm.webAssemblyInstanceSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.h

    r275438 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545
    4646    template<typename CellType, SubspaceAccess mode>
    47     static IsoSubspace* subspaceFor(VM& vm)
     47    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4848    {
    4949        return vm.webAssemblyMemorySpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h

    r288361 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5959
    6060    template<typename CellType, SubspaceAccess mode>
    61     static IsoSubspace* subspaceFor(VM& vm)
     61    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    6262    {
    6363        return vm.webAssemblyModuleSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.h

    r278253 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545
    4646    template<typename CellType, SubspaceAccess mode>
    47     static IsoSubspace* subspaceFor(VM& vm)
     47    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4848    {
    4949        return vm.webAssemblyTableSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyTag.h

    r285654 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4141
    4242    template<typename CellType, SubspaceAccess mode>
    43     static IsoSubspace* subspaceFor(VM& vm)
     43    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4444    {
    4545        return vm.webAssemblyTagSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyCompileErrorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyCompileErrorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyExceptionPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyExceptionPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyFunction.h

    r276896 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5151
    5252    template<typename CellType, SubspaceAccess mode>
    53     static IsoSubspace* subspaceFor(VM& vm)
     53    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5454    {
    5555        return vm.webAssemblyFunctionSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyGlobalPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2019-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyGlobalPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyInstancePrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyInstancePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyLinkErrorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyLinkErrorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyMemoryPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyModulePrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyModulePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.h

    r288573 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4949
    5050    template<typename CellType, SubspaceAccess mode>
    51     static IsoSubspace* subspaceFor(VM& vm)
     51    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    5252    {
    5353        return vm.webAssemblyModuleRecordSpace<mode>();
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyRuntimeErrorPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyRuntimeErrorPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyTablePrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyTablePrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyTagPrototype.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838
    3939    template<typename CellType, SubspaceAccess>
    40     static IsoSubspace* subspaceFor(VM& vm)
     40    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4141    {
    4242        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(WebAssemblyTagPrototype, Base);
  • TabularUnified trunk/Source/JavaScriptCore/wasm/js/WebAssemblyWrapperFunction.h

    r287582 r290129  
    11/*
    2  * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, SubspaceAccess mode>
    41     static IsoSubspace* subspaceFor(VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(VM& vm)
    4242    {
    4343        return vm.webAssemblyWrapperFunctionSpace<mode>();
  • TabularUnified trunk/Source/WebCore/CMakeLists.txt

    r290002 r290129  
    20882088set(SUPPLEMENTAL_DEPENDENCY_FILE ${WebCore_DERIVED_SOURCES_DIR}/supplemental_dependency.tmp)
    20892089set(ISO_SUBSPACES_HEADER_FILE ${WebCore_DERIVED_SOURCES_DIR}/DOMIsoSubspaces.h)
     2090set(CLIENT_ISO_SUBSPACES_HEADER_FILE ${WebCore_DERIVED_SOURCES_DIR}/DOMClientIsoSubspaces.h)
    20902091set(CONSTRUCTORS_HEADER_FILE ${WebCore_DERIVED_SOURCES_DIR}/DOMConstructors.h)
    20912092set(WINDOW_CONSTRUCTORS_FILE ${WebCore_DERIVED_SOURCES_DIR}/DOMWindowConstructors.idl)
     
    22762277    SUPPLEMENTAL_DEPFILE ${SUPPLEMENTAL_DEPENDENCY_FILE}
    22772278    PP_EXTRA_OUTPUT
    2278     ${ISO_SUBSPACES_HEADER_FILE} ${CONSTRUCTORS_HEADER_FILE} ${WINDOW_CONSTRUCTORS_FILE} ${WORKERGLOBALSCOPE_CONSTRUCTORS_FILE} ${SHADOWREALMGLOBALSCOPE_CONSTRUCTORS_FILE} ${DEDICATEDWORKERGLOBALSCOPE_CONSTRUCTORS_FILE}
     2279    ${ISO_SUBSPACES_HEADER_FILE} ${CLIENT_ISO_SUBSPACES_HEADER_FILE} ${CONSTRUCTORS_HEADER_FILE} ${WINDOW_CONSTRUCTORS_FILE} ${WORKERGLOBALSCOPE_CONSTRUCTORS_FILE} ${SHADOWREALMGLOBALSCOPE_CONSTRUCTORS_FILE} ${DEDICATEDWORKERGLOBALSCOPE_CONSTRUCTORS_FILE}
    22792280    PP_EXTRA_ARGS
    22802281        --isoSubspacesHeaderFile ${ISO_SUBSPACES_HEADER_FILE}
     2282        --clientISOSubspacesHeaderFile ${CLIENT_ISO_SUBSPACES_HEADER_FILE}
    22812283        --constructorsHeaderFile ${CONSTRUCTORS_HEADER_FILE}
    22822284        --windowConstructorsFile ${WINDOW_CONSTRUCTORS_FILE}
  • TabularUnified trunk/Source/WebCore/ChangeLog

    r290127 r290129  
     12022-02-18  Mark Lam  <mark.lam@apple.com>
     2
     3        Split IsoSubspace into a GCClient allocator used by VM and a backend managed by Heap.
     4        https://bugs.webkit.org/show_bug.cgi?id=233878
     5        rdar://problem/86108394
     6
     7        Reviewed by Yusuke Suzuki.
     8
     9        1. Make various classes client-server aware in terms of IsoSubspaces.
     10        2. Make CodeGeneratorJS.pm client-server aware in terms of IsoSubspaces.
     11        3. Rebase bindings test results.
     12
     13        * CMakeLists.txt:
     14        * DerivedSources-output.xcfilelist:
     15        * DerivedSources.make:
     16        * bindings/js/DOMGCOutputConstraint.cpp:
     17        (WebCore::DOMGCOutputConstraint::DOMGCOutputConstraint):
     18        (WebCore::DOMGCOutputConstraint::executeImplImpl):
     19        * bindings/js/DOMGCOutputConstraint.h:
     20        * bindings/js/JSDOMAsyncIterator.h:
     21        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
     22        (WebCore::JSDOMBuiltinConstructorBase::subspaceForImpl):
     23        * bindings/js/JSDOMBuiltinConstructorBase.h:
     24        (WebCore::JSDOMBuiltinConstructorBase::subspaceFor):
     25        * bindings/js/JSDOMConstructorBase.cpp:
     26        (WebCore::JSDOMConstructorBase::subspaceForImpl):
     27        * bindings/js/JSDOMConstructorBase.h:
     28        (WebCore::JSDOMConstructorBase::subspaceFor):
     29        * bindings/js/JSDOMConstructorNotCallable.h:
     30        (WebCore::JSDOMConstructorNotCallable::subspaceFor):
     31        * bindings/js/JSDOMIterator.h:
     32        * bindings/js/JSDOMWindowProperties.cpp:
     33        (WebCore::JSDOMWindowProperties::subspaceForImpl):
     34        * bindings/js/JSDOMWindowProperties.h:
     35        * bindings/js/JSFileSystemDirectoryHandleIterator.cpp:
     36        (WebCore::JSFileSystemDirectoryHandleIterator::subspaceForImpl):
     37        * bindings/js/JSFileSystemDirectoryHandleIterator.h:
     38        * bindings/js/JSIDBSerializationGlobalObject.cpp:
     39        (WebCore::JSIDBSerializationGlobalObject::subspaceForImpl):
     40        * bindings/js/JSIDBSerializationGlobalObject.h:
     41        * bindings/js/JSWindowProxy.cpp:
     42        (WebCore::JSWindowProxy::subspaceForImpl):
     43        * bindings/js/JSWindowProxy.h:
     44        * bindings/js/WebCoreJSClientData.cpp:
     45        (WebCore::JSHeapData::JSHeapData):
     46        (WebCore::JSHeapData::ensureHeapData):
     47        (WebCore::JSVMClientData::JSVMClientData):
     48        (WebCore::JSVMClientData::initNormalWorld):
     49        * bindings/js/WebCoreJSClientData.h:
     50        (WebCore::JSHeapData::lock):
     51        (WebCore::JSHeapData::subspaces):
     52        (WebCore::JSHeapData::fileSystemDirectoryHandleIteratorSpace):
     53        (WebCore::JSHeapData::setFileSystemDirectoryHandleIteratorSpace):
     54        (WebCore::JSVMClientData::normalWorld):
     55        (WebCore::JSVMClientData::rememberWorld):
     56        (WebCore::JSVMClientData::forgetWorld):
     57        (WebCore::JSVMClientData::heapData):
     58        (WebCore::JSVMClientData::builtinNames):
     59        (WebCore::JSVMClientData::builtinFunctions):
     60        (WebCore::JSVMClientData::domBuiltinConstructorSpace):
     61        (WebCore::JSVMClientData::domConstructorSpace):
     62        (WebCore::JSVMClientData::domNamespaceObjectSpace):
     63        (WebCore::JSVMClientData::domWindowPropertiesSpace):
     64        (WebCore::JSVMClientData::runtimeArraySpace):
     65        (WebCore::JSVMClientData::runtimeMethodSpace):
     66        (WebCore::JSVMClientData::runtimeObjectSpace):
     67        (WebCore::JSVMClientData::windowProxySpace):
     68        (WebCore::JSVMClientData::idbSerializationSpace):
     69        (WebCore::JSVMClientData::fileSystemDirectoryHandleIteratorSpace):
     70        (WebCore::JSVMClientData::setFileSystemDirectoryHandleIteratorSpace):
     71        (WebCore::JSVMClientData::clientSubspaces):
     72        (WebCore::JSVMClientData::forEachOutputConstraintSpace): Deleted.
     73        (WebCore::JSVMClientData::subspaces): Deleted.
     74        * bindings/scripts/CodeGeneratorJS.pm:
     75        (GenerateHeader):
     76        (GenerateImplementation):
     77        (GenerateIterableDefinition):
     78        (GeneratePrototypeDeclaration):
     79        * bindings/scripts/preprocess-idls.pl:
     80        * bindings/scripts/test/JS/JSDOMWindow.cpp:
     81        (WebCore::JSDOMWindow::subspaceForImpl):
     82        * bindings/scripts/test/JS/JSDOMWindow.h:
     83        (WebCore::JSDOMWindow::subspaceFor):
     84        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
     85        (WebCore::JSDedicatedWorkerGlobalScope::subspaceForImpl):
     86        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h:
     87        (WebCore::JSDedicatedWorkerGlobalScope::subspaceFor):
     88        * bindings/scripts/test/JS/JSExposedStar.cpp:
     89        (WebCore::JSExposedStarDOMConstructor::prototypeForStructure):
     90        (WebCore::JSExposedStar::subspaceForImpl):
     91        * bindings/scripts/test/JS/JSExposedStar.h:
     92        (WebCore::JSExposedStar::subspaceFor):
     93        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
     94        (WebCore::JSExposedToWorkerAndWindow::subspaceForImpl):
     95        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.h:
     96        (WebCore::JSExposedToWorkerAndWindow::subspaceFor):
     97        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
     98        (WebCore::JSPaintWorkletGlobalScope::subspaceForImpl):
     99        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h:
     100        (WebCore::JSPaintWorkletGlobalScope::subspaceFor):
     101        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
     102        (WebCore::JSServiceWorkerGlobalScope::subspaceForImpl):
     103        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h:
     104        (WebCore::JSServiceWorkerGlobalScope::subspaceFor):
     105        * bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp:
     106        (WebCore::JSShadowRealmGlobalScope::subspaceForImpl):
     107        * bindings/scripts/test/JS/JSShadowRealmGlobalScope.h:
     108        (WebCore::JSShadowRealmGlobalScope::subspaceFor):
     109        * bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp:
     110        (WebCore::JSSharedWorkerGlobalScope::subspaceForImpl):
     111        * bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h:
     112        (WebCore::JSSharedWorkerGlobalScope::subspaceFor):
     113        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
     114        (WebCore::JSTestCEReactionsDOMConstructor::prototypeForStructure):
     115        (WebCore::JSTestCEReactions::subspaceForImpl):
     116        * bindings/scripts/test/JS/JSTestCEReactions.h:
     117        (WebCore::JSTestCEReactions::subspaceFor):
     118        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
     119        (WebCore::JSTestCEReactionsStringifierDOMConstructor::prototypeForStructure):
     120        (WebCore::JSTestCEReactionsStringifier::subspaceForImpl):
     121        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:
     122        (WebCore::JSTestCEReactionsStringifier::subspaceFor):
     123        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
     124        (WebCore::JSTestCallTracerDOMConstructor::prototypeForStructure):
     125        (WebCore::JSTestCallTracer::subspaceForImpl):
     126        * bindings/scripts/test/JS/JSTestCallTracer.h:
     127        (WebCore::JSTestCallTracer::subspaceFor):
     128        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
     129        (WebCore::JSTestClassWithJSBuiltinConstructorDOMConstructor::prototypeForStructure):
     130        (WebCore::JSTestClassWithJSBuiltinConstructor::subspaceForImpl):
     131        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
     132        (WebCore::JSTestClassWithJSBuiltinConstructor::subspaceFor):
     133        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
     134        (WebCore::JSTestConditionalIncludesDOMConstructor::prototypeForStructure):
     135        (WebCore::JSTestConditionalIncludes::subspaceForImpl):
     136        * bindings/scripts/test/JS/JSTestConditionalIncludes.h:
     137        (WebCore::JSTestConditionalIncludes::subspaceFor):
     138        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
     139        (WebCore::JSTestConditionallyReadWriteDOMConstructor::prototypeForStructure):
     140        (WebCore::JSTestConditionallyReadWrite::subspaceForImpl):
     141        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.h:
     142        (WebCore::JSTestConditionallyReadWrite::subspaceFor):
     143        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
     144        (WebCore::JSTestDOMJITDOMConstructor::prototypeForStructure):
     145        (WebCore::JSTestDOMJIT::subspaceForImpl):
     146        * bindings/scripts/test/JS/JSTestDOMJIT.h:
     147        (WebCore::JSTestDOMJIT::subspaceFor):
     148        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
     149        (WebCore::JSTestDefaultToJSONDOMConstructor::prototypeForStructure):
     150        (WebCore::JSTestDefaultToJSON::subspaceForImpl):
     151        * bindings/scripts/test/JS/JSTestDefaultToJSON.h:
     152        (WebCore::JSTestDefaultToJSON::subspaceFor):
     153        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
     154        (WebCore::JSTestDefaultToJSONFilteredByExposedDOMConstructor::prototypeForStructure):
     155        (WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceForImpl):
     156        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.h:
     157        (WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceFor):
     158        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp:
     159        (WebCore::JSTestDefaultToJSONIndirectInheritanceDOMConstructor::prototypeForStructure):
     160        (WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceForImpl):
     161        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.h:
     162        (WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceFor):
     163        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
     164        (WebCore::JSTestDefaultToJSONInheritDOMConstructor::prototypeForStructure):
     165        (WebCore::JSTestDefaultToJSONInherit::subspaceForImpl):
     166        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.h:
     167        (WebCore::JSTestDefaultToJSONInherit::subspaceFor):
     168        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
     169        (WebCore::JSTestDefaultToJSONInheritFinalDOMConstructor::prototypeForStructure):
     170        (WebCore::JSTestDefaultToJSONInheritFinal::subspaceForImpl):
     171        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.h:
     172        (WebCore::JSTestDefaultToJSONInheritFinal::subspaceFor):
     173        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:
     174        (WebCore::JSTestDelegateToSharedSyntheticAttributeDOMConstructor::prototypeForStructure):
     175        (WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl):
     176        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.h:
     177        (WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceFor):
     178        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
     179        (WebCore::JSTestDomainSecurityDOMConstructor::prototypeForStructure):
     180        (WebCore::JSTestDomainSecurity::subspaceForImpl):
     181        * bindings/scripts/test/JS/JSTestDomainSecurity.h:
     182        (WebCore::JSTestDomainSecurity::subspaceFor):
     183        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
     184        (WebCore::JSTestEnabledBySettingDOMConstructor::prototypeForStructure):
     185        (WebCore::JSTestEnabledBySetting::subspaceForImpl):
     186        * bindings/scripts/test/JS/JSTestEnabledBySetting.h:
     187        (WebCore::JSTestEnabledBySetting::subspaceFor):
     188        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
     189        (WebCore::JSTestEnabledForContextDOMConstructor::prototypeForStructure):
     190        (WebCore::JSTestEnabledForContext::subspaceForImpl):
     191        * bindings/scripts/test/JS/JSTestEnabledForContext.h:
     192        (WebCore::JSTestEnabledForContext::subspaceFor):
     193        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
     194        (WebCore::JSTestEventConstructor::subspaceForImpl):
     195        * bindings/scripts/test/JS/JSTestEventConstructor.h:
     196        (WebCore::JSTestEventConstructor::subspaceFor):
     197        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
     198        (WebCore::JSTestEventTargetDOMConstructor::prototypeForStructure):
     199        (WebCore::JSTestEventTarget::subspaceForImpl):
     200        * bindings/scripts/test/JS/JSTestEventTarget.h:
     201        (WebCore::JSTestEventTarget::subspaceFor):
     202        * bindings/scripts/test/JS/JSTestException.cpp:
     203        (WebCore::JSTestExceptionDOMConstructor::prototypeForStructure):
     204        (WebCore::JSTestException::subspaceForImpl):
     205        * bindings/scripts/test/JS/JSTestException.h:
     206        (WebCore::JSTestException::subspaceFor):
     207        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp:
     208        (WebCore::JSTestGenerateAddOpaqueRootDOMConstructor::prototypeForStructure):
     209        (WebCore::JSTestGenerateAddOpaqueRoot::subspaceForImpl):
     210        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.h:
     211        (WebCore::JSTestGenerateAddOpaqueRoot::subspaceFor):
     212        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
     213        (WebCore::JSTestGenerateIsReachableDOMConstructor::prototypeForStructure):
     214        (WebCore::JSTestGenerateIsReachable::subspaceForImpl):
     215        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
     216        (WebCore::JSTestGenerateIsReachable::subspaceFor):
     217        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
     218        (WebCore::JSTestGlobalObject::subspaceForImpl):
     219        * bindings/scripts/test/JS/JSTestGlobalObject.h:
     220        (WebCore::JSTestGlobalObject::subspaceFor):
     221        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
     222        (WebCore::JSTestIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
     223        (WebCore::JSTestIndexedSetterNoIdentifier::subspaceForImpl):
     224        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h:
     225        (WebCore::JSTestIndexedSetterNoIdentifier::subspaceFor):
     226        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
     227        (WebCore::JSTestIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
     228        (WebCore::JSTestIndexedSetterThrowingException::subspaceForImpl):
     229        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h:
     230        (WebCore::JSTestIndexedSetterThrowingException::subspaceFor):
     231        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
     232        (WebCore::JSTestIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
     233        (WebCore::JSTestIndexedSetterWithIdentifier::subspaceForImpl):
     234        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h:
     235        (WebCore::JSTestIndexedSetterWithIdentifier::subspaceFor):
     236        * bindings/scripts/test/JS/JSTestInterface.cpp:
     237        (WebCore::JSTestInterfaceDOMConstructor::construct):
     238        (WebCore::jsTestInterfacePrototypeFunction_entriesCaller):
     239        (WebCore::JSTestInterface::subspaceForImpl):
     240        * bindings/scripts/test/JS/JSTestInterface.h:
     241        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
     242        (WebCore::JSTestInterfaceLeadingUnderscoreDOMConstructor::prototypeForStructure):
     243        (WebCore::JSTestInterfaceLeadingUnderscore::subspaceForImpl):
     244        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h:
     245        (WebCore::JSTestInterfaceLeadingUnderscore::subspaceFor):
     246        * bindings/scripts/test/JS/JSTestIterable.cpp:
     247        (WebCore::JSTestIterableDOMConstructor::prototypeForStructure):
     248        (WebCore::jsTestIterablePrototypeFunction_entriesCaller):
     249        (WebCore::JSTestIterable::subspaceForImpl):
     250        * bindings/scripts/test/JS/JSTestIterable.h:
     251        (WebCore::JSTestIterable::subspaceFor):
     252        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
     253        (WebCore::JSTestJSBuiltinConstructorDOMConstructor::prototypeForStructure):
     254        (WebCore::JSTestJSBuiltinConstructor::subspaceForImpl):
     255        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
     256        (WebCore::JSTestJSBuiltinConstructor::subspaceFor):
     257        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:
     258        (WebCore::JSTestLegacyFactoryFunctionDOMConstructor::prototypeForStructure):
     259        (WebCore::JSTestLegacyFactoryFunction::subspaceForImpl):
     260        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.h:
     261        (WebCore::JSTestLegacyFactoryFunction::subspaceFor):
     262        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
     263        (WebCore::JSTestLegacyNoInterfaceObjectPrototype::finishCreation):
     264        (WebCore::JSTestLegacyNoInterfaceObject::subspaceForImpl):
     265        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.h:
     266        (WebCore::JSTestLegacyNoInterfaceObject::subspaceFor):
     267        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:
     268        (WebCore::JSTestLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
     269        (WebCore::JSTestLegacyOverrideBuiltIns::subspaceForImpl):
     270        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.h:
     271        (WebCore::JSTestLegacyOverrideBuiltIns::subspaceFor):
     272        * bindings/scripts/test/JS/JSTestMapLike.cpp:
     273        (WebCore::JSTestMapLikeDOMConstructor::prototypeForStructure):
     274        (WebCore::JSTestMapLike::subspaceForImpl):
     275        * bindings/scripts/test/JS/JSTestMapLike.h:
     276        (WebCore::JSTestMapLike::subspaceFor):
     277        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
     278        (WebCore::JSTestMapLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
     279        (WebCore::JSTestMapLikeWithOverriddenOperations::subspaceForImpl):
     280        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.h:
     281        (WebCore::JSTestMapLikeWithOverriddenOperations::subspaceFor):
     282        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
     283        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierDOMConstructor::prototypeForStructure):
     284        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl):
     285        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h:
     286        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceFor):
     287        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
     288        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
     289        (WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl):
     290        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h:
     291        (WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceFor):
     292        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
     293        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierDOMConstructor::prototypeForStructure):
     294        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl):
     295        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h:
     296        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceFor):
     297        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
     298        (WebCore::JSTestNamedDeleterNoIdentifierDOMConstructor::prototypeForStructure):
     299        (WebCore::JSTestNamedDeleterNoIdentifier::subspaceForImpl):
     300        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h:
     301        (WebCore::JSTestNamedDeleterNoIdentifier::subspaceFor):
     302        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
     303        (WebCore::JSTestNamedDeleterThrowingExceptionDOMConstructor::prototypeForStructure):
     304        (WebCore::JSTestNamedDeleterThrowingException::subspaceForImpl):
     305        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h:
     306        (WebCore::JSTestNamedDeleterThrowingException::subspaceFor):
     307        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
     308        (WebCore::JSTestNamedDeleterWithIdentifierDOMConstructor::prototypeForStructure):
     309        (WebCore::JSTestNamedDeleterWithIdentifier::subspaceForImpl):
     310        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h:
     311        (WebCore::JSTestNamedDeleterWithIdentifier::subspaceFor):
     312        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
     313        (WebCore::JSTestNamedDeleterWithIndexedGetterDOMConstructor::prototypeForStructure):
     314        (WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceForImpl):
     315        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h:
     316        (WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceFor):
     317        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
     318        (WebCore::JSTestNamedGetterCallWithDOMConstructor::prototypeForStructure):
     319        (WebCore::JSTestNamedGetterCallWith::subspaceForImpl):
     320        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.h:
     321        (WebCore::JSTestNamedGetterCallWith::subspaceFor):
     322        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
     323        (WebCore::JSTestNamedGetterNoIdentifierDOMConstructor::prototypeForStructure):
     324        (WebCore::JSTestNamedGetterNoIdentifier::subspaceForImpl):
     325        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h:
     326        (WebCore::JSTestNamedGetterNoIdentifier::subspaceFor):
     327        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
     328        (WebCore::JSTestNamedGetterWithIdentifierDOMConstructor::prototypeForStructure):
     329        (WebCore::JSTestNamedGetterWithIdentifier::subspaceForImpl):
     330        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h:
     331        (WebCore::JSTestNamedGetterWithIdentifier::subspaceFor):
     332        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
     333        (WebCore::JSTestNamedSetterNoIdentifierDOMConstructor::prototypeForStructure):
     334        (WebCore::JSTestNamedSetterNoIdentifier::subspaceForImpl):
     335        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h:
     336        (WebCore::JSTestNamedSetterNoIdentifier::subspaceFor):
     337        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
     338        (WebCore::JSTestNamedSetterThrowingExceptionDOMConstructor::prototypeForStructure):
     339        (WebCore::JSTestNamedSetterThrowingException::subspaceForImpl):
     340        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h:
     341        (WebCore::JSTestNamedSetterThrowingException::subspaceFor):
     342        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
     343        (WebCore::JSTestNamedSetterWithIdentifierDOMConstructor::prototypeForStructure):
     344        (WebCore::JSTestNamedSetterWithIdentifier::subspaceForImpl):
     345        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h:
     346        (WebCore::JSTestNamedSetterWithIdentifier::subspaceFor):
     347        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
     348        (WebCore::JSTestNamedSetterWithIndexedGetterDOMConstructor::prototypeForStructure):
     349        (WebCore::JSTestNamedSetterWithIndexedGetter::subspaceForImpl):
     350        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h:
     351        (WebCore::JSTestNamedSetterWithIndexedGetter::subspaceFor):
     352        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
     353        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterDOMConstructor::prototypeForStructure):
     354        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl):
     355        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h:
     356        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceFor):
     357        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
     358        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
     359        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl):
     360        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.h:
     361        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceFor):
     362        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
     363        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesDOMConstructor::prototypeForStructure):
     364        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl):
     365        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.h:
     366        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceFor):
     367        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
     368        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInsDOMConstructor::prototypeForStructure):
     369        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl):
     370        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.h:
     371        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceFor):
     372        * bindings/scripts/test/JS/JSTestNamespaceObject.cpp:
     373        (WebCore::JSTestNamespaceObject::subspaceForImpl):
     374        * bindings/scripts/test/JS/JSTestNamespaceObject.h:
     375        (WebCore::JSTestNamespaceObject::subspaceFor):
     376        * bindings/scripts/test/JS/JSTestNode.cpp:
     377        (WebCore::jsTestNodePrototypeFunction_entriesCaller):
     378        (WebCore::JSTestNode::subspaceForImpl):
     379        * bindings/scripts/test/JS/JSTestNode.h:
     380        * bindings/scripts/test/JS/JSTestObj.cpp:
     381        (WebCore::JSTestObjDOMConstructor::construct):
     382        (WebCore::JSTestObj::subspaceForImpl):
     383        * bindings/scripts/test/JS/JSTestObj.h:
     384        (WebCore::JSTestObj::subspaceFor):
     385        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
     386        (WebCore::JSTestOperationConditionalDOMConstructor::prototypeForStructure):
     387        (WebCore::JSTestOperationConditional::subspaceForImpl):
     388        * bindings/scripts/test/JS/JSTestOperationConditional.h:
     389        (WebCore::JSTestOperationConditional::subspaceFor):
     390        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
     391        (WebCore::JSTestOverloadedConstructors::subspaceForImpl):
     392        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
     393        (WebCore::JSTestOverloadedConstructors::subspaceFor):
     394        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
     395        (WebCore::JSTestOverloadedConstructorsWithSequence::subspaceForImpl):
     396        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:
     397        (WebCore::JSTestOverloadedConstructorsWithSequence::subspaceFor):
     398        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
     399        (WebCore::JSTestPluginInterfaceDOMConstructor::prototypeForStructure):
     400        (WebCore::JSTestPluginInterface::subspaceForImpl):
     401        * bindings/scripts/test/JS/JSTestPluginInterface.h:
     402        (WebCore::JSTestPluginInterface::subspaceFor):
     403        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
     404        (WebCore::JSTestPromiseRejectionEvent::subspaceForImpl):
     405        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h:
     406        (WebCore::JSTestPromiseRejectionEvent::subspaceFor):
     407        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:
     408        (WebCore::JSTestReadOnlyMapLikeDOMConstructor::prototypeForStructure):
     409        (WebCore::JSTestReadOnlyMapLike::subspaceForImpl):
     410        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.h:
     411        (WebCore::JSTestReadOnlyMapLike::subspaceFor):
     412        * bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:
     413        (WebCore::JSTestReadOnlySetLikeDOMConstructor::prototypeForStructure):
     414        (WebCore::JSTestReadOnlySetLike::subspaceForImpl):
     415        * bindings/scripts/test/JS/JSTestReadOnlySetLike.h:
     416        (WebCore::JSTestReadOnlySetLike::subspaceFor):
     417        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:
     418        (WebCore::JSTestReportExtraMemoryCostDOMConstructor::prototypeForStructure):
     419        (WebCore::JSTestReportExtraMemoryCost::subspaceForImpl):
     420        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.h:
     421        (WebCore::JSTestReportExtraMemoryCost::subspaceFor):
     422        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
     423        (WebCore::JSTestSerializedScriptValueInterfaceDOMConstructor::prototypeForStructure):
     424        (WebCore::JSTestSerializedScriptValueInterface::subspaceForImpl):
     425        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
     426        (WebCore::JSTestSerializedScriptValueInterface::subspaceFor):
     427        * bindings/scripts/test/JS/JSTestSetLike.cpp:
     428        (WebCore::JSTestSetLikeDOMConstructor::prototypeForStructure):
     429        (WebCore::JSTestSetLike::subspaceForImpl):
     430        * bindings/scripts/test/JS/JSTestSetLike.h:
     431        (WebCore::JSTestSetLike::subspaceFor):
     432        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
     433        (WebCore::JSTestSetLikeWithOverriddenOperationsDOMConstructor::prototypeForStructure):
     434        (WebCore::JSTestSetLikeWithOverriddenOperations::subspaceForImpl):
     435        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.h:
     436        (WebCore::JSTestSetLikeWithOverriddenOperations::subspaceFor):
     437        * bindings/scripts/test/JS/JSTestStringifier.cpp:
     438        (WebCore::JSTestStringifierDOMConstructor::prototypeForStructure):
     439        (WebCore::JSTestStringifier::subspaceForImpl):
     440        * bindings/scripts/test/JS/JSTestStringifier.h:
     441        (WebCore::JSTestStringifier::subspaceFor):
     442        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
     443        (WebCore::JSTestStringifierAnonymousOperationDOMConstructor::prototypeForStructure):
     444        (WebCore::JSTestStringifierAnonymousOperation::subspaceForImpl):
     445        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h:
     446        (WebCore::JSTestStringifierAnonymousOperation::subspaceFor):
     447        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
     448        (WebCore::JSTestStringifierNamedOperationDOMConstructor::prototypeForStructure):
     449        (WebCore::JSTestStringifierNamedOperation::subspaceForImpl):
     450        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.h:
     451        (WebCore::JSTestStringifierNamedOperation::subspaceFor):
     452        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
     453        (WebCore::JSTestStringifierOperationImplementedAsDOMConstructor::prototypeForStructure):
     454        (WebCore::JSTestStringifierOperationImplementedAs::subspaceForImpl):
     455        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h:
     456        (WebCore::JSTestStringifierOperationImplementedAs::subspaceFor):
     457        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
     458        (WebCore::JSTestStringifierOperationNamedToStringDOMConstructor::prototypeForStructure):
     459        (WebCore::JSTestStringifierOperationNamedToString::subspaceForImpl):
     460        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h:
     461        (WebCore::JSTestStringifierOperationNamedToString::subspaceFor):
     462        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
     463        (WebCore::JSTestStringifierReadOnlyAttributeDOMConstructor::prototypeForStructure):
     464        (WebCore::JSTestStringifierReadOnlyAttribute::subspaceForImpl):
     465        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h:
     466        (WebCore::JSTestStringifierReadOnlyAttribute::subspaceFor):
     467        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
     468        (WebCore::JSTestStringifierReadWriteAttributeDOMConstructor::prototypeForStructure):
     469        (WebCore::JSTestStringifierReadWriteAttribute::subspaceForImpl):
     470        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h:
     471        (WebCore::JSTestStringifierReadWriteAttribute::subspaceFor):
     472        * bindings/scripts/test/JS/JSTestTaggedWrapper.cpp:
     473        (WebCore::JSTestTaggedWrapperDOMConstructor::prototypeForStructure):
     474        (WebCore::JSTestTaggedWrapper::subspaceForImpl):
     475        * bindings/scripts/test/JS/JSTestTaggedWrapper.h:
     476        (WebCore::JSTestTaggedWrapper::subspaceFor):
     477        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
     478        (WebCore::JSTestTypedefsDOMConstructor::construct):
     479        (WebCore::JSTestTypedefs::subspaceForImpl):
     480        * bindings/scripts/test/JS/JSTestTypedefs.h:
     481        (WebCore::JSTestTypedefs::subspaceFor):
     482        * bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:
     483        (WebCore::JSWorkerGlobalScope::subspaceForImpl):
     484        * bindings/scripts/test/JS/JSWorkerGlobalScope.h:
     485        (WebCore::JSWorkerGlobalScope::subspaceFor):
     486        * bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:
     487        (WebCore::JSWorkletGlobalScope::subspaceForImpl):
     488        * bindings/scripts/test/JS/JSWorkletGlobalScope.h:
     489        (WebCore::JSWorkletGlobalScope::subspaceFor):
     490        * bridge/objc/objc_runtime.h:
     491        * bridge/objc/objc_runtime.mm:
     492        (JSC::Bindings::ObjcFallbackObjectImp::subspaceForImpl):
     493        * bridge/runtime_array.cpp:
     494        (JSC::RuntimeArray::subspaceForImpl):
     495        * bridge/runtime_array.h:
     496        * bridge/runtime_method.cpp:
     497        (JSC::RuntimeMethod::subspaceForImpl):
     498        * bridge/runtime_method.h:
     499        * bridge/runtime_object.cpp:
     500        (JSC::Bindings::RuntimeObject::subspaceForImpl):
     501        * bridge/runtime_object.h:
     502
    15032022-02-18  Alan Bujtas  <zalan@apple.com>
    2504
  • TabularUnified trunk/Source/WebCore/DerivedSources-output.xcfilelist

    r289978 r290129  
    1010$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/CommandLineAPIModuleSource.h
    1111$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/CountQueuingStrategyBuiltins.h
     12$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/DOMClientIsoSubspaces.h
    1213$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/DOMConstructors.h
    1314$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/DOMIsoSubspaces.h
  • TabularUnified trunk/Source/WebCore/DerivedSources.make

    r289978 r290129  
    20792079SUPPLEMENTAL_MAKEFILE_DEPS = SupplementalDependencies.dep
    20802080ISO_SUBSPACES_HEADER_FILE = DOMIsoSubspaces.h
     2081CLIENT_ISO_SUBSPACES_HEADER_FILE = DOMClientIsoSubspaces.h
    20812082CONSTRUCTORS_HEADER_FILE = DOMConstructors.h
    20822083WINDOW_CONSTRUCTORS_FILE = DOMWindowConstructors.idl
     
    20952096    $(SUPPLEMENTAL_DEPENDENCY_FILE) \
    20962097    $(ISO_SUBSPACES_HEADER_FILE) \
     2098    $(CLIENT_ISO_SUBSPACES_HEADER_FILE) \
    20972099    $(CONSTRUCTORS_HEADER_FILE) \
    20982100    $(WINDOW_CONSTRUCTORS_FILE) \
     
    21092111$(IDL_INTERMEDIATE_PATTERNS) : $(PREPROCESS_IDLS_SCRIPTS) $(IDL_ATTRIBUTES_FILE) $(JS_BINDING_IDLS) $(FEATURE_AND_PLATFORM_DEFINE_DEPENDENCIES)
    21102112        $(shell echo $(JS_BINDING_IDLS) | tr " " "\n" > IDLFileNamesList.txt)
    2111         $(PERL) $(WebCore)/bindings/scripts/preprocess-idls.pl --defines "$(FEATURE_AND_PLATFORM_DEFINES) LANGUAGE_JAVASCRIPT" --idlFileNamesList IDLFileNamesList.txt --idlAttributesFile $(IDL_ATTRIBUTES_FILE) --supplementalDependencyFile $(SUPPLEMENTAL_DEPENDENCY_FILE) --isoSubspacesHeaderFile $(ISO_SUBSPACES_HEADER_FILE) --constructorsHeaderFile $(CONSTRUCTORS_HEADER_FILE) --windowConstructorsFile $(WINDOW_CONSTRUCTORS_FILE) --workerGlobalScopeConstructorsFile $(WORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --shadowRealmGlobalScopeConstructorsFile $(SHADOWREALMGLOBALSCOPE_CONSTRUCTORS_FILE) --dedicatedWorkerGlobalScopeConstructorsFile $(DEDICATEDWORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --serviceWorkerGlobalScopeConstructorsFile $(SERVICEWORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --sharedWorkerGlobalScopeConstructorsFile $(SHAREDWORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --workletGlobalScopeConstructorsFile $(WORKLETGLOBALSCOPE_CONSTRUCTORS_FILE) --paintWorkletGlobalScopeConstructorsFile $(PAINTWORKLETGLOBALSCOPE_CONSTRUCTORS_FILE) --audioWorkletGlobalScopeConstructorsFile $(AUDIOWORKLETGLOBALSCOPE_CONSTRUCTORS_FILE) --supplementalMakefileDeps $(SUPPLEMENTAL_MAKEFILE_DEPS)
     2113        $(PERL) $(WebCore)/bindings/scripts/preprocess-idls.pl --defines "$(FEATURE_AND_PLATFORM_DEFINES) LANGUAGE_JAVASCRIPT" --idlFileNamesList IDLFileNamesList.txt --idlAttributesFile $(IDL_ATTRIBUTES_FILE) --supplementalDependencyFile $(SUPPLEMENTAL_DEPENDENCY_FILE) --isoSubspacesHeaderFile $(ISO_SUBSPACES_HEADER_FILE) --clientISOSubspacesHeaderFile $(CLIENT_ISO_SUBSPACES_HEADER_FILE) --constructorsHeaderFile $(CONSTRUCTORS_HEADER_FILE) --windowConstructorsFile $(WINDOW_CONSTRUCTORS_FILE) --workerGlobalScopeConstructorsFile $(WORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --shadowRealmGlobalScopeConstructorsFile $(SHADOWREALMGLOBALSCOPE_CONSTRUCTORS_FILE) --dedicatedWorkerGlobalScopeConstructorsFile $(DEDICATEDWORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --serviceWorkerGlobalScopeConstructorsFile $(SERVICEWORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --sharedWorkerGlobalScopeConstructorsFile $(SHAREDWORKERGLOBALSCOPE_CONSTRUCTORS_FILE) --workletGlobalScopeConstructorsFile $(WORKLETGLOBALSCOPE_CONSTRUCTORS_FILE) --paintWorkletGlobalScopeConstructorsFile $(PAINTWORKLETGLOBALSCOPE_CONSTRUCTORS_FILE) --audioWorkletGlobalScopeConstructorsFile $(AUDIOWORKLETGLOBALSCOPE_CONSTRUCTORS_FILE) --supplementalMakefileDeps $(SUPPLEMENTAL_MAKEFILE_DEPS)
    21122114
    21132115#
  • TabularUnified trunk/Source/WebCore/bindings/js/DOMGCOutputConstraint.cpp

    r273138 r290129  
    11/*
    2  * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838using namespace JSC;
    3939
    40 DOMGCOutputConstraint::DOMGCOutputConstraint(VM& vm, JSVMClientData& clientData)
     40DOMGCOutputConstraint::DOMGCOutputConstraint(VM& vm, JSHeapData& heapData)
    4141    : MarkingConstraint("Domo", "DOM Output", ConstraintVolatility::SeldomGreyed, ConstraintConcurrency::Concurrent, ConstraintParallelism::Parallel)
    4242    , m_vm(vm)
    43     , m_clientData(clientData)
     43    , m_heapData(heapData)
    4444    , m_lastExecutionVersion(vm.heap.mutatorExecutionVersion())
    4545{
     
    6060    m_lastExecutionVersion = heap.mutatorExecutionVersion();
    6161   
    62     m_clientData.forEachOutputConstraintSpace(
     62    m_heapData.forEachOutputConstraintSpace(
    6363        [&] (Subspace& subspace) {
    6464            auto func = [] (Visitor& visitor, HeapCell* heapCell, HeapCell::Kind) {
  • TabularUnified trunk/Source/WebCore/bindings/js/DOMGCOutputConstraint.h

    r273138 r290129  
    11/*
    2  * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3434namespace WebCore {
    3535
    36 class JSVMClientData;
     36class JSHeapData;
    3737
    3838class DOMGCOutputConstraint : public JSC::MarkingConstraint {
    3939    WTF_MAKE_FAST_ALLOCATED;
    4040public:
    41     DOMGCOutputConstraint(JSC::VM&, JSVMClientData&);
     41    DOMGCOutputConstraint(JSC::VM&, JSHeapData&);
    4242    ~DOMGCOutputConstraint();
    4343   
     
    5050
    5151    JSC::VM& m_vm;
    52     JSVMClientData& m_clientData;
     52    JSHeapData& m_heapData;
    5353    uint64_t m_lastExecutionVersion;
    5454};
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMAsyncIterator.h

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4646
    4747    template<typename CellType, JSC::SubspaceAccess>
    48     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     48    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4949    {
    5050        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSDOMAsyncIteratorPrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMBuiltinConstructorBase.cpp

    r284241 r290129  
    11/*
    22 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2004-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2004-2022 Apple Inc. All rights reserved.
    44 *  Copyright (C) 2007 Samuel Weinig <sam@webkit.org>
    55 *  Copyright (C) 2013 Michael Pruett <michael@68k.org>
     
    4040DEFINE_VISIT_CHILDREN(JSDOMBuiltinConstructorBase);
    4141
    42 JSC::IsoSubspace* JSDOMBuiltinConstructorBase::subspaceForImpl(JSC::VM& vm)
     42JSC::GCClient::IsoSubspace* JSDOMBuiltinConstructorBase::subspaceForImpl(JSC::VM& vm)
    4343{
    4444    return &static_cast<JSVMClientData*>(vm.clientData)->domBuiltinConstructorSpace();
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMBuiltinConstructorBase.h

    r284241 r290129  
    11/*
    22 *  Copyright (C) 2015, 2016 Canon Inc. All rights reserved.
    3  *  Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    2929
    3030    template<typename CellType, JSC::SubspaceAccess>
    31     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     31    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    3232    {
    3333        static_assert(sizeof(CellType) == sizeof(JSDOMBuiltinConstructorBase));
     
    4949
    5050private:
    51     static JSC::IsoSubspace* subspaceForImpl(JSC::VM&);
     51    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM&);
    5252
    5353    JSC::WriteBarrier<JSC::JSFunction> m_initializeFunction;
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMConstructorBase.cpp

    r282864 r290129  
    11/*
    22 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2004-2011, 2013, 2016 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2004-2022 Apple Inc. All rights reserved.
    44 *  Copyright (C) 2007 Samuel Weinig <sam@webkit.org>
    55 *  Copyright (C) 2013 Michael Pruett <michael@68k.org>
     
    4747}
    4848
    49 JSC::IsoSubspace* JSDOMConstructorBase::subspaceForImpl(JSC::VM& vm)
     49JSC::GCClient::IsoSubspace* JSDOMConstructorBase::subspaceForImpl(JSC::VM& vm)
    5050{
    5151    return &static_cast<JSVMClientData*>(vm.clientData)->domConstructorSpace();
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMConstructorBase.h

    r282864 r290129  
    11/*
    22 *  Copyright (C) 2015, 2016 Canon Inc. All rights reserved.
    3  *  Copyright (C) 2016-2019 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    44 *
    55 *  This library is free software; you can redistribute it and/or
     
    3737
    3838    template<typename CellType, JSC::SubspaceAccess>
    39     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     39    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4040    {
    4141        static_assert(sizeof(CellType) == sizeof(JSDOMConstructorBase));
     
    4545    }
    4646
    47     static JSC::IsoSubspace* subspaceForImpl(JSC::VM&);
     47    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM&);
    4848
    4949    JSDOMGlobalObject* globalObject() const { return JSC::jsCast<JSDOMGlobalObject*>(Base::globalObject()); }
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMConstructorNotCallable.h

    r285730 r290129  
    11/*
    22 * Copyright (C) 2021 Alexey Shvayka <shvaikalesh@gmail.com>
    3  * Copyright (C) 2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4646
    4747    template<typename CellType, JSC::SubspaceAccess>
    48     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     48    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4949    {
    5050        static_assert(sizeof(CellType) == sizeof(JSDOMConstructorNotCallable));
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMIterator.h

    r286347 r290129  
    11/*
    22 * Copyright (C) 2016 Canon, Inc. All rights reserved.
    3  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     3 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    5353
    5454    template<typename CellType, JSC::SubspaceAccess>
    55     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     55    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5656    {
    5757        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSDOMIteratorPrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMWindowProperties.cpp

    r277829 r290129  
    11/*
    2  * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    139139}
    140140
    141 JSC::IsoSubspace* JSDOMWindowProperties::subspaceForImpl(JSC::VM& vm)
     141JSC::GCClient::IsoSubspace* JSDOMWindowProperties::subspaceForImpl(JSC::VM& vm)
    142142{
    143143    return &static_cast<JSVMClientData*>(vm.clientData)->domWindowPropertiesSpace();
  • TabularUnified trunk/Source/WebCore/bindings/js/JSDOMWindowProperties.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3838    static constexpr bool needsDestruction = false;
    3939    template<typename CellType, JSC::SubspaceAccess>
    40     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     40    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4141    {
    4242        static_assert(CellType::destroy == JSC::JSCell::destroy, "JSDOMWindowProperties is not destructible actually");
     
    7373
    7474    void finishCreation(JSC::JSGlobalObject&);
    75     static JSC::IsoSubspace* subspaceForImpl(JSC::VM&);
     75    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM&);
    7676};
    7777
  • TabularUnified trunk/Source/WebCore/bindings/js/JSFileSystemDirectoryHandleIterator.cpp

    r286347 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4848const JSC::ClassInfo JSFileSystemDirectoryHandleIteratorPrototype::s_info = { "Directory Handle Iterator", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSFileSystemDirectoryHandleIteratorPrototype) };
    4949
    50 IsoSubspace* JSFileSystemDirectoryHandleIterator::subspaceForImpl(VM& vm)
     50GCClient::IsoSubspace* JSFileSystemDirectoryHandleIterator::subspaceForImpl(VM& vm)
    5151{
    52     JSC::JSLockHolder apiLocker(vm);
     52    JSLockHolder apiLocker(vm);
    5353    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    54     if (auto* space = clientData.fileSystemDirectoryHandleIteratorSpace())
    55         return space;
    56     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSFileSystemDirectoryHandleIterator> || !JSFileSystemDirectoryHandleIterator::needsDestruction);
    57     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSFileSystemDirectoryHandleIterator>)
    58         clientData.setFileSystemDirectoryHandleIteratorSpace(makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSFileSystemDirectoryHandleIterator));
    59     else
    60         clientData.setFileSystemDirectoryHandleIteratorSpace(makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSFileSystemDirectoryHandleIterator));
    61     auto* space = clientData.fileSystemDirectoryHandleIteratorSpace();
     54    if (auto* clientSpace = clientData.fileSystemDirectoryHandleIteratorSpace())
     55        return clientSpace;
     56
     57    auto& heapData = clientData.heapData();
     58    Locker locker { heapData.lock() };
     59
     60    IsoSubspace* space = heapData.fileSystemDirectoryHandleIteratorSpace();
     61    if (!space) {
     62        Heap& heap = vm.heap;
     63        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSFileSystemDirectoryHandleIterator> || !JSFileSystemDirectoryHandleIterator::needsDestruction);
     64        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSFileSystemDirectoryHandleIterator>)
     65            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSFileSystemDirectoryHandleIterator);
     66        else
     67            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSFileSystemDirectoryHandleIterator);
     68        heapData.setFileSystemDirectoryHandleIteratorSpace(std::unique_ptr<IsoSubspace>(space));
     69
    6270IGNORE_WARNINGS_BEGIN("unreachable-code")
    6371IGNORE_WARNINGS_BEGIN("tautological-compare")
    64     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSFileSystemDirectoryHandleIterator::visitOutputConstraints;
    65     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    66     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    67         clientData.outputConstraintSpaces().append(space);
     72        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSFileSystemDirectoryHandleIterator::visitOutputConstraints;
     73        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     74        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     75            heapData.outputConstraintSpaces().append(space);
    6876IGNORE_WARNINGS_END
    6977IGNORE_WARNINGS_END
    70     return space;
     78    }
     79
     80    auto* clientSpace = new GCClient::IsoSubspace(*space);
     81    clientData.setFileSystemDirectoryHandleIteratorSpace(std::unique_ptr<GCClient::IsoSubspace>(clientSpace));
     82    return clientSpace;
    7183}
    7284
  • TabularUnified trunk/Source/WebCore/bindings/js/JSFileSystemDirectoryHandleIterator.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4747
    4848    template<typename CellType, JSC::SubspaceAccess mode>
    49     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     49    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5050    {
    5151        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5353        return subspaceForImpl(vm);
    5454    }
    55     static JSC::IsoSubspace* subspaceForImpl(JSC::VM&);
     55    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM&);
    5656
    5757    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
  • TabularUnified trunk/Source/WebCore/bindings/js/JSIDBSerializationGlobalObject.cpp

    r285730 r290129  
    11/*
    2  * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5353}
    5454
    55 IsoSubspace* JSIDBSerializationGlobalObject::subspaceForImpl(VM& vm)
     55GCClient::IsoSubspace* JSIDBSerializationGlobalObject::subspaceForImpl(VM& vm)
    5656{
    5757    return &static_cast<JSVMClientData*>(vm.clientData)->idbSerializationSpace();
  • TabularUnified trunk/Source/WebCore/bindings/js/JSIDBSerializationGlobalObject.h

    r275151 r290129  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737
    3838    template<typename, JSC::SubspaceAccess mode>
    39     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     39    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4040    {
    4141        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    4343        return subspaceForImpl(vm);
    4444    }
    45     static JSC::IsoSubspace* subspaceForImpl(JSC::VM&);
     45    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM&);
    4646
    4747    DECLARE_INFO;
  • TabularUnified trunk/Source/WebCore/bindings/js/JSWindowProxy.cpp

    r287737 r290129  
    11/*
    2  * Copyright (C) 2008-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    178178}
    179179
    180 JSC::IsoSubspace* JSWindowProxy::subspaceForImpl(JSC::VM& vm)
     180JSC::GCClient::IsoSubspace* JSWindowProxy::subspaceForImpl(JSC::VM& vm)
    181181{
    182182    return &static_cast<JSVMClientData*>(vm.clientData)->windowProxySpace();
  • TabularUnified trunk/Source/WebCore/bindings/js/JSWindowProxy.h

    r287327 r290129  
    11/*
    2  * Copyright (C) 2008-2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4949    static void destroy(JSCell*);
    5050
    51     template<typename CellType, JSC::SubspaceAccess> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm) { return subspaceForImpl(vm); }
     51    template<typename CellType, JSC::SubspaceAccess> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { return subspaceForImpl(vm); }
    5252
    5353    static JSWindowProxy& create(JSC::VM&, AbstractDOMWindow&, DOMWrapperWorld&);
     
    7272    JSWindowProxy(JSC::VM&, JSC::Structure&, DOMWrapperWorld&);
    7373    void finishCreation(JSC::VM&, AbstractDOMWindow&);
    74     static JSC::IsoSubspace* subspaceForImpl(JSC::VM&);
     74    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM&);
    7575
    7676    Ref<DOMWrapperWorld> m_world;
  • TabularUnified trunk/Source/WebCore/bindings/js/WebCoreJSClientData.cpp

    r288442 r290129  
    11/*
    2  * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2727#include "WebCoreJSClientData.h"
    2828
     29#include "DOMClientIsoSubspaces.h"
    2930#include "DOMGCOutputConstraint.h"
    3031#include "DOMIsoSubspaces.h"
     
    5455#include "runtime_method.h"
    5556#include "runtime_object.h"
     57#include <mutex>
    5658#include <wtf/MainThread.h>
    5759
     
    5961using namespace JSC;
    6062
    61 JSVMClientData::JSVMClientData(VM& vm)
    62     : m_builtinFunctions(vm)
    63     , m_builtinNames(vm)
    64     , m_runtimeArrayHeapCellType(JSC::IsoHeapCellType::Args<RuntimeArray>())
     63JSHeapData::JSHeapData(Heap& heap)
     64    : m_runtimeArrayHeapCellType(JSC::IsoHeapCellType::Args<RuntimeArray>())
    6565    , m_runtimeObjectHeapCellType(JSC::IsoHeapCellType::Args<JSC::Bindings::RuntimeObject>())
    6666    , m_windowProxyHeapCellType(JSC::IsoHeapCellType::Args<JSWindowProxy>())
     
    8282#endif
    8383    , m_heapCellTypeForJSIDBSerializationGlobalObject(JSC::IsoHeapCellType::Args<JSIDBSerializationGlobalObject>())
    84     , m_domBuiltinConstructorSpace ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSDOMBuiltinConstructorBase)
    85     , m_domConstructorSpace ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSDOMConstructorBase)
    86     , m_domNamespaceObjectSpace ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSDOMObject)
    87     , m_domWindowPropertiesSpace ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSDOMWindowProperties)
    88     , m_runtimeArraySpace ISO_SUBSPACE_INIT(vm.heap, m_runtimeArrayHeapCellType, RuntimeArray)
    89     , m_runtimeMethodSpace ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), RuntimeMethod) // Hash:0xf70c4a85
    90     , m_runtimeObjectSpace ISO_SUBSPACE_INIT(vm.heap, m_runtimeObjectHeapCellType, JSC::Bindings::RuntimeObject)
    91     , m_windowProxySpace ISO_SUBSPACE_INIT(vm.heap, m_windowProxyHeapCellType, JSWindowProxy)
    92     , m_idbSerializationSpace ISO_SUBSPACE_INIT(vm.heap, m_heapCellTypeForJSIDBSerializationGlobalObject, JSIDBSerializationGlobalObject)
     84    , m_domBuiltinConstructorSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSDOMBuiltinConstructorBase)
     85    , m_domConstructorSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSDOMConstructorBase)
     86    , m_domNamespaceObjectSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSDOMObject)
     87    , m_domWindowPropertiesSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSDOMWindowProperties)
     88    , m_runtimeArraySpace ISO_SUBSPACE_INIT(heap, m_runtimeArrayHeapCellType, RuntimeArray)
     89    , m_runtimeMethodSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, RuntimeMethod) // Hash:0xf70c4a85
     90    , m_runtimeObjectSpace ISO_SUBSPACE_INIT(heap, m_runtimeObjectHeapCellType, JSC::Bindings::RuntimeObject)
     91    , m_windowProxySpace ISO_SUBSPACE_INIT(heap, m_windowProxyHeapCellType, JSWindowProxy)
     92    , m_idbSerializationSpace ISO_SUBSPACE_INIT(heap, m_heapCellTypeForJSIDBSerializationGlobalObject, JSIDBSerializationGlobalObject)
    9393    , m_subspaces(makeUnique<DOMIsoSubspaces>())
    9494{
    9595}
     96
     97JSHeapData* JSHeapData::ensureHeapData(Heap& heap)
     98{
     99    if (!Options::useGlobalGC())
     100        return new JSHeapData(heap);
     101
     102    static JSHeapData* singleton = nullptr;
     103    static std::once_flag onceFlag;
     104    std::call_once(onceFlag, [&] {
     105        singleton = new JSHeapData(heap);
     106    });
     107    return singleton;
     108}
     109
     110#define CLIENT_ISO_SUBSPACE_INIT(subspace) subspace(m_heapData->subspace)
     111
     112JSVMClientData::JSVMClientData(VM& vm)
     113    : m_builtinFunctions(vm)
     114    , m_builtinNames(vm)
     115    , m_heapData(JSHeapData::ensureHeapData(vm.heap))
     116    , CLIENT_ISO_SUBSPACE_INIT(m_domBuiltinConstructorSpace)
     117    , CLIENT_ISO_SUBSPACE_INIT(m_domConstructorSpace)
     118    , CLIENT_ISO_SUBSPACE_INIT(m_domNamespaceObjectSpace)
     119    , CLIENT_ISO_SUBSPACE_INIT(m_domWindowPropertiesSpace)
     120    , CLIENT_ISO_SUBSPACE_INIT(m_runtimeArraySpace)
     121    , CLIENT_ISO_SUBSPACE_INIT(m_runtimeMethodSpace)
     122    , CLIENT_ISO_SUBSPACE_INIT(m_runtimeObjectSpace)
     123    , CLIENT_ISO_SUBSPACE_INIT(m_windowProxySpace)
     124    , CLIENT_ISO_SUBSPACE_INIT(m_idbSerializationSpace)
     125    , m_clientSubspaces(makeUnique<DOMClientIsoSubspaces>())
     126{
     127}
     128
     129#undef CLIENT_ISO_SUBSPACE_INIT
    96130
    97131JSVMClientData::~JSVMClientData()
     
    143177    vm->clientData = clientData; // ~VM deletes this pointer.
    144178
    145     vm->heap.addMarkingConstraint(makeUnique<DOMGCOutputConstraint>(*vm, *clientData));
     179    vm->heap.addMarkingConstraint(makeUnique<DOMGCOutputConstraint>(*vm, clientData->heapData()));
    146180
    147181    clientData->m_normalWorld = DOMWrapperWorld::create(*vm, DOMWrapperWorld::Type::Normal);
  • TabularUnified trunk/Source/WebCore/bindings/js/WebCoreJSClientData.h

    r288442 r290129  
    11/*
    22 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
    3  *  Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     3 *  Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    44 *  Copyright (C) 2007 Samuel Weinig <sam@webkit.org>
    55 *  Copyright (C) 2009 Google, Inc. All rights reserved.
     
    2626#include "WebCoreJSBuiltins.h"
    2727#include "WorkerThreadType.h"
     28#include <wtf/Function.h>
    2829#include <wtf/HashSet.h>
    2930#include <wtf/RefPtr.h>
     
    3132namespace WebCore {
    3233
     34class DOMClientIsoSubspaces;
    3335class DOMIsoSubspaces;
    3436
    35 class JSVMClientData : public JSC::VM::ClientData {
    36     WTF_MAKE_NONCOPYABLE(JSVMClientData); WTF_MAKE_FAST_ALLOCATED;
    37     friend class VMWorldIterator;
     37class JSHeapData {
     38    WTF_MAKE_NONCOPYABLE(JSHeapData);
     39    WTF_MAKE_FAST_ALLOCATED;
     40    friend class JSVMClientData;
     41public:
     42    JSHeapData(JSC::Heap&);
    3843
    39 public:
    40     explicit JSVMClientData(JSC::VM&);
     44    static JSHeapData* ensureHeapData(JSC::Heap&);
    4145
    42     virtual ~JSVMClientData();
    43    
    44     WEBCORE_EXPORT static void initNormalWorld(JSC::VM*, WorkerThreadType);
    45 
    46     DOMWrapperWorld& normalWorld() { return *m_normalWorld; }
    47 
    48     void getAllWorlds(Vector<Ref<DOMWrapperWorld>>&);
    49 
    50     void rememberWorld(DOMWrapperWorld& world)
    51     {
    52         ASSERT(!m_worldSet.contains(&world));
    53         m_worldSet.add(&world);
    54     }
    55 
    56     void forgetWorld(DOMWrapperWorld& world)
    57     {
    58         ASSERT(m_worldSet.contains(&world));
    59         m_worldSet.remove(&world);
    60     }
    61 
    62     WebCoreBuiltinNames& builtinNames() { return m_builtinNames; }
    63     JSBuiltinFunctions& builtinFunctions() { return m_builtinFunctions; }
    64    
    65     JSC::IsoSubspace& domBuiltinConstructorSpace() { return m_domBuiltinConstructorSpace; }
    66     JSC::IsoSubspace& domConstructorSpace() { return m_domConstructorSpace; }
    67     JSC::IsoSubspace& domNamespaceObjectSpace() { return m_domNamespaceObjectSpace; }
    68     JSC::IsoSubspace& domWindowPropertiesSpace() { return m_domWindowPropertiesSpace; }
    69     JSC::IsoSubspace& runtimeArraySpace() { return m_runtimeArraySpace; }
    70     JSC::IsoSubspace& runtimeMethodSpace() { return m_runtimeMethodSpace; }
    71     JSC::IsoSubspace& runtimeObjectSpace() { return m_runtimeObjectSpace; }
    72     JSC::IsoSubspace& windowProxySpace() { return m_windowProxySpace; }
    73     JSC::IsoSubspace& idbSerializationSpace() { return m_idbSerializationSpace; }
    74     JSC::IsoSubspace* fileSystemDirectoryHandleIteratorSpace() { return m_fileSystemDirectoryHandleIteratorSpace.get(); }
    75     void setFileSystemDirectoryHandleIteratorSpace(std::unique_ptr<JSC::IsoSubspace> space) { m_fileSystemDirectoryHandleIteratorSpace = std::exchange(space, nullptr); }
     46    Lock& lock() { return m_lock; }
     47    DOMIsoSubspaces& subspaces() { return *m_subspaces.get(); }
    7648
    7749    Vector<JSC::IsoSubspace*>& outputConstraintSpaces() { return m_outputConstraintSpaces; }
     
    8456    }
    8557
    86     DOMIsoSubspaces& subspaces() { return *m_subspaces.get(); }
     58    JSC::IsoSubspace* fileSystemDirectoryHandleIteratorSpace() { return m_fileSystemDirectoryHandleIteratorSpace.get(); }
     59    void setFileSystemDirectoryHandleIteratorSpace(std::unique_ptr<JSC::IsoSubspace> space) { m_fileSystemDirectoryHandleIteratorSpace = std::exchange(space, nullptr); }
    8760
    8861private:
    89     HashSet<DOMWrapperWorld*> m_worldSet;
    90     RefPtr<DOMWrapperWorld> m_normalWorld;
    91 
    92     JSBuiltinFunctions m_builtinFunctions;
    93     WebCoreBuiltinNames m_builtinNames;
     62    Lock m_lock;
    9463
    9564    JSC::IsoHeapCellType m_runtimeArrayHeapCellType;
     
    12695    JSC::IsoSubspace m_idbSerializationSpace;
    12796    std::unique_ptr<JSC::IsoSubspace> m_fileSystemDirectoryHandleIteratorSpace;
     97
    12898    std::unique_ptr<DOMIsoSubspaces> m_subspaces;
    12999    Vector<JSC::IsoSubspace*> m_outputConstraintSpaces;
    130100};
    131101
     102
     103class JSVMClientData : public JSC::VM::ClientData {
     104    WTF_MAKE_NONCOPYABLE(JSVMClientData); WTF_MAKE_FAST_ALLOCATED;
     105    friend class VMWorldIterator;
     106
     107public:
     108    explicit JSVMClientData(JSC::VM&);
     109
     110    virtual ~JSVMClientData();
     111   
     112    WEBCORE_EXPORT static void initNormalWorld(JSC::VM*, WorkerThreadType);
     113
     114    DOMWrapperWorld& normalWorld() { return *m_normalWorld; }
     115
     116    void getAllWorlds(Vector<Ref<DOMWrapperWorld>>&);
     117
     118    void rememberWorld(DOMWrapperWorld& world)
     119    {
     120        ASSERT(!m_worldSet.contains(&world));
     121        m_worldSet.add(&world);
     122    }
     123
     124    void forgetWorld(DOMWrapperWorld& world)
     125    {
     126        ASSERT(m_worldSet.contains(&world));
     127        m_worldSet.remove(&world);
     128    }
     129
     130    JSHeapData& heapData() { return *m_heapData; }
     131
     132    WebCoreBuiltinNames& builtinNames() { return m_builtinNames; }
     133    JSBuiltinFunctions& builtinFunctions() { return m_builtinFunctions; }
     134   
     135    JSC::GCClient::IsoSubspace& domBuiltinConstructorSpace() { return m_domBuiltinConstructorSpace; }
     136    JSC::GCClient::IsoSubspace& domConstructorSpace() { return m_domConstructorSpace; }
     137    JSC::GCClient::IsoSubspace& domNamespaceObjectSpace() { return m_domNamespaceObjectSpace; }
     138    JSC::GCClient::IsoSubspace& domWindowPropertiesSpace() { return m_domWindowPropertiesSpace; }
     139    JSC::GCClient::IsoSubspace& runtimeArraySpace() { return m_runtimeArraySpace; }
     140    JSC::GCClient::IsoSubspace& runtimeMethodSpace() { return m_runtimeMethodSpace; }
     141    JSC::GCClient::IsoSubspace& runtimeObjectSpace() { return m_runtimeObjectSpace; }
     142    JSC::GCClient::IsoSubspace& windowProxySpace() { return m_windowProxySpace; }
     143    JSC::GCClient::IsoSubspace& idbSerializationSpace() { return m_idbSerializationSpace; }
     144    JSC::GCClient::IsoSubspace* fileSystemDirectoryHandleIteratorSpace() { return m_fileSystemDirectoryHandleIteratorSpace.get(); }
     145    void setFileSystemDirectoryHandleIteratorSpace(std::unique_ptr<JSC::GCClient::IsoSubspace> space) { m_fileSystemDirectoryHandleIteratorSpace = std::exchange(space, nullptr); }
     146
     147    DOMClientIsoSubspaces& clientSubspaces() { return *m_clientSubspaces.get(); }
     148
     149private:
     150    HashSet<DOMWrapperWorld*> m_worldSet;
     151    RefPtr<DOMWrapperWorld> m_normalWorld;
     152
     153    JSBuiltinFunctions m_builtinFunctions;
     154    WebCoreBuiltinNames m_builtinNames;
     155
     156    JSHeapData* m_heapData;
     157    JSC::GCClient::IsoSubspace m_domBuiltinConstructorSpace;
     158    JSC::GCClient::IsoSubspace m_domConstructorSpace;
     159    JSC::GCClient::IsoSubspace m_domNamespaceObjectSpace;
     160    JSC::GCClient::IsoSubspace m_domWindowPropertiesSpace;
     161    JSC::GCClient::IsoSubspace m_runtimeArraySpace;
     162    JSC::GCClient::IsoSubspace m_runtimeMethodSpace;
     163    JSC::GCClient::IsoSubspace m_runtimeObjectSpace;
     164    JSC::GCClient::IsoSubspace m_windowProxySpace;
     165    JSC::GCClient::IsoSubspace m_idbSerializationSpace;
     166
     167    std::unique_ptr<JSC::GCClient::IsoSubspace> m_fileSystemDirectoryHandleIteratorSpace;
     168    std::unique_ptr<DOMClientIsoSubspaces> m_clientSubspaces;
     169};
     170
    132171} // namespace WebCore
  • TabularUnified trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r289531 r290129  
    44# Copyright (C) 2006, 2007 Samuel Weinig <sam@webkit.org>
    55# Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org>
    6 # Copyright (C) 2006-2021 Apple Inc. All rights reserved.
     6# Copyright (C) 2006-2022 Apple Inc. All rights reserved.
    77# Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
    88# Copyright (C) Research In Motion Limited 2010. All rights reserved.
     
    30943094    }
    30953095
    3096     push(@headerContent, "    template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)\n");
     3096    push(@headerContent, "    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)\n");
    30973097    push(@headerContent, "    {\n");
    30983098    push(@headerContent, "        if constexpr (mode == JSC::SubspaceAccess::Concurrently)\n");
     
    31003100    push(@headerContent, "        return subspaceForImpl(vm);\n");
    31013101    push(@headerContent, "    }\n");
    3102     push(@headerContent, "    static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);\n");
     3102    push(@headerContent, "    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);\n");
    31033103
    31043104    # visit function
     
    48724872    GenerateIterableDefinition($interface) if $interface->iterable;
    48734873
     4874    AddToImplIncludes("DOMClientIsoSubspaces.h");
    48744875    AddToImplIncludes("DOMIsoSubspaces.h");
    48754876    AddToImplIncludes("WebCoreJSClientData.h");
     
    48774878    AddToImplIncludes("<JavaScriptCore/SlotVisitorMacros.h>");
    48784879    AddToImplIncludes("<JavaScriptCore/SubspaceInlines.h>");
    4879     push(@implContent, "JSC::IsoSubspace* ${className}::subspaceForImpl(JSC::VM& vm)\n");
     4880    push(@implContent, "JSC::GCClient::IsoSubspace* ${className}::subspaceForImpl(JSC::VM& vm)\n");
    48804881    push(@implContent, "{\n");
    48814882    push(@implContent, "    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);\n");
    4882     push(@implContent, "    auto& spaces = clientData.subspaces();\n");
    4883     push(@implContent, "    if (auto* space = spaces.m_subspaceFor${interfaceName}.get())\n");
    4884     push(@implContent, "        return space;\n");
     4883    push(@implContent, "    auto& clientSpaces = clientData.clientSubspaces();\n");
     4884    push(@implContent, "    if (auto* clientSpace = clientSpaces.m_clientSubspaceFor${interfaceName}.get())\n");
     4885    push(@implContent, "        return clientSpace;\n");
     4886    push(@implContent, "\n");
     4887    push(@implContent, "    auto& heapData = clientData.heapData();\n");
     4888    push(@implContent, "    Locker locker { heapData.lock() };\n");
     4889    push(@implContent, "\n");
     4890    push(@implContent, "    auto& spaces = heapData.subspaces();\n");
     4891    push(@implContent, "    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();\n");
     4892    push(@implContent, "    if (!space) {\n");
     4893    push(@implContent, "        Heap& heap = vm.heap;\n");
     4894
    48854895    if (IsDOMGlobalObject($interface)) {
    4886         push(@implContent, "    spaces.m_subspaceFor${interfaceName} = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeFor${className}, ${className});\n");
     4896        push(@implContent, "        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeFor${className}, ${className});\n");
    48874897    } else {
    4888         push(@implContent, "    static_assert(std::is_base_of_v<JSC::JSDestructibleObject, ${className}> || !${className}::needsDestruction);\n");
    4889         push(@implContent, "    if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, ${className}>)\n");
    4890         push(@implContent, "        spaces.m_subspaceFor${interfaceName} = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), ${className});\n");
    4891         push(@implContent, "    else\n");
    4892         push(@implContent, "        spaces.m_subspaceFor${interfaceName} = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), ${className});\n");
    4893     }
    4894     push(@implContent, "    auto* space = spaces.m_subspaceFor${interfaceName}.get();\n");
     4898        push(@implContent, "        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, ${className}> || !${className}::needsDestruction);\n");
     4899        push(@implContent, "        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, ${className}>)\n");
     4900        push(@implContent, "            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, ${className});\n");
     4901        push(@implContent, "        else\n");
     4902        push(@implContent, "            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, ${className});\n");
     4903    }
     4904    push(@implContent, "        spaces.m_subspaceFor${interfaceName} = std::unique_ptr<IsoSubspace>(space);\n");
    48954905    push(@implContent, "IGNORE_WARNINGS_BEGIN(\"unreachable-code\")\n");
    48964906    push(@implContent, "IGNORE_WARNINGS_BEGIN(\"tautological-compare\")\n");
    4897     push(@implContent, "    void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = ${className}::visitOutputConstraints;\n");
    4898     push(@implContent, "    void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;\n");
    4899     push(@implContent, "    if (myVisitOutputConstraint != jsCellVisitOutputConstraint)\n");
    4900 #    push(@implContent, "    if (&${className}::visitOutputConstraints != &JSC::JSCell::visitOutputConstraints)\n");
    4901     push(@implContent, "        clientData.outputConstraintSpaces().append(space);\n");
     4907    push(@implContent, "        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = ${className}::visitOutputConstraints;\n");
     4908    push(@implContent, "        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;\n");
     4909    push(@implContent, "        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)\n");
     4910    push(@implContent, "            heapData.outputConstraintSpaces().append(space);\n");
    49024911    push(@implContent, "IGNORE_WARNINGS_END\n");
    49034912    push(@implContent, "IGNORE_WARNINGS_END\n");
    4904     push(@implContent, "    return space;\n");
     4913    push(@implContent, "    }\n");
     4914    push(@implContent, "\n");
     4915
     4916    push(@implContent, "    clientSpaces.m_clientSubspaceFor${interfaceName} = makeUnique<JSC::GCClient::IsoSubspace>(*space);\n");
     4917    push(@implContent, "    return clientSpaces.m_clientSubspaceFor${interfaceName}.get();\n");
    49054918    push(@implContent, "}\n\n");
    49064919
     
    67866799    DECLARE_INFO;
    67876800
    6788     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     6801    template<typename, SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    67896802    {
    67906803        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    67916804            return nullptr;
    67926805        auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    6793         auto& spaces = clientData.subspaces();
    6794         if (auto* space = spaces.m_subspaceFor${iteratorName}.get())
    6795             return space;
    6796         static_assert(std::is_base_of_v<JSC::JSDestructibleObject, ${iteratorName}> || !${iteratorName}::needsDestruction);
    6797         if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, ${iteratorName}>)
    6798             spaces.m_subspaceFor${iteratorName} = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), ${iteratorName});
    6799         else
    6800             spaces.m_subspaceFor${iteratorName} = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), ${iteratorName});
    6801         auto* space = spaces.m_subspaceFor${iteratorName}.get();
     6806        auto& clientSpaces = clientData.clientSubspaces();
     6807        if (auto* clientSpace = clientSpaces.m_clientSubspaceFor${iteratorName}.get())
     6808            return clientSpace;
     6809
     6810        auto& heapData = clientData.heapData();
     6811        Locker locker { heapData.lock() };
     6812
     6813        auto& spaces = heapData.subspaces();
     6814        IsoSubspace* space = spaces.m_subspaceFor${iteratorName}.get();
     6815        if (!space) {
     6816            Heap& heap = vm.heap;
     6817            static_assert(std::is_base_of_v<JSC::JSDestructibleObject, ${iteratorName}> || !${iteratorName}::needsDestruction);
     6818            if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, ${iteratorName}>)
     6819                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, ${iteratorName});
     6820            else
     6821                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, ${iteratorName});
     6822            spaces.m_subspaceFor${iteratorName} = std::unique_ptr<IsoSubspace>(space);
    68026823IGNORE_WARNINGS_BEGIN(\"unreachable-code\")
    68036824IGNORE_WARNINGS_BEGIN(\"tautological-compare\")
    6804         void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = ${iteratorName}::visitOutputConstraints;
    6805         void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    6806         if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    6807             clientData.outputConstraintSpaces().append(space);
     6825            void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = ${iteratorName}::visitOutputConstraints;
     6826            void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     6827            if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     6828                heapData.outputConstraintSpaces().append(space);
    68086829IGNORE_WARNINGS_END
    68096830IGNORE_WARNINGS_END
    6810         return space;
     6831        }
     6832
     6833        clientSpaces.m_clientSubspaceFor${iteratorName} = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     6834        return clientSpaces.m_clientSubspaceFor${iteratorName}.get();
    68116835    }
    68126836
     
    75897613
    75907614    push(@$outputArray, "    template<typename CellType, JSC::SubspaceAccess>\n");
    7591     push(@$outputArray, "    static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)\n");
     7615    push(@$outputArray, "    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)\n");
    75927616    push(@$outputArray, "    {\n");
    75937617    push(@$outputArray, "        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(${prototypeClassName}, Base);\n");
  • TabularUnified trunk/Source/WebCore/bindings/scripts/preprocess-idls.pl

    r289458 r290129  
    4242my $supplementalDependencyFile;
    4343my $isoSubspacesHeaderFile;
     44my $clientISOSubspacesHeaderFile;
    4445my $constructorsHeaderFile;
    4546my $windowConstructorsFile;
     
    8283           'supplementalDependencyFile=s' => \$supplementalDependencyFile,
    8384           'isoSubspacesHeaderFile=s' => \$isoSubspacesHeaderFile,
     85           'clientISOSubspacesHeaderFile=s' => \$clientISOSubspacesHeaderFile,
    8486           'constructorsHeaderFile=s' => \$constructorsHeaderFile,
    8587           'windowConstructorsFile=s' => \$windowConstructorsFile,
     
    115117$supplementalDependencyFile = CygwinPathIfNeeded($supplementalDependencyFile);
    116118$isoSubspacesHeaderFile = CygwinPathIfNeeded($isoSubspacesHeaderFile);
     119$clientISOSubspacesHeaderFile = CygwinPathIfNeeded($clientISOSubspacesHeaderFile);
    117120$constructorsHeaderFile = CygwinPathIfNeeded($constructorsHeaderFile);
    118121$windowConstructorsFile = CygwinPathIfNeeded($windowConstructorsFile);
     
    176179
    177180namespace WebCore {
     181using namespace JSC;
    178182
    179183class DOMIsoSubspaces {
     
    182186public:
    183187    DOMIsoSubspaces() = default;
     188END
     189
     190my $clientISOSubspacesHeaderCode = <<END;
     191#include <wtf/FastMalloc.h>
     192#include <wtf/Noncopyable.h>
     193
     194#pragma once
     195
     196namespace WebCore {
     197using namespace JSC;
     198
     199class DOMClientIsoSubspaces {
     200    WTF_MAKE_NONCOPYABLE(DOMClientIsoSubspaces);
     201    WTF_MAKE_FAST_ALLOCATED(DOMClientIsoSubspaces);
     202public:
     203    DOMClientIsoSubspaces() = default;
    184204END
    185205
     
    249269    my $isCallbackInterface = isCallbackInterfaceFromIDL($idlFile);
    250270    if (!$isCallbackInterface) {
    251         $isoSubspacesHeaderCode .= "    std::unique_ptr<JSC::IsoSubspace> m_subspaceFor${interfaceName};\n";
     271        $isoSubspacesHeaderCode .= "    std::unique_ptr<IsoSubspace> m_subspaceFor${interfaceName};\n";
     272        $clientISOSubspacesHeaderCode .= "    std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceFor${interfaceName};\n";
    252273        if (containsIterableInterfaceFromIDL($idlFile)) {
    253             $isoSubspacesHeaderCode .= "    std::unique_ptr<JSC::IsoSubspace> m_subspaceFor${interfaceName}Iterator;\n";
     274            $isoSubspacesHeaderCode .= "    std::unique_ptr<IsoSubspace> m_subspaceFor${interfaceName}Iterator;\n";
     275            $clientISOSubspacesHeaderCode .= "    std::unique_ptr<GCClient::IsoSubspace> m_clientSubspaceFor${interfaceName}Iterator;\n";
    254276        }
    255277    }
     
    327349}
    328350
     351if ($clientISOSubspacesHeaderFile) {
     352    $clientISOSubspacesHeaderCode .= "};\n";
     353    $clientISOSubspacesHeaderCode .= "} // namespace WebCore\n";
     354    WriteFileIfChanged($clientISOSubspacesHeaderFile, $clientISOSubspacesHeaderCode);
     355}
     356
    329357if ($constructorsHeaderFile) {
    330358    my $constructorsLength = @constructors;
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    364365}
    365366
    366 JSC::IsoSubspace* JSDOMWindow::subspaceForImpl(JSC::VM& vm)
     367JSC::GCClient::IsoSubspace* JSDOMWindow::subspaceForImpl(JSC::VM& vm)
    367368{
    368369    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    369     auto& spaces = clientData.subspaces();
    370     if (auto* space = spaces.m_subspaceForDOMWindow.get())
    371         return space;
    372     spaces.m_subspaceForDOMWindow = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSDOMWindow, JSDOMWindow);
    373     auto* space = spaces.m_subspaceForDOMWindow.get();
     370    auto& clientSpaces = clientData.clientSubspaces();
     371    if (auto* clientSpace = clientSpaces.m_clientSubspaceForDOMWindow.get())
     372        return clientSpace;
     373
     374    auto& heapData = clientData.heapData();
     375    Locker locker { heapData.lock() };
     376
     377    auto& spaces = heapData.subspaces();
     378    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     379    if (!space) {
     380        Heap& heap = vm.heap;
     381        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSDOMWindow, JSDOMWindow);
     382        spaces.m_subspaceForDOMWindow = std::unique_ptr<IsoSubspace>(space);
    374383IGNORE_WARNINGS_BEGIN("unreachable-code")
    375384IGNORE_WARNINGS_BEGIN("tautological-compare")
    376     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSDOMWindow::visitOutputConstraints;
    377     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    378     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    379         clientData.outputConstraintSpaces().append(space);
     385        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSDOMWindow::visitOutputConstraints;
     386        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     387        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     388            heapData.outputConstraintSpaces().append(space);
    380389IGNORE_WARNINGS_END
    381390IGNORE_WARNINGS_END
    382     return space;
     391    }
     392
     393    clientSpaces.m_clientSubspaceForDOMWindow = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     394    return clientSpaces.m_clientSubspaceForDOMWindow.get();
    383395}
    384396
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.h

    r286347 r290129  
    5151
    5252    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161    DOMWindow& wrapped() const
     
    8383    DECLARE_INFO;
    8484    template<typename CellType, JSC::SubspaceAccess>
    85     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     85    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8686    {
    8787        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSDOMWindowPrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "DedicatedWorkerGlobalScope.h"
     
    165166}
    166167
    167 JSC::IsoSubspace* JSDedicatedWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
     168JSC::GCClient::IsoSubspace* JSDedicatedWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    168169{
    169170    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    170     auto& spaces = clientData.subspaces();
    171     if (auto* space = spaces.m_subspaceForDedicatedWorkerGlobalScope.get())
    172         return space;
    173     spaces.m_subspaceForDedicatedWorkerGlobalScope = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSDedicatedWorkerGlobalScope, JSDedicatedWorkerGlobalScope);
    174     auto* space = spaces.m_subspaceForDedicatedWorkerGlobalScope.get();
     171    auto& clientSpaces = clientData.clientSubspaces();
     172    if (auto* clientSpace = clientSpaces.m_clientSubspaceForDedicatedWorkerGlobalScope.get())
     173        return clientSpace;
     174
     175    auto& heapData = clientData.heapData();
     176    Locker locker { heapData.lock() };
     177
     178    auto& spaces = heapData.subspaces();
     179    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     180    if (!space) {
     181        Heap& heap = vm.heap;
     182        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSDedicatedWorkerGlobalScope, JSDedicatedWorkerGlobalScope);
     183        spaces.m_subspaceForDedicatedWorkerGlobalScope = std::unique_ptr<IsoSubspace>(space);
    175184IGNORE_WARNINGS_BEGIN("unreachable-code")
    176185IGNORE_WARNINGS_BEGIN("tautological-compare")
    177     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSDedicatedWorkerGlobalScope::visitOutputConstraints;
    178     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    179     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    180         clientData.outputConstraintSpaces().append(space);
     186        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSDedicatedWorkerGlobalScope::visitOutputConstraints;
     187        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     188        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     189            heapData.outputConstraintSpaces().append(space);
    181190IGNORE_WARNINGS_END
    182191IGNORE_WARNINGS_END
    183     return space;
     192    }
     193
     194    clientSpaces.m_clientSubspaceForDedicatedWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     195    return clientSpaces.m_clientSubspaceForDedicatedWorkerGlobalScope.get();
    184196}
    185197
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h

    r286347 r290129  
    4848
    4949    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    50     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     50    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5151    {
    5252        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5454        return subspaceForImpl(vm);
    5555    }
    56     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     56    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5757    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5858    DedicatedWorkerGlobalScope& wrapped() const
     
    8080    DECLARE_INFO;
    8181    template<typename CellType, JSC::SubspaceAccess>
    82     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     82    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8383    {
    8484        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSDedicatedWorkerGlobalScopePrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedStar.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    6970    DECLARE_INFO;
    7071    template<typename CellType, JSC::SubspaceAccess>
    71     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     72    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7273    {
    7374        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSExposedStarPrototype, Base);
     
    229230}
    230231
    231 JSC::IsoSubspace* JSExposedStar::subspaceForImpl(JSC::VM& vm)
     232JSC::GCClient::IsoSubspace* JSExposedStar::subspaceForImpl(JSC::VM& vm)
    232233{
    233234    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    234     auto& spaces = clientData.subspaces();
    235     if (auto* space = spaces.m_subspaceForExposedStar.get())
    236         return space;
    237     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSExposedStar> || !JSExposedStar::needsDestruction);
    238     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSExposedStar>)
    239         spaces.m_subspaceForExposedStar = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSExposedStar);
    240     else
    241         spaces.m_subspaceForExposedStar = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSExposedStar);
    242     auto* space = spaces.m_subspaceForExposedStar.get();
     235    auto& clientSpaces = clientData.clientSubspaces();
     236    if (auto* clientSpace = clientSpaces.m_clientSubspaceForExposedStar.get())
     237        return clientSpace;
     238
     239    auto& heapData = clientData.heapData();
     240    Locker locker { heapData.lock() };
     241
     242    auto& spaces = heapData.subspaces();
     243    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     244    if (!space) {
     245        Heap& heap = vm.heap;
     246        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSExposedStar> || !JSExposedStar::needsDestruction);
     247        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSExposedStar>)
     248            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSExposedStar);
     249        else
     250            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSExposedStar);
     251        spaces.m_subspaceForExposedStar = std::unique_ptr<IsoSubspace>(space);
    243252IGNORE_WARNINGS_BEGIN("unreachable-code")
    244253IGNORE_WARNINGS_BEGIN("tautological-compare")
    245     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSExposedStar::visitOutputConstraints;
    246     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    247     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    248         clientData.outputConstraintSpaces().append(space);
     254        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSExposedStar::visitOutputConstraints;
     255        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     256        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     257            heapData.outputConstraintSpaces().append(space);
    249258IGNORE_WARNINGS_END
    250259IGNORE_WARNINGS_END
    251     return space;
     260    }
     261
     262    clientSpaces.m_clientSubspaceForExposedStar = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     263    return clientSpaces.m_clientSubspaceForExposedStar.get();
    252264}
    253265
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedStar.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060    ExposedStar& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    110111    DECLARE_INFO;
    111112    template<typename CellType, JSC::SubspaceAccess>
    112     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     113    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    113114    {
    114115        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSExposedToWorkerAndWindowPrototype, Base);
     
    247248}
    248249
    249 JSC::IsoSubspace* JSExposedToWorkerAndWindow::subspaceForImpl(JSC::VM& vm)
     250JSC::GCClient::IsoSubspace* JSExposedToWorkerAndWindow::subspaceForImpl(JSC::VM& vm)
    250251{
    251252    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    252     auto& spaces = clientData.subspaces();
    253     if (auto* space = spaces.m_subspaceForExposedToWorkerAndWindow.get())
    254         return space;
    255     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSExposedToWorkerAndWindow> || !JSExposedToWorkerAndWindow::needsDestruction);
    256     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSExposedToWorkerAndWindow>)
    257         spaces.m_subspaceForExposedToWorkerAndWindow = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSExposedToWorkerAndWindow);
    258     else
    259         spaces.m_subspaceForExposedToWorkerAndWindow = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSExposedToWorkerAndWindow);
    260     auto* space = spaces.m_subspaceForExposedToWorkerAndWindow.get();
     253    auto& clientSpaces = clientData.clientSubspaces();
     254    if (auto* clientSpace = clientSpaces.m_clientSubspaceForExposedToWorkerAndWindow.get())
     255        return clientSpace;
     256
     257    auto& heapData = clientData.heapData();
     258    Locker locker { heapData.lock() };
     259
     260    auto& spaces = heapData.subspaces();
     261    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     262    if (!space) {
     263        Heap& heap = vm.heap;
     264        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSExposedToWorkerAndWindow> || !JSExposedToWorkerAndWindow::needsDestruction);
     265        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSExposedToWorkerAndWindow>)
     266            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSExposedToWorkerAndWindow);
     267        else
     268            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSExposedToWorkerAndWindow);
     269        spaces.m_subspaceForExposedToWorkerAndWindow = std::unique_ptr<IsoSubspace>(space);
    261270IGNORE_WARNINGS_BEGIN("unreachable-code")
    262271IGNORE_WARNINGS_BEGIN("tautological-compare")
    263     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSExposedToWorkerAndWindow::visitOutputConstraints;
    264     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    265     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    266         clientData.outputConstraintSpaces().append(space);
     272        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSExposedToWorkerAndWindow::visitOutputConstraints;
     273        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     274        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     275            heapData.outputConstraintSpaces().append(space);
    267276IGNORE_WARNINGS_END
    268277IGNORE_WARNINGS_END
    269     return space;
     278    }
     279
     280    clientSpaces.m_clientSubspaceForExposedToWorkerAndWindow = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     281    return clientSpaces.m_clientSubspaceForExposedToWorkerAndWindow.get();
    270282}
    271283
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.h

    r285730 r290129  
    5151
    5252    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    164165}
    165166
    166 JSC::IsoSubspace* JSPaintWorkletGlobalScope::subspaceForImpl(JSC::VM& vm)
     167JSC::GCClient::IsoSubspace* JSPaintWorkletGlobalScope::subspaceForImpl(JSC::VM& vm)
    167168{
    168169    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    169     auto& spaces = clientData.subspaces();
    170     if (auto* space = spaces.m_subspaceForPaintWorkletGlobalScope.get())
    171         return space;
    172     spaces.m_subspaceForPaintWorkletGlobalScope = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSPaintWorkletGlobalScope, JSPaintWorkletGlobalScope);
    173     auto* space = spaces.m_subspaceForPaintWorkletGlobalScope.get();
     170    auto& clientSpaces = clientData.clientSubspaces();
     171    if (auto* clientSpace = clientSpaces.m_clientSubspaceForPaintWorkletGlobalScope.get())
     172        return clientSpace;
     173
     174    auto& heapData = clientData.heapData();
     175    Locker locker { heapData.lock() };
     176
     177    auto& spaces = heapData.subspaces();
     178    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     179    if (!space) {
     180        Heap& heap = vm.heap;
     181        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSPaintWorkletGlobalScope, JSPaintWorkletGlobalScope);
     182        spaces.m_subspaceForPaintWorkletGlobalScope = std::unique_ptr<IsoSubspace>(space);
    174183IGNORE_WARNINGS_BEGIN("unreachable-code")
    175184IGNORE_WARNINGS_BEGIN("tautological-compare")
    176     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSPaintWorkletGlobalScope::visitOutputConstraints;
    177     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    178     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    179         clientData.outputConstraintSpaces().append(space);
     185        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSPaintWorkletGlobalScope::visitOutputConstraints;
     186        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     187        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     188            heapData.outputConstraintSpaces().append(space);
    180189IGNORE_WARNINGS_END
    181190IGNORE_WARNINGS_END
    182     return space;
     191    }
     192
     193    clientSpaces.m_clientSubspaceForPaintWorkletGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     194    return clientSpaces.m_clientSubspaceForPaintWorkletGlobalScope.get();
    183195}
    184196
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h

    r286347 r290129  
    4848
    4949    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    50     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     50    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5151    {
    5252        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5454        return subspaceForImpl(vm);
    5555    }
    56     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     56    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5757    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5858    PaintWorkletGlobalScope& wrapped() const
     
    8080    DECLARE_INFO;
    8181    template<typename CellType, JSC::SubspaceAccess>
    82     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     82    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8383    {
    8484        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSPaintWorkletGlobalScopePrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    164165}
    165166
    166 JSC::IsoSubspace* JSServiceWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
     167JSC::GCClient::IsoSubspace* JSServiceWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    167168{
    168169    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    169     auto& spaces = clientData.subspaces();
    170     if (auto* space = spaces.m_subspaceForServiceWorkerGlobalScope.get())
    171         return space;
    172     spaces.m_subspaceForServiceWorkerGlobalScope = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSServiceWorkerGlobalScope, JSServiceWorkerGlobalScope);
    173     auto* space = spaces.m_subspaceForServiceWorkerGlobalScope.get();
     170    auto& clientSpaces = clientData.clientSubspaces();
     171    if (auto* clientSpace = clientSpaces.m_clientSubspaceForServiceWorkerGlobalScope.get())
     172        return clientSpace;
     173
     174    auto& heapData = clientData.heapData();
     175    Locker locker { heapData.lock() };
     176
     177    auto& spaces = heapData.subspaces();
     178    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     179    if (!space) {
     180        Heap& heap = vm.heap;
     181        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSServiceWorkerGlobalScope, JSServiceWorkerGlobalScope);
     182        spaces.m_subspaceForServiceWorkerGlobalScope = std::unique_ptr<IsoSubspace>(space);
    174183IGNORE_WARNINGS_BEGIN("unreachable-code")
    175184IGNORE_WARNINGS_BEGIN("tautological-compare")
    176     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSServiceWorkerGlobalScope::visitOutputConstraints;
    177     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    178     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    179         clientData.outputConstraintSpaces().append(space);
     185        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSServiceWorkerGlobalScope::visitOutputConstraints;
     186        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     187        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     188            heapData.outputConstraintSpaces().append(space);
    180189IGNORE_WARNINGS_END
    181190IGNORE_WARNINGS_END
    182     return space;
     191    }
     192
     193    clientSpaces.m_clientSubspaceForServiceWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     194    return clientSpaces.m_clientSubspaceForServiceWorkerGlobalScope.get();
    183195}
    184196
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h

    r286347 r290129  
    4848
    4949    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    50     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     50    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5151    {
    5252        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5454        return subspaceForImpl(vm);
    5555    }
    56     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     56    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5757    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5858    ServiceWorkerGlobalScope& wrapped() const
     
    8080    DECLARE_INFO;
    8181    template<typename CellType, JSC::SubspaceAccess>
    82     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     82    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8383    {
    8484        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSServiceWorkerGlobalScopePrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp

    r288442 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    150151}
    151152
    152 JSC::IsoSubspace* JSShadowRealmGlobalScope::subspaceForImpl(JSC::VM& vm)
     153JSC::GCClient::IsoSubspace* JSShadowRealmGlobalScope::subspaceForImpl(JSC::VM& vm)
    153154{
    154155    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    155     auto& spaces = clientData.subspaces();
    156     if (auto* space = spaces.m_subspaceForShadowRealmGlobalScope.get())
    157         return space;
    158     spaces.m_subspaceForShadowRealmGlobalScope = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSShadowRealmGlobalScope, JSShadowRealmGlobalScope);
    159     auto* space = spaces.m_subspaceForShadowRealmGlobalScope.get();
     156    auto& clientSpaces = clientData.clientSubspaces();
     157    if (auto* clientSpace = clientSpaces.m_clientSubspaceForShadowRealmGlobalScope.get())
     158        return clientSpace;
     159
     160    auto& heapData = clientData.heapData();
     161    Locker locker { heapData.lock() };
     162
     163    auto& spaces = heapData.subspaces();
     164    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     165    if (!space) {
     166        Heap& heap = vm.heap;
     167        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSShadowRealmGlobalScope, JSShadowRealmGlobalScope);
     168        spaces.m_subspaceForShadowRealmGlobalScope = std::unique_ptr<IsoSubspace>(space);
    160169IGNORE_WARNINGS_BEGIN("unreachable-code")
    161170IGNORE_WARNINGS_BEGIN("tautological-compare")
    162     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSShadowRealmGlobalScope::visitOutputConstraints;
    163     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    164     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    165         clientData.outputConstraintSpaces().append(space);
     171        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSShadowRealmGlobalScope::visitOutputConstraints;
     172        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     173        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     174            heapData.outputConstraintSpaces().append(space);
    166175IGNORE_WARNINGS_END
    167176IGNORE_WARNINGS_END
    168     return space;
     177    }
     178
     179    clientSpaces.m_clientSubspaceForShadowRealmGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     180    return clientSpaces.m_clientSubspaceForShadowRealmGlobalScope.get();
    169181}
    170182
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.h

    r288442 r290129  
    4949
    5050    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    51     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     51    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5252    {
    5353        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5555        return subspaceForImpl(vm);
    5656    }
    57     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     57    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5858    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5959public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    148149}
    149150
    150 JSC::IsoSubspace* JSSharedWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
     151JSC::GCClient::IsoSubspace* JSSharedWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    151152{
    152153    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    153     auto& spaces = clientData.subspaces();
    154     if (auto* space = spaces.m_subspaceForSharedWorkerGlobalScope.get())
    155         return space;
    156     spaces.m_subspaceForSharedWorkerGlobalScope = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSSharedWorkerGlobalScope, JSSharedWorkerGlobalScope);
    157     auto* space = spaces.m_subspaceForSharedWorkerGlobalScope.get();
     154    auto& clientSpaces = clientData.clientSubspaces();
     155    if (auto* clientSpace = clientSpaces.m_clientSubspaceForSharedWorkerGlobalScope.get())
     156        return clientSpace;
     157
     158    auto& heapData = clientData.heapData();
     159    Locker locker { heapData.lock() };
     160
     161    auto& spaces = heapData.subspaces();
     162    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     163    if (!space) {
     164        Heap& heap = vm.heap;
     165        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSSharedWorkerGlobalScope, JSSharedWorkerGlobalScope);
     166        spaces.m_subspaceForSharedWorkerGlobalScope = std::unique_ptr<IsoSubspace>(space);
    158167IGNORE_WARNINGS_BEGIN("unreachable-code")
    159168IGNORE_WARNINGS_BEGIN("tautological-compare")
    160     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSSharedWorkerGlobalScope::visitOutputConstraints;
    161     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    162     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    163         clientData.outputConstraintSpaces().append(space);
     169        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSSharedWorkerGlobalScope::visitOutputConstraints;
     170        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     171        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     172            heapData.outputConstraintSpaces().append(space);
    164173IGNORE_WARNINGS_END
    165174IGNORE_WARNINGS_END
    166     return space;
     175    }
     176
     177    clientSpaces.m_clientSubspaceForSharedWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     178    return clientSpaces.m_clientSubspaceForSharedWorkerGlobalScope.get();
    167179}
    168180
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h

    r286347 r290129  
    4848
    4949    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    50     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     50    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5151    {
    5252        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5454        return subspaceForImpl(vm);
    5555    }
    56     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     56    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5757    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5858    SharedWorkerGlobalScope& wrapped() const
     
    8080    DECLARE_INFO;
    8181    template<typename CellType, JSC::SubspaceAccess>
    82     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     82    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8383    {
    8484        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSSharedWorkerGlobalScopePrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp

    r288118 r290129  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
     26#include "DOMClientIsoSubspaces.h"
    2627#include "DOMIsoSubspaces.h"
    2728#include "ElementInlines.h"
     
    8990    DECLARE_INFO;
    9091    template<typename CellType, JSC::SubspaceAccess>
    91     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     92    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9293    {
    9394        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestCEReactionsPrototype, Base);
     
    431432}
    432433
    433 JSC::IsoSubspace* JSTestCEReactions::subspaceForImpl(JSC::VM& vm)
     434JSC::GCClient::IsoSubspace* JSTestCEReactions::subspaceForImpl(JSC::VM& vm)
    434435{
    435436    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    436     auto& spaces = clientData.subspaces();
    437     if (auto* space = spaces.m_subspaceForTestCEReactions.get())
    438         return space;
    439     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactions> || !JSTestCEReactions::needsDestruction);
    440     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactions>)
    441         spaces.m_subspaceForTestCEReactions = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestCEReactions);
    442     else
    443         spaces.m_subspaceForTestCEReactions = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestCEReactions);
    444     auto* space = spaces.m_subspaceForTestCEReactions.get();
     437    auto& clientSpaces = clientData.clientSubspaces();
     438    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestCEReactions.get())
     439        return clientSpace;
     440
     441    auto& heapData = clientData.heapData();
     442    Locker locker { heapData.lock() };
     443
     444    auto& spaces = heapData.subspaces();
     445    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     446    if (!space) {
     447        Heap& heap = vm.heap;
     448        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactions> || !JSTestCEReactions::needsDestruction);
     449        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactions>)
     450            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestCEReactions);
     451        else
     452            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestCEReactions);
     453        spaces.m_subspaceForTestCEReactions = std::unique_ptr<IsoSubspace>(space);
    445454IGNORE_WARNINGS_BEGIN("unreachable-code")
    446455IGNORE_WARNINGS_BEGIN("tautological-compare")
    447     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestCEReactions::visitOutputConstraints;
    448     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    449     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    450         clientData.outputConstraintSpaces().append(space);
     456        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestCEReactions::visitOutputConstraints;
     457        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     458        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     459            heapData.outputConstraintSpaces().append(space);
    451460IGNORE_WARNINGS_END
    452461IGNORE_WARNINGS_END
    453     return space;
     462    }
     463
     464    clientSpaces.m_clientSubspaceForTestCEReactions = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     465    return clientSpaces.m_clientSubspaceForTestCEReactions.get();
    454466}
    455467
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp

    r288118 r290129  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
     26#include "DOMClientIsoSubspaces.h"
    2627#include "DOMIsoSubspaces.h"
    2728#include "JSDOMAttribute.h"
     
    7374    DECLARE_INFO;
    7475    template<typename CellType, JSC::SubspaceAccess>
    75     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     76    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7677    {
    7778        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestCEReactionsStringifierPrototype, Base);
     
    257258}
    258259
    259 JSC::IsoSubspace* JSTestCEReactionsStringifier::subspaceForImpl(JSC::VM& vm)
     260JSC::GCClient::IsoSubspace* JSTestCEReactionsStringifier::subspaceForImpl(JSC::VM& vm)
    260261{
    261262    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    262     auto& spaces = clientData.subspaces();
    263     if (auto* space = spaces.m_subspaceForTestCEReactionsStringifier.get())
    264         return space;
    265     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactionsStringifier> || !JSTestCEReactionsStringifier::needsDestruction);
    266     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactionsStringifier>)
    267         spaces.m_subspaceForTestCEReactionsStringifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestCEReactionsStringifier);
    268     else
    269         spaces.m_subspaceForTestCEReactionsStringifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestCEReactionsStringifier);
    270     auto* space = spaces.m_subspaceForTestCEReactionsStringifier.get();
     263    auto& clientSpaces = clientData.clientSubspaces();
     264    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestCEReactionsStringifier.get())
     265        return clientSpace;
     266
     267    auto& heapData = clientData.heapData();
     268    Locker locker { heapData.lock() };
     269
     270    auto& spaces = heapData.subspaces();
     271    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     272    if (!space) {
     273        Heap& heap = vm.heap;
     274        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactionsStringifier> || !JSTestCEReactionsStringifier::needsDestruction);
     275        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestCEReactionsStringifier>)
     276            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestCEReactionsStringifier);
     277        else
     278            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestCEReactionsStringifier);
     279        spaces.m_subspaceForTestCEReactionsStringifier = std::unique_ptr<IsoSubspace>(space);
    271280IGNORE_WARNINGS_BEGIN("unreachable-code")
    272281IGNORE_WARNINGS_BEGIN("tautological-compare")
    273     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestCEReactionsStringifier::visitOutputConstraints;
    274     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    275     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    276         clientData.outputConstraintSpaces().append(space);
     282        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestCEReactionsStringifier::visitOutputConstraints;
     283        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     284        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     285            heapData.outputConstraintSpaces().append(space);
    277286IGNORE_WARNINGS_END
    278287IGNORE_WARNINGS_END
    279     return space;
     288    }
     289
     290    clientSpaces.m_clientSubspaceForTestCEReactionsStringifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     291    return clientSpaces.m_clientSubspaceForTestCEReactionsStringifier.get();
    280292}
    281293
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    9596    DECLARE_INFO;
    9697    template<typename CellType, JSC::SubspaceAccess>
    97     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     98    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9899    {
    99100        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestCallTracerPrototype, Base);
     
    506507}
    507508
    508 JSC::IsoSubspace* JSTestCallTracer::subspaceForImpl(JSC::VM& vm)
     509JSC::GCClient::IsoSubspace* JSTestCallTracer::subspaceForImpl(JSC::VM& vm)
    509510{
    510511    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    511     auto& spaces = clientData.subspaces();
    512     if (auto* space = spaces.m_subspaceForTestCallTracer.get())
    513         return space;
    514     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestCallTracer> || !JSTestCallTracer::needsDestruction);
    515     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestCallTracer>)
    516         spaces.m_subspaceForTestCallTracer = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestCallTracer);
    517     else
    518         spaces.m_subspaceForTestCallTracer = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestCallTracer);
    519     auto* space = spaces.m_subspaceForTestCallTracer.get();
     512    auto& clientSpaces = clientData.clientSubspaces();
     513    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestCallTracer.get())
     514        return clientSpace;
     515
     516    auto& heapData = clientData.heapData();
     517    Locker locker { heapData.lock() };
     518
     519    auto& spaces = heapData.subspaces();
     520    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     521    if (!space) {
     522        Heap& heap = vm.heap;
     523        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestCallTracer> || !JSTestCallTracer::needsDestruction);
     524        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestCallTracer>)
     525            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestCallTracer);
     526        else
     527            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestCallTracer);
     528        spaces.m_subspaceForTestCallTracer = std::unique_ptr<IsoSubspace>(space);
    520529IGNORE_WARNINGS_BEGIN("unreachable-code")
    521530IGNORE_WARNINGS_BEGIN("tautological-compare")
    522     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestCallTracer::visitOutputConstraints;
    523     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    524     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    525         clientData.outputConstraintSpaces().append(space);
     531        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestCallTracer::visitOutputConstraints;
     532        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     533        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     534            heapData.outputConstraintSpaces().append(space);
    526535IGNORE_WARNINGS_END
    527536IGNORE_WARNINGS_END
    528     return space;
     537    }
     538
     539    clientSpaces.m_clientSubspaceForTestCallTracer = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     540    return clientSpaces.m_clientSubspaceForTestCallTracer.get();
    529541}
    530542
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6263    DECLARE_INFO;
    6364    template<typename CellType, JSC::SubspaceAccess>
    64     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     65    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6566    {
    6667        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestClassWithJSBuiltinConstructorPrototype, Base);
     
    169170}
    170171
    171 JSC::IsoSubspace* JSTestClassWithJSBuiltinConstructor::subspaceForImpl(JSC::VM& vm)
     172JSC::GCClient::IsoSubspace* JSTestClassWithJSBuiltinConstructor::subspaceForImpl(JSC::VM& vm)
    172173{
    173174    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    174     auto& spaces = clientData.subspaces();
    175     if (auto* space = spaces.m_subspaceForTestClassWithJSBuiltinConstructor.get())
    176         return space;
    177     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestClassWithJSBuiltinConstructor> || !JSTestClassWithJSBuiltinConstructor::needsDestruction);
    178     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestClassWithJSBuiltinConstructor>)
    179         spaces.m_subspaceForTestClassWithJSBuiltinConstructor = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestClassWithJSBuiltinConstructor);
    180     else
    181         spaces.m_subspaceForTestClassWithJSBuiltinConstructor = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestClassWithJSBuiltinConstructor);
    182     auto* space = spaces.m_subspaceForTestClassWithJSBuiltinConstructor.get();
     175    auto& clientSpaces = clientData.clientSubspaces();
     176    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestClassWithJSBuiltinConstructor.get())
     177        return clientSpace;
     178
     179    auto& heapData = clientData.heapData();
     180    Locker locker { heapData.lock() };
     181
     182    auto& spaces = heapData.subspaces();
     183    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     184    if (!space) {
     185        Heap& heap = vm.heap;
     186        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestClassWithJSBuiltinConstructor> || !JSTestClassWithJSBuiltinConstructor::needsDestruction);
     187        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestClassWithJSBuiltinConstructor>)
     188            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestClassWithJSBuiltinConstructor);
     189        else
     190            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestClassWithJSBuiltinConstructor);
     191        spaces.m_subspaceForTestClassWithJSBuiltinConstructor = std::unique_ptr<IsoSubspace>(space);
    183192IGNORE_WARNINGS_BEGIN("unreachable-code")
    184193IGNORE_WARNINGS_BEGIN("tautological-compare")
    185     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestClassWithJSBuiltinConstructor::visitOutputConstraints;
    186     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    187     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    188         clientData.outputConstraintSpaces().append(space);
     194        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestClassWithJSBuiltinConstructor::visitOutputConstraints;
     195        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     196        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     197            heapData.outputConstraintSpaces().append(space);
    189198IGNORE_WARNINGS_END
    190199IGNORE_WARNINGS_END
    191     return space;
     200    }
     201
     202    clientSpaces.m_clientSubspaceForTestClassWithJSBuiltinConstructor = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     203    return clientSpaces.m_clientSubspaceForTestClassWithJSBuiltinConstructor.get();
    192204}
    193205
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    125126    DECLARE_INFO;
    126127    template<typename CellType, JSC::SubspaceAccess>
    127     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     128    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    128129    {
    129130        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestConditionalIncludesPrototype, Base);
     
    782783#endif
    783784
    784 JSC::IsoSubspace* JSTestConditionalIncludes::subspaceForImpl(JSC::VM& vm)
     785JSC::GCClient::IsoSubspace* JSTestConditionalIncludes::subspaceForImpl(JSC::VM& vm)
    785786{
    786787    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    787     auto& spaces = clientData.subspaces();
    788     if (auto* space = spaces.m_subspaceForTestConditionalIncludes.get())
    789         return space;
    790     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionalIncludes> || !JSTestConditionalIncludes::needsDestruction);
    791     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionalIncludes>)
    792         spaces.m_subspaceForTestConditionalIncludes = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestConditionalIncludes);
    793     else
    794         spaces.m_subspaceForTestConditionalIncludes = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestConditionalIncludes);
    795     auto* space = spaces.m_subspaceForTestConditionalIncludes.get();
     788    auto& clientSpaces = clientData.clientSubspaces();
     789    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestConditionalIncludes.get())
     790        return clientSpace;
     791
     792    auto& heapData = clientData.heapData();
     793    Locker locker { heapData.lock() };
     794
     795    auto& spaces = heapData.subspaces();
     796    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     797    if (!space) {
     798        Heap& heap = vm.heap;
     799        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionalIncludes> || !JSTestConditionalIncludes::needsDestruction);
     800        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionalIncludes>)
     801            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestConditionalIncludes);
     802        else
     803            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestConditionalIncludes);
     804        spaces.m_subspaceForTestConditionalIncludes = std::unique_ptr<IsoSubspace>(space);
    796805IGNORE_WARNINGS_BEGIN("unreachable-code")
    797806IGNORE_WARNINGS_BEGIN("tautological-compare")
    798     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestConditionalIncludes::visitOutputConstraints;
    799     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    800     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    801         clientData.outputConstraintSpaces().append(space);
     807        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestConditionalIncludes::visitOutputConstraints;
     808        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     809        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     810            heapData.outputConstraintSpaces().append(space);
    802811IGNORE_WARNINGS_END
    803812IGNORE_WARNINGS_END
    804     return space;
     813    }
     814
     815    clientSpaces.m_clientSubspaceForTestConditionalIncludes = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     816    return clientSpaces.m_clientSubspaceForTestConditionalIncludes.get();
    805817}
    806818
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "DOMPromiseProxy.h"
     
    9697    DECLARE_INFO;
    9798    template<typename CellType, JSC::SubspaceAccess>
    98     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     99    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    99100    {
    100101        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestConditionallyReadWritePrototype, Base);
     
    604605}
    605606
    606 JSC::IsoSubspace* JSTestConditionallyReadWrite::subspaceForImpl(JSC::VM& vm)
     607JSC::GCClient::IsoSubspace* JSTestConditionallyReadWrite::subspaceForImpl(JSC::VM& vm)
    607608{
    608609    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    609     auto& spaces = clientData.subspaces();
    610     if (auto* space = spaces.m_subspaceForTestConditionallyReadWrite.get())
    611         return space;
    612     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionallyReadWrite> || !JSTestConditionallyReadWrite::needsDestruction);
    613     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionallyReadWrite>)
    614         spaces.m_subspaceForTestConditionallyReadWrite = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestConditionallyReadWrite);
    615     else
    616         spaces.m_subspaceForTestConditionallyReadWrite = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestConditionallyReadWrite);
    617     auto* space = spaces.m_subspaceForTestConditionallyReadWrite.get();
     610    auto& clientSpaces = clientData.clientSubspaces();
     611    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestConditionallyReadWrite.get())
     612        return clientSpace;
     613
     614    auto& heapData = clientData.heapData();
     615    Locker locker { heapData.lock() };
     616
     617    auto& spaces = heapData.subspaces();
     618    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     619    if (!space) {
     620        Heap& heap = vm.heap;
     621        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionallyReadWrite> || !JSTestConditionallyReadWrite::needsDestruction);
     622        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestConditionallyReadWrite>)
     623            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestConditionallyReadWrite);
     624        else
     625            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestConditionallyReadWrite);
     626        spaces.m_subspaceForTestConditionallyReadWrite = std::unique_ptr<IsoSubspace>(space);
    618627IGNORE_WARNINGS_BEGIN("unreachable-code")
    619628IGNORE_WARNINGS_BEGIN("tautological-compare")
    620     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestConditionallyReadWrite::visitOutputConstraints;
    621     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    622     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    623         clientData.outputConstraintSpaces().append(space);
     629        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestConditionallyReadWrite::visitOutputConstraints;
     630        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     631        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     632            heapData.outputConstraintSpaces().append(space);
    624633IGNORE_WARNINGS_END
    625634IGNORE_WARNINGS_END
    626     return space;
     635    }
     636
     637    clientSpaces.m_clientSubspaceForTestConditionallyReadWrite = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     638    return clientSpaces.m_clientSubspaceForTestConditionallyReadWrite.get();
    627639}
    628640
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "DOMJITAbstractHeapRepository.h"
     
    479480    DECLARE_INFO;
    480481    template<typename CellType, JSC::SubspaceAccess>
    481     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     482    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    482483    {
    483484        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDOMJITPrototype, Base);
     
    12451246}
    12461247
    1247 JSC::IsoSubspace* JSTestDOMJIT::subspaceForImpl(JSC::VM& vm)
     1248JSC::GCClient::IsoSubspace* JSTestDOMJIT::subspaceForImpl(JSC::VM& vm)
    12481249{
    12491250    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    1250     auto& spaces = clientData.subspaces();
    1251     if (auto* space = spaces.m_subspaceForTestDOMJIT.get())
    1252         return space;
    1253     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDOMJIT> || !JSTestDOMJIT::needsDestruction);
    1254     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDOMJIT>)
    1255         spaces.m_subspaceForTestDOMJIT = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDOMJIT);
    1256     else
    1257         spaces.m_subspaceForTestDOMJIT = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDOMJIT);
    1258     auto* space = spaces.m_subspaceForTestDOMJIT.get();
     1251    auto& clientSpaces = clientData.clientSubspaces();
     1252    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDOMJIT.get())
     1253        return clientSpace;
     1254
     1255    auto& heapData = clientData.heapData();
     1256    Locker locker { heapData.lock() };
     1257
     1258    auto& spaces = heapData.subspaces();
     1259    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     1260    if (!space) {
     1261        Heap& heap = vm.heap;
     1262        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDOMJIT> || !JSTestDOMJIT::needsDestruction);
     1263        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDOMJIT>)
     1264            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDOMJIT);
     1265        else
     1266            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDOMJIT);
     1267        spaces.m_subspaceForTestDOMJIT = std::unique_ptr<IsoSubspace>(space);
    12591268IGNORE_WARNINGS_BEGIN("unreachable-code")
    12601269IGNORE_WARNINGS_BEGIN("tautological-compare")
    1261     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDOMJIT::visitOutputConstraints;
    1262     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    1263     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    1264         clientData.outputConstraintSpaces().append(space);
     1270        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDOMJIT::visitOutputConstraints;
     1271        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     1272        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     1273            heapData.outputConstraintSpaces().append(space);
    12651274IGNORE_WARNINGS_END
    12661275IGNORE_WARNINGS_END
    1267     return space;
     1276    }
     1277
     1278    clientSpaces.m_clientSubspaceForTestDOMJIT = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     1279    return clientSpaces.m_clientSubspaceForTestDOMJIT.get();
    12681280}
    12691281
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060    TestDOMJIT& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "EventNames.h"
     
    122123    DECLARE_INFO;
    123124    template<typename CellType, JSC::SubspaceAccess>
    124     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     125    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    125126    {
    126127        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONPrototype, Base);
     
    801802}
    802803
    803 JSC::IsoSubspace* JSTestDefaultToJSON::subspaceForImpl(JSC::VM& vm)
     804JSC::GCClient::IsoSubspace* JSTestDefaultToJSON::subspaceForImpl(JSC::VM& vm)
    804805{
    805806    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    806     auto& spaces = clientData.subspaces();
    807     if (auto* space = spaces.m_subspaceForTestDefaultToJSON.get())
    808         return space;
    809     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSON> || !JSTestDefaultToJSON::needsDestruction);
    810     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSON>)
    811         spaces.m_subspaceForTestDefaultToJSON = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDefaultToJSON);
    812     else
    813         spaces.m_subspaceForTestDefaultToJSON = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDefaultToJSON);
    814     auto* space = spaces.m_subspaceForTestDefaultToJSON.get();
     807    auto& clientSpaces = clientData.clientSubspaces();
     808    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDefaultToJSON.get())
     809        return clientSpace;
     810
     811    auto& heapData = clientData.heapData();
     812    Locker locker { heapData.lock() };
     813
     814    auto& spaces = heapData.subspaces();
     815    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     816    if (!space) {
     817        Heap& heap = vm.heap;
     818        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSON> || !JSTestDefaultToJSON::needsDestruction);
     819        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSON>)
     820            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDefaultToJSON);
     821        else
     822            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDefaultToJSON);
     823        spaces.m_subspaceForTestDefaultToJSON = std::unique_ptr<IsoSubspace>(space);
    815824IGNORE_WARNINGS_BEGIN("unreachable-code")
    816825IGNORE_WARNINGS_BEGIN("tautological-compare")
    817     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSON::visitOutputConstraints;
    818     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    819     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    820         clientData.outputConstraintSpaces().append(space);
     826        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSON::visitOutputConstraints;
     827        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     828        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     829            heapData.outputConstraintSpaces().append(space);
    821830IGNORE_WARNINGS_END
    822831IGNORE_WARNINGS_END
    823     return space;
     832    }
     833
     834    clientSpaces.m_clientSubspaceForTestDefaultToJSON = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     835    return clientSpaces.m_clientSubspaceForTestDefaultToJSON.get();
    824836}
    825837
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    7374    DECLARE_INFO;
    7475    template<typename CellType, JSC::SubspaceAccess>
    75     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     76    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7677    {
    7778        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONFilteredByExposedPrototype, Base);
     
    263264}
    264265
    265 JSC::IsoSubspace* JSTestDefaultToJSONFilteredByExposed::subspaceForImpl(JSC::VM& vm)
     266JSC::GCClient::IsoSubspace* JSTestDefaultToJSONFilteredByExposed::subspaceForImpl(JSC::VM& vm)
    266267{
    267268    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    268     auto& spaces = clientData.subspaces();
    269     if (auto* space = spaces.m_subspaceForTestDefaultToJSONFilteredByExposed.get())
    270         return space;
    271     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONFilteredByExposed> || !JSTestDefaultToJSONFilteredByExposed::needsDestruction);
    272     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONFilteredByExposed>)
    273         spaces.m_subspaceForTestDefaultToJSONFilteredByExposed = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDefaultToJSONFilteredByExposed);
    274     else
    275         spaces.m_subspaceForTestDefaultToJSONFilteredByExposed = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDefaultToJSONFilteredByExposed);
    276     auto* space = spaces.m_subspaceForTestDefaultToJSONFilteredByExposed.get();
     269    auto& clientSpaces = clientData.clientSubspaces();
     270    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDefaultToJSONFilteredByExposed.get())
     271        return clientSpace;
     272
     273    auto& heapData = clientData.heapData();
     274    Locker locker { heapData.lock() };
     275
     276    auto& spaces = heapData.subspaces();
     277    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     278    if (!space) {
     279        Heap& heap = vm.heap;
     280        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONFilteredByExposed> || !JSTestDefaultToJSONFilteredByExposed::needsDestruction);
     281        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONFilteredByExposed>)
     282            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDefaultToJSONFilteredByExposed);
     283        else
     284            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDefaultToJSONFilteredByExposed);
     285        spaces.m_subspaceForTestDefaultToJSONFilteredByExposed = std::unique_ptr<IsoSubspace>(space);
    277286IGNORE_WARNINGS_BEGIN("unreachable-code")
    278287IGNORE_WARNINGS_BEGIN("tautological-compare")
    279     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONFilteredByExposed::visitOutputConstraints;
    280     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    281     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    282         clientData.outputConstraintSpaces().append(space);
     288        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONFilteredByExposed::visitOutputConstraints;
     289        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     290        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     291            heapData.outputConstraintSpaces().append(space);
    283292IGNORE_WARNINGS_END
    284293IGNORE_WARNINGS_END
    285     return space;
     294    }
     295
     296    clientSpaces.m_clientSubspaceForTestDefaultToJSONFilteredByExposed = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     297    return clientSpaces.m_clientSubspaceForTestDefaultToJSONFilteredByExposed.get();
    286298}
    287299
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6061    DECLARE_INFO;
    6162    template<typename CellType, JSC::SubspaceAccess>
    62     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     63    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6364    {
    6465        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONIndirectInheritancePrototype, Base);
     
    155156}
    156157
    157 JSC::IsoSubspace* JSTestDefaultToJSONIndirectInheritance::subspaceForImpl(JSC::VM& vm)
     158JSC::GCClient::IsoSubspace* JSTestDefaultToJSONIndirectInheritance::subspaceForImpl(JSC::VM& vm)
    158159{
    159160    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    160     auto& spaces = clientData.subspaces();
    161     if (auto* space = spaces.m_subspaceForTestDefaultToJSONIndirectInheritance.get())
    162         return space;
    163     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONIndirectInheritance> || !JSTestDefaultToJSONIndirectInheritance::needsDestruction);
    164     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONIndirectInheritance>)
    165         spaces.m_subspaceForTestDefaultToJSONIndirectInheritance = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDefaultToJSONIndirectInheritance);
    166     else
    167         spaces.m_subspaceForTestDefaultToJSONIndirectInheritance = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDefaultToJSONIndirectInheritance);
    168     auto* space = spaces.m_subspaceForTestDefaultToJSONIndirectInheritance.get();
     161    auto& clientSpaces = clientData.clientSubspaces();
     162    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDefaultToJSONIndirectInheritance.get())
     163        return clientSpace;
     164
     165    auto& heapData = clientData.heapData();
     166    Locker locker { heapData.lock() };
     167
     168    auto& spaces = heapData.subspaces();
     169    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     170    if (!space) {
     171        Heap& heap = vm.heap;
     172        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONIndirectInheritance> || !JSTestDefaultToJSONIndirectInheritance::needsDestruction);
     173        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONIndirectInheritance>)
     174            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDefaultToJSONIndirectInheritance);
     175        else
     176            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDefaultToJSONIndirectInheritance);
     177        spaces.m_subspaceForTestDefaultToJSONIndirectInheritance = std::unique_ptr<IsoSubspace>(space);
    169178IGNORE_WARNINGS_BEGIN("unreachable-code")
    170179IGNORE_WARNINGS_BEGIN("tautological-compare")
    171     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONIndirectInheritance::visitOutputConstraints;
    172     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    173     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    174         clientData.outputConstraintSpaces().append(space);
     180        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONIndirectInheritance::visitOutputConstraints;
     181        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     182        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     183            heapData.outputConstraintSpaces().append(space);
    175184IGNORE_WARNINGS_END
    176185IGNORE_WARNINGS_END
    177     return space;
     186    }
     187
     188    clientSpaces.m_clientSubspaceForTestDefaultToJSONIndirectInheritance = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     189    return clientSpaces.m_clientSubspaceForTestDefaultToJSONIndirectInheritance.get();
    178190}
    179191
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.h

    r285730 r290129  
    4949
    5050    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    51     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     51    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5252    {
    5353        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5555        return subspaceForImpl(vm);
    5656    }
    57     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     57    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5858    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5959    TestDefaultToJSONIndirectInheritance& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    8788    DECLARE_INFO;
    8889    template<typename CellType, JSC::SubspaceAccess>
    89     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     90    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9091    {
    9192        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONInheritPrototype, Base);
     
    285286}
    286287
    287 JSC::IsoSubspace* JSTestDefaultToJSONInherit::subspaceForImpl(JSC::VM& vm)
     288JSC::GCClient::IsoSubspace* JSTestDefaultToJSONInherit::subspaceForImpl(JSC::VM& vm)
    288289{
    289290    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    290     auto& spaces = clientData.subspaces();
    291     if (auto* space = spaces.m_subspaceForTestDefaultToJSONInherit.get())
    292         return space;
    293     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInherit> || !JSTestDefaultToJSONInherit::needsDestruction);
    294     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInherit>)
    295         spaces.m_subspaceForTestDefaultToJSONInherit = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDefaultToJSONInherit);
    296     else
    297         spaces.m_subspaceForTestDefaultToJSONInherit = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDefaultToJSONInherit);
    298     auto* space = spaces.m_subspaceForTestDefaultToJSONInherit.get();
     291    auto& clientSpaces = clientData.clientSubspaces();
     292    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDefaultToJSONInherit.get())
     293        return clientSpace;
     294
     295    auto& heapData = clientData.heapData();
     296    Locker locker { heapData.lock() };
     297
     298    auto& spaces = heapData.subspaces();
     299    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     300    if (!space) {
     301        Heap& heap = vm.heap;
     302        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInherit> || !JSTestDefaultToJSONInherit::needsDestruction);
     303        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInherit>)
     304            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDefaultToJSONInherit);
     305        else
     306            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDefaultToJSONInherit);
     307        spaces.m_subspaceForTestDefaultToJSONInherit = std::unique_ptr<IsoSubspace>(space);
    299308IGNORE_WARNINGS_BEGIN("unreachable-code")
    300309IGNORE_WARNINGS_BEGIN("tautological-compare")
    301     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONInherit::visitOutputConstraints;
    302     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    303     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    304         clientData.outputConstraintSpaces().append(space);
     310        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONInherit::visitOutputConstraints;
     311        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     312        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     313            heapData.outputConstraintSpaces().append(space);
    305314IGNORE_WARNINGS_END
    306315IGNORE_WARNINGS_END
    307     return space;
     316    }
     317
     318    clientSpaces.m_clientSubspaceForTestDefaultToJSONInherit = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     319    return clientSpaces.m_clientSubspaceForTestDefaultToJSONInherit.get();
    308320}
    309321
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.h

    r285730 r290129  
    4949
    5050    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    51     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     51    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5252    {
    5353        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5555        return subspaceForImpl(vm);
    5656    }
    57     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     57    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5858    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5959    TestDefaultToJSONInherit& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    8990    DECLARE_INFO;
    9091    template<typename CellType, JSC::SubspaceAccess>
    91     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     92    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9293    {
    9394        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDefaultToJSONInheritFinalPrototype, Base);
     
    325326}
    326327
    327 JSC::IsoSubspace* JSTestDefaultToJSONInheritFinal::subspaceForImpl(JSC::VM& vm)
     328JSC::GCClient::IsoSubspace* JSTestDefaultToJSONInheritFinal::subspaceForImpl(JSC::VM& vm)
    328329{
    329330    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    330     auto& spaces = clientData.subspaces();
    331     if (auto* space = spaces.m_subspaceForTestDefaultToJSONInheritFinal.get())
    332         return space;
    333     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInheritFinal> || !JSTestDefaultToJSONInheritFinal::needsDestruction);
    334     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInheritFinal>)
    335         spaces.m_subspaceForTestDefaultToJSONInheritFinal = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDefaultToJSONInheritFinal);
    336     else
    337         spaces.m_subspaceForTestDefaultToJSONInheritFinal = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDefaultToJSONInheritFinal);
    338     auto* space = spaces.m_subspaceForTestDefaultToJSONInheritFinal.get();
     331    auto& clientSpaces = clientData.clientSubspaces();
     332    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDefaultToJSONInheritFinal.get())
     333        return clientSpace;
     334
     335    auto& heapData = clientData.heapData();
     336    Locker locker { heapData.lock() };
     337
     338    auto& spaces = heapData.subspaces();
     339    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     340    if (!space) {
     341        Heap& heap = vm.heap;
     342        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInheritFinal> || !JSTestDefaultToJSONInheritFinal::needsDestruction);
     343        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDefaultToJSONInheritFinal>)
     344            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDefaultToJSONInheritFinal);
     345        else
     346            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDefaultToJSONInheritFinal);
     347        spaces.m_subspaceForTestDefaultToJSONInheritFinal = std::unique_ptr<IsoSubspace>(space);
    339348IGNORE_WARNINGS_BEGIN("unreachable-code")
    340349IGNORE_WARNINGS_BEGIN("tautological-compare")
    341     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONInheritFinal::visitOutputConstraints;
    342     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    343     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    344         clientData.outputConstraintSpaces().append(space);
     350        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDefaultToJSONInheritFinal::visitOutputConstraints;
     351        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     352        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     353            heapData.outputConstraintSpaces().append(space);
    345354IGNORE_WARNINGS_END
    346355IGNORE_WARNINGS_END
    347     return space;
     356    }
     357
     358    clientSpaces.m_clientSubspaceForTestDefaultToJSONInheritFinal = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     359    return clientSpaces.m_clientSubspaceForTestDefaultToJSONInheritFinal.get();
    348360}
    349361
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.h

    r285730 r290129  
    4949
    5050    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    51     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     51    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5252    {
    5353        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5555        return subspaceForImpl(vm);
    5656    }
    57     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     57    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5858    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5959    TestDefaultToJSONInheritFinal& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp

    r288118 r290129  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
     26#include "DOMClientIsoSubspaces.h"
    2627#include "DOMIsoSubspaces.h"
    2728#include "JSDOMAttribute.h"
     
    6869    DECLARE_INFO;
    6970    template<typename CellType, JSC::SubspaceAccess>
    70     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     71    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7172    {
    7273        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDelegateToSharedSyntheticAttributePrototype, Base);
     
    239240}
    240241
    241 JSC::IsoSubspace* JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl(JSC::VM& vm)
     242JSC::GCClient::IsoSubspace* JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl(JSC::VM& vm)
    242243{
    243244    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    244     auto& spaces = clientData.subspaces();
    245     if (auto* space = spaces.m_subspaceForTestDelegateToSharedSyntheticAttribute.get())
    246         return space;
    247     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDelegateToSharedSyntheticAttribute> || !JSTestDelegateToSharedSyntheticAttribute::needsDestruction);
    248     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDelegateToSharedSyntheticAttribute>)
    249         spaces.m_subspaceForTestDelegateToSharedSyntheticAttribute = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDelegateToSharedSyntheticAttribute);
    250     else
    251         spaces.m_subspaceForTestDelegateToSharedSyntheticAttribute = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDelegateToSharedSyntheticAttribute);
    252     auto* space = spaces.m_subspaceForTestDelegateToSharedSyntheticAttribute.get();
     245    auto& clientSpaces = clientData.clientSubspaces();
     246    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDelegateToSharedSyntheticAttribute.get())
     247        return clientSpace;
     248
     249    auto& heapData = clientData.heapData();
     250    Locker locker { heapData.lock() };
     251
     252    auto& spaces = heapData.subspaces();
     253    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     254    if (!space) {
     255        Heap& heap = vm.heap;
     256        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDelegateToSharedSyntheticAttribute> || !JSTestDelegateToSharedSyntheticAttribute::needsDestruction);
     257        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDelegateToSharedSyntheticAttribute>)
     258            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDelegateToSharedSyntheticAttribute);
     259        else
     260            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDelegateToSharedSyntheticAttribute);
     261        spaces.m_subspaceForTestDelegateToSharedSyntheticAttribute = std::unique_ptr<IsoSubspace>(space);
    253262IGNORE_WARNINGS_BEGIN("unreachable-code")
    254263IGNORE_WARNINGS_BEGIN("tautological-compare")
    255     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDelegateToSharedSyntheticAttribute::visitOutputConstraints;
    256     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    257     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    258         clientData.outputConstraintSpaces().append(space);
     264        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDelegateToSharedSyntheticAttribute::visitOutputConstraints;
     265        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     266        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     267            heapData.outputConstraintSpaces().append(space);
    259268IGNORE_WARNINGS_END
    260269IGNORE_WARNINGS_END
    261     return space;
     270    }
     271
     272    clientSpaces.m_clientSubspaceForTestDelegateToSharedSyntheticAttribute = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     273    return clientSpaces.m_clientSubspaceForTestDelegateToSharedSyntheticAttribute.get();
    262274}
    263275
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp

    r288118 r290129  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
     26#include "DOMClientIsoSubspaces.h"
    2627#include "DOMIsoSubspaces.h"
    2728#include "IDLTypes.h"
     
    7879    DECLARE_INFO;
    7980    template<typename CellType, JSC::SubspaceAccess>
    80     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     81    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8182    {
    8283        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestDomainSecurityPrototype, Base);
     
    313314}
    314315
    315 JSC::IsoSubspace* JSTestDomainSecurity::subspaceForImpl(JSC::VM& vm)
     316JSC::GCClient::IsoSubspace* JSTestDomainSecurity::subspaceForImpl(JSC::VM& vm)
    316317{
    317318    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    318     auto& spaces = clientData.subspaces();
    319     if (auto* space = spaces.m_subspaceForTestDomainSecurity.get())
    320         return space;
    321     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDomainSecurity> || !JSTestDomainSecurity::needsDestruction);
    322     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDomainSecurity>)
    323         spaces.m_subspaceForTestDomainSecurity = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestDomainSecurity);
    324     else
    325         spaces.m_subspaceForTestDomainSecurity = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestDomainSecurity);
    326     auto* space = spaces.m_subspaceForTestDomainSecurity.get();
     319    auto& clientSpaces = clientData.clientSubspaces();
     320    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestDomainSecurity.get())
     321        return clientSpace;
     322
     323    auto& heapData = clientData.heapData();
     324    Locker locker { heapData.lock() };
     325
     326    auto& spaces = heapData.subspaces();
     327    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     328    if (!space) {
     329        Heap& heap = vm.heap;
     330        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestDomainSecurity> || !JSTestDomainSecurity::needsDestruction);
     331        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestDomainSecurity>)
     332            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestDomainSecurity);
     333        else
     334            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestDomainSecurity);
     335        spaces.m_subspaceForTestDomainSecurity = std::unique_ptr<IsoSubspace>(space);
    327336IGNORE_WARNINGS_BEGIN("unreachable-code")
    328337IGNORE_WARNINGS_BEGIN("tautological-compare")
    329     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDomainSecurity::visitOutputConstraints;
    330     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    331     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    332         clientData.outputConstraintSpaces().append(space);
     338        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestDomainSecurity::visitOutputConstraints;
     339        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     340        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     341            heapData.outputConstraintSpaces().append(space);
    333342IGNORE_WARNINGS_END
    334343IGNORE_WARNINGS_END
    335     return space;
     344    }
     345
     346    clientSpaces.m_clientSubspaceForTestDomainSecurity = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     347    return clientSpaces.m_clientSubspaceForTestDomainSecurity.get();
    336348}
    337349
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    9091    DECLARE_INFO;
    9192    template<typename CellType, JSC::SubspaceAccess>
    92     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     93    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9394    {
    9495        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEnabledBySettingPrototype, Base);
     
    452453#endif
    453454
    454 JSC::IsoSubspace* JSTestEnabledBySetting::subspaceForImpl(JSC::VM& vm)
     455JSC::GCClient::IsoSubspace* JSTestEnabledBySetting::subspaceForImpl(JSC::VM& vm)
    455456{
    456457    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    457     auto& spaces = clientData.subspaces();
    458     if (auto* space = spaces.m_subspaceForTestEnabledBySetting.get())
    459         return space;
    460     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledBySetting> || !JSTestEnabledBySetting::needsDestruction);
    461     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledBySetting>)
    462         spaces.m_subspaceForTestEnabledBySetting = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestEnabledBySetting);
    463     else
    464         spaces.m_subspaceForTestEnabledBySetting = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestEnabledBySetting);
    465     auto* space = spaces.m_subspaceForTestEnabledBySetting.get();
     458    auto& clientSpaces = clientData.clientSubspaces();
     459    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestEnabledBySetting.get())
     460        return clientSpace;
     461
     462    auto& heapData = clientData.heapData();
     463    Locker locker { heapData.lock() };
     464
     465    auto& spaces = heapData.subspaces();
     466    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     467    if (!space) {
     468        Heap& heap = vm.heap;
     469        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledBySetting> || !JSTestEnabledBySetting::needsDestruction);
     470        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledBySetting>)
     471            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestEnabledBySetting);
     472        else
     473            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestEnabledBySetting);
     474        spaces.m_subspaceForTestEnabledBySetting = std::unique_ptr<IsoSubspace>(space);
    466475IGNORE_WARNINGS_BEGIN("unreachable-code")
    467476IGNORE_WARNINGS_BEGIN("tautological-compare")
    468     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEnabledBySetting::visitOutputConstraints;
    469     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    470     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    471         clientData.outputConstraintSpaces().append(space);
     477        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEnabledBySetting::visitOutputConstraints;
     478        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     479        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     480            heapData.outputConstraintSpaces().append(space);
    472481IGNORE_WARNINGS_END
    473482IGNORE_WARNINGS_END
    474     return space;
     483    }
     484
     485    clientSpaces.m_clientSubspaceForTestEnabledBySetting = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     486    return clientSpaces.m_clientSubspaceForTestEnabledBySetting.get();
    475487}
    476488
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEnabledForContextPrototype, Base);
     
    179180}
    180181
    181 JSC::IsoSubspace* JSTestEnabledForContext::subspaceForImpl(JSC::VM& vm)
     182JSC::GCClient::IsoSubspace* JSTestEnabledForContext::subspaceForImpl(JSC::VM& vm)
    182183{
    183184    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    184     auto& spaces = clientData.subspaces();
    185     if (auto* space = spaces.m_subspaceForTestEnabledForContext.get())
    186         return space;
    187     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledForContext> || !JSTestEnabledForContext::needsDestruction);
    188     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledForContext>)
    189         spaces.m_subspaceForTestEnabledForContext = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestEnabledForContext);
    190     else
    191         spaces.m_subspaceForTestEnabledForContext = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestEnabledForContext);
    192     auto* space = spaces.m_subspaceForTestEnabledForContext.get();
     185    auto& clientSpaces = clientData.clientSubspaces();
     186    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestEnabledForContext.get())
     187        return clientSpace;
     188
     189    auto& heapData = clientData.heapData();
     190    Locker locker { heapData.lock() };
     191
     192    auto& spaces = heapData.subspaces();
     193    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     194    if (!space) {
     195        Heap& heap = vm.heap;
     196        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledForContext> || !JSTestEnabledForContext::needsDestruction);
     197        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEnabledForContext>)
     198            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestEnabledForContext);
     199        else
     200            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestEnabledForContext);
     201        spaces.m_subspaceForTestEnabledForContext = std::unique_ptr<IsoSubspace>(space);
    193202IGNORE_WARNINGS_BEGIN("unreachable-code")
    194203IGNORE_WARNINGS_BEGIN("tautological-compare")
    195     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEnabledForContext::visitOutputConstraints;
    196     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    197     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    198         clientData.outputConstraintSpaces().append(space);
     204        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEnabledForContext::visitOutputConstraints;
     205        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     206        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     207            heapData.outputConstraintSpaces().append(space);
    199208IGNORE_WARNINGS_END
    200209IGNORE_WARNINGS_END
    201     return space;
     210    }
     211
     212    clientSpaces.m_clientSubspaceForTestEnabledForContext = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     213    return clientSpaces.m_clientSubspaceForTestEnabledForContext.get();
    202214}
    203215
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    145146    DECLARE_INFO;
    146147    template<typename CellType, JSC::SubspaceAccess>
    147     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     148    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    148149    {
    149150        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEventConstructorPrototype, Base);
     
    316317#endif
    317318
    318 JSC::IsoSubspace* JSTestEventConstructor::subspaceForImpl(JSC::VM& vm)
     319JSC::GCClient::IsoSubspace* JSTestEventConstructor::subspaceForImpl(JSC::VM& vm)
    319320{
    320321    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    321     auto& spaces = clientData.subspaces();
    322     if (auto* space = spaces.m_subspaceForTestEventConstructor.get())
    323         return space;
    324     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventConstructor> || !JSTestEventConstructor::needsDestruction);
    325     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventConstructor>)
    326         spaces.m_subspaceForTestEventConstructor = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestEventConstructor);
    327     else
    328         spaces.m_subspaceForTestEventConstructor = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestEventConstructor);
    329     auto* space = spaces.m_subspaceForTestEventConstructor.get();
     322    auto& clientSpaces = clientData.clientSubspaces();
     323    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestEventConstructor.get())
     324        return clientSpace;
     325
     326    auto& heapData = clientData.heapData();
     327    Locker locker { heapData.lock() };
     328
     329    auto& spaces = heapData.subspaces();
     330    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     331    if (!space) {
     332        Heap& heap = vm.heap;
     333        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventConstructor> || !JSTestEventConstructor::needsDestruction);
     334        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventConstructor>)
     335            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestEventConstructor);
     336        else
     337            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestEventConstructor);
     338        spaces.m_subspaceForTestEventConstructor = std::unique_ptr<IsoSubspace>(space);
    330339IGNORE_WARNINGS_BEGIN("unreachable-code")
    331340IGNORE_WARNINGS_BEGIN("tautological-compare")
    332     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEventConstructor::visitOutputConstraints;
    333     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    334     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    335         clientData.outputConstraintSpaces().append(space);
     341        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEventConstructor::visitOutputConstraints;
     342        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     343        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     344            heapData.outputConstraintSpaces().append(space);
    336345IGNORE_WARNINGS_END
    337346IGNORE_WARNINGS_END
    338     return space;
     347    }
     348
     349    clientSpaces.m_clientSubspaceForTestEventConstructor = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     350    return clientSpaces.m_clientSubspaceForTestEventConstructor.get();
    339351}
    340352
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060    TestEventConstructor& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    7172    DECLARE_INFO;
    7273    template<typename CellType, JSC::SubspaceAccess>
    73     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     74    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7475    {
    7576        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestEventTargetPrototype, Base);
     
    255256}
    256257
    257 JSC::IsoSubspace* JSTestEventTarget::subspaceForImpl(JSC::VM& vm)
     258JSC::GCClient::IsoSubspace* JSTestEventTarget::subspaceForImpl(JSC::VM& vm)
    258259{
    259260    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    260     auto& spaces = clientData.subspaces();
    261     if (auto* space = spaces.m_subspaceForTestEventTarget.get())
    262         return space;
    263     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventTarget> || !JSTestEventTarget::needsDestruction);
    264     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventTarget>)
    265         spaces.m_subspaceForTestEventTarget = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestEventTarget);
    266     else
    267         spaces.m_subspaceForTestEventTarget = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestEventTarget);
    268     auto* space = spaces.m_subspaceForTestEventTarget.get();
     261    auto& clientSpaces = clientData.clientSubspaces();
     262    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestEventTarget.get())
     263        return clientSpace;
     264
     265    auto& heapData = clientData.heapData();
     266    Locker locker { heapData.lock() };
     267
     268    auto& spaces = heapData.subspaces();
     269    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     270    if (!space) {
     271        Heap& heap = vm.heap;
     272        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventTarget> || !JSTestEventTarget::needsDestruction);
     273        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestEventTarget>)
     274            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestEventTarget);
     275        else
     276            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestEventTarget);
     277        spaces.m_subspaceForTestEventTarget = std::unique_ptr<IsoSubspace>(space);
    269278IGNORE_WARNINGS_BEGIN("unreachable-code")
    270279IGNORE_WARNINGS_BEGIN("tautological-compare")
    271     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEventTarget::visitOutputConstraints;
    272     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    273     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    274         clientData.outputConstraintSpaces().append(space);
     280        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestEventTarget::visitOutputConstraints;
     281        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     282        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     283            heapData.outputConstraintSpaces().append(space);
    275284IGNORE_WARNINGS_END
    276285IGNORE_WARNINGS_END
    277     return space;
     286    }
     287
     288    clientSpaces.m_clientSubspaceForTestEventTarget = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     289    return clientSpaces.m_clientSubspaceForTestEventTarget.get();
    278290}
    279291
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h

    r285730 r290129  
    5454
    5555    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    56     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     56    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5757    {
    5858        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6060        return subspaceForImpl(vm);
    6161    }
    62     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     62    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6363    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6464    TestEventTarget& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestExceptionPrototype, Base);
     
    180181}
    181182
    182 JSC::IsoSubspace* JSTestException::subspaceForImpl(JSC::VM& vm)
     183JSC::GCClient::IsoSubspace* JSTestException::subspaceForImpl(JSC::VM& vm)
    183184{
    184185    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    185     auto& spaces = clientData.subspaces();
    186     if (auto* space = spaces.m_subspaceForTestException.get())
    187         return space;
    188     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestException> || !JSTestException::needsDestruction);
    189     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestException>)
    190         spaces.m_subspaceForTestException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestException);
    191     else
    192         spaces.m_subspaceForTestException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestException);
    193     auto* space = spaces.m_subspaceForTestException.get();
     186    auto& clientSpaces = clientData.clientSubspaces();
     187    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestException.get())
     188        return clientSpace;
     189
     190    auto& heapData = clientData.heapData();
     191    Locker locker { heapData.lock() };
     192
     193    auto& spaces = heapData.subspaces();
     194    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     195    if (!space) {
     196        Heap& heap = vm.heap;
     197        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestException> || !JSTestException::needsDestruction);
     198        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestException>)
     199            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestException);
     200        else
     201            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestException);
     202        spaces.m_subspaceForTestException = std::unique_ptr<IsoSubspace>(space);
    194203IGNORE_WARNINGS_BEGIN("unreachable-code")
    195204IGNORE_WARNINGS_BEGIN("tautological-compare")
    196     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestException::visitOutputConstraints;
    197     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    198     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    199         clientData.outputConstraintSpaces().append(space);
     205        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestException::visitOutputConstraints;
     206        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     207        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     208            heapData.outputConstraintSpaces().append(space);
    200209IGNORE_WARNINGS_END
    201210IGNORE_WARNINGS_END
    202     return space;
     211    }
     212
     213    clientSpaces.m_clientSubspaceForTestException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     214    return clientSpaces.m_clientSubspaceForTestException.get();
    203215}
    204216
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h

    r285730 r290129  
    5151
    5252    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestGenerateAddOpaqueRootPrototype, Base);
     
    180181}
    181182
    182 JSC::IsoSubspace* JSTestGenerateAddOpaqueRoot::subspaceForImpl(JSC::VM& vm)
     183JSC::GCClient::IsoSubspace* JSTestGenerateAddOpaqueRoot::subspaceForImpl(JSC::VM& vm)
    183184{
    184185    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    185     auto& spaces = clientData.subspaces();
    186     if (auto* space = spaces.m_subspaceForTestGenerateAddOpaqueRoot.get())
    187         return space;
    188     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateAddOpaqueRoot> || !JSTestGenerateAddOpaqueRoot::needsDestruction);
    189     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateAddOpaqueRoot>)
    190         spaces.m_subspaceForTestGenerateAddOpaqueRoot = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestGenerateAddOpaqueRoot);
    191     else
    192         spaces.m_subspaceForTestGenerateAddOpaqueRoot = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestGenerateAddOpaqueRoot);
    193     auto* space = spaces.m_subspaceForTestGenerateAddOpaqueRoot.get();
     186    auto& clientSpaces = clientData.clientSubspaces();
     187    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestGenerateAddOpaqueRoot.get())
     188        return clientSpace;
     189
     190    auto& heapData = clientData.heapData();
     191    Locker locker { heapData.lock() };
     192
     193    auto& spaces = heapData.subspaces();
     194    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     195    if (!space) {
     196        Heap& heap = vm.heap;
     197        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateAddOpaqueRoot> || !JSTestGenerateAddOpaqueRoot::needsDestruction);
     198        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateAddOpaqueRoot>)
     199            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestGenerateAddOpaqueRoot);
     200        else
     201            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestGenerateAddOpaqueRoot);
     202        spaces.m_subspaceForTestGenerateAddOpaqueRoot = std::unique_ptr<IsoSubspace>(space);
    194203IGNORE_WARNINGS_BEGIN("unreachable-code")
    195204IGNORE_WARNINGS_BEGIN("tautological-compare")
    196     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestGenerateAddOpaqueRoot::visitOutputConstraints;
    197     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    198     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    199         clientData.outputConstraintSpaces().append(space);
     205        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestGenerateAddOpaqueRoot::visitOutputConstraints;
     206        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     207        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     208            heapData.outputConstraintSpaces().append(space);
    200209IGNORE_WARNINGS_END
    201210IGNORE_WARNINGS_END
    202     return space;
     211    }
     212
     213    clientSpaces.m_clientSubspaceForTestGenerateAddOpaqueRoot = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     214    return clientSpaces.m_clientSubspaceForTestGenerateAddOpaqueRoot.get();
    203215}
    204216
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    DECLARE_VISIT_CHILDREN;
    6060
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestGenerateIsReachablePrototype, Base);
     
    190191}
    191192
    192 JSC::IsoSubspace* JSTestGenerateIsReachable::subspaceForImpl(JSC::VM& vm)
     193JSC::GCClient::IsoSubspace* JSTestGenerateIsReachable::subspaceForImpl(JSC::VM& vm)
    193194{
    194195    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    195     auto& spaces = clientData.subspaces();
    196     if (auto* space = spaces.m_subspaceForTestGenerateIsReachable.get())
    197         return space;
    198     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateIsReachable> || !JSTestGenerateIsReachable::needsDestruction);
    199     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateIsReachable>)
    200         spaces.m_subspaceForTestGenerateIsReachable = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestGenerateIsReachable);
    201     else
    202         spaces.m_subspaceForTestGenerateIsReachable = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestGenerateIsReachable);
    203     auto* space = spaces.m_subspaceForTestGenerateIsReachable.get();
     196    auto& clientSpaces = clientData.clientSubspaces();
     197    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestGenerateIsReachable.get())
     198        return clientSpace;
     199
     200    auto& heapData = clientData.heapData();
     201    Locker locker { heapData.lock() };
     202
     203    auto& spaces = heapData.subspaces();
     204    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     205    if (!space) {
     206        Heap& heap = vm.heap;
     207        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateIsReachable> || !JSTestGenerateIsReachable::needsDestruction);
     208        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestGenerateIsReachable>)
     209            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestGenerateIsReachable);
     210        else
     211            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestGenerateIsReachable);
     212        spaces.m_subspaceForTestGenerateIsReachable = std::unique_ptr<IsoSubspace>(space);
    204213IGNORE_WARNINGS_BEGIN("unreachable-code")
    205214IGNORE_WARNINGS_BEGIN("tautological-compare")
    206     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestGenerateIsReachable::visitOutputConstraints;
    207     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    208     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    209         clientData.outputConstraintSpaces().append(space);
     215        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestGenerateIsReachable::visitOutputConstraints;
     216        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     217        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     218            heapData.outputConstraintSpaces().append(space);
    210219IGNORE_WARNINGS_END
    211220IGNORE_WARNINGS_END
    212     return space;
     221    }
     222
     223    clientSpaces.m_clientSubspaceForTestGenerateIsReachable = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     224    return clientSpaces.m_clientSubspaceForTestGenerateIsReachable.get();
    213225}
    214226
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp

    r289531 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "DOMPromiseProxy.h"
     
    18231824#endif
    18241825
    1825 JSC::IsoSubspace* JSTestGlobalObject::subspaceForImpl(JSC::VM& vm)
     1826JSC::GCClient::IsoSubspace* JSTestGlobalObject::subspaceForImpl(JSC::VM& vm)
    18261827{
    18271828    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    1828     auto& spaces = clientData.subspaces();
    1829     if (auto* space = spaces.m_subspaceForTestGlobalObject.get())
    1830         return space;
    1831     spaces.m_subspaceForTestGlobalObject = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSTestGlobalObject, JSTestGlobalObject);
    1832     auto* space = spaces.m_subspaceForTestGlobalObject.get();
     1829    auto& clientSpaces = clientData.clientSubspaces();
     1830    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestGlobalObject.get())
     1831        return clientSpace;
     1832
     1833    auto& heapData = clientData.heapData();
     1834    Locker locker { heapData.lock() };
     1835
     1836    auto& spaces = heapData.subspaces();
     1837    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     1838    if (!space) {
     1839        Heap& heap = vm.heap;
     1840        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSTestGlobalObject, JSTestGlobalObject);
     1841        spaces.m_subspaceForTestGlobalObject = std::unique_ptr<IsoSubspace>(space);
    18331842IGNORE_WARNINGS_BEGIN("unreachable-code")
    18341843IGNORE_WARNINGS_BEGIN("tautological-compare")
    1835     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestGlobalObject::visitOutputConstraints;
    1836     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    1837     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    1838         clientData.outputConstraintSpaces().append(space);
     1844        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestGlobalObject::visitOutputConstraints;
     1845        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     1846        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     1847            heapData.outputConstraintSpaces().append(space);
    18391848IGNORE_WARNINGS_END
    18401849IGNORE_WARNINGS_END
    1841     return space;
     1850    }
     1851
     1852    clientSpaces.m_clientSubspaceForTestGlobalObject = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     1853    return clientSpaces.m_clientSubspaceForTestGlobalObject.get();
    18421854}
    18431855
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h

    r286347 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060public:
     
    9696    DECLARE_INFO;
    9797    template<typename CellType, JSC::SubspaceAccess>
    98     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     98    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9999    {
    100100        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestGlobalObjectPrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIndexedSetterNoIdentifierPrototype, Base);
     
    269270}
    270271
    271 JSC::IsoSubspace* JSTestIndexedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
     272JSC::GCClient::IsoSubspace* JSTestIndexedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    272273{
    273274    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    274     auto& spaces = clientData.subspaces();
    275     if (auto* space = spaces.m_subspaceForTestIndexedSetterNoIdentifier.get())
    276         return space;
    277     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterNoIdentifier> || !JSTestIndexedSetterNoIdentifier::needsDestruction);
    278     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterNoIdentifier>)
    279         spaces.m_subspaceForTestIndexedSetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestIndexedSetterNoIdentifier);
    280     else
    281         spaces.m_subspaceForTestIndexedSetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestIndexedSetterNoIdentifier);
    282     auto* space = spaces.m_subspaceForTestIndexedSetterNoIdentifier.get();
     275    auto& clientSpaces = clientData.clientSubspaces();
     276    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestIndexedSetterNoIdentifier.get())
     277        return clientSpace;
     278
     279    auto& heapData = clientData.heapData();
     280    Locker locker { heapData.lock() };
     281
     282    auto& spaces = heapData.subspaces();
     283    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     284    if (!space) {
     285        Heap& heap = vm.heap;
     286        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterNoIdentifier> || !JSTestIndexedSetterNoIdentifier::needsDestruction);
     287        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterNoIdentifier>)
     288            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestIndexedSetterNoIdentifier);
     289        else
     290            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestIndexedSetterNoIdentifier);
     291        spaces.m_subspaceForTestIndexedSetterNoIdentifier = std::unique_ptr<IsoSubspace>(space);
    283292IGNORE_WARNINGS_BEGIN("unreachable-code")
    284293IGNORE_WARNINGS_BEGIN("tautological-compare")
    285     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIndexedSetterNoIdentifier::visitOutputConstraints;
    286     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    287     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    288         clientData.outputConstraintSpaces().append(space);
     294        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIndexedSetterNoIdentifier::visitOutputConstraints;
     295        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     296        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     297            heapData.outputConstraintSpaces().append(space);
    289298IGNORE_WARNINGS_END
    290299IGNORE_WARNINGS_END
    291     return space;
     300    }
     301
     302    clientSpaces.m_clientSubspaceForTestIndexedSetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     303    return clientSpaces.m_clientSubspaceForTestIndexedSetterNoIdentifier.get();
    292304}
    293305
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIndexedSetterThrowingExceptionPrototype, Base);
     
    269270}
    270271
    271 JSC::IsoSubspace* JSTestIndexedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
     272JSC::GCClient::IsoSubspace* JSTestIndexedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
    272273{
    273274    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    274     auto& spaces = clientData.subspaces();
    275     if (auto* space = spaces.m_subspaceForTestIndexedSetterThrowingException.get())
    276         return space;
    277     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterThrowingException> || !JSTestIndexedSetterThrowingException::needsDestruction);
    278     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterThrowingException>)
    279         spaces.m_subspaceForTestIndexedSetterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestIndexedSetterThrowingException);
    280     else
    281         spaces.m_subspaceForTestIndexedSetterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestIndexedSetterThrowingException);
    282     auto* space = spaces.m_subspaceForTestIndexedSetterThrowingException.get();
     275    auto& clientSpaces = clientData.clientSubspaces();
     276    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestIndexedSetterThrowingException.get())
     277        return clientSpace;
     278
     279    auto& heapData = clientData.heapData();
     280    Locker locker { heapData.lock() };
     281
     282    auto& spaces = heapData.subspaces();
     283    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     284    if (!space) {
     285        Heap& heap = vm.heap;
     286        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterThrowingException> || !JSTestIndexedSetterThrowingException::needsDestruction);
     287        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterThrowingException>)
     288            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestIndexedSetterThrowingException);
     289        else
     290            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestIndexedSetterThrowingException);
     291        spaces.m_subspaceForTestIndexedSetterThrowingException = std::unique_ptr<IsoSubspace>(space);
    283292IGNORE_WARNINGS_BEGIN("unreachable-code")
    284293IGNORE_WARNINGS_BEGIN("tautological-compare")
    285     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIndexedSetterThrowingException::visitOutputConstraints;
    286     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    287     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    288         clientData.outputConstraintSpaces().append(space);
     294        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIndexedSetterThrowingException::visitOutputConstraints;
     295        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     296        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     297            heapData.outputConstraintSpaces().append(space);
    289298IGNORE_WARNINGS_END
    290299IGNORE_WARNINGS_END
    291     return space;
     300    }
     301
     302    clientSpaces.m_clientSubspaceForTestIndexedSetterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     303    return clientSpaces.m_clientSubspaceForTestIndexedSetterThrowingException.get();
    292304}
    293305
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7172    DECLARE_INFO;
    7273    template<typename CellType, JSC::SubspaceAccess>
    73     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     74    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7475    {
    7576        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIndexedSetterWithIdentifierPrototype, Base);
     
    301302}
    302303
    303 JSC::IsoSubspace* JSTestIndexedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
     304JSC::GCClient::IsoSubspace* JSTestIndexedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    304305{
    305306    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    306     auto& spaces = clientData.subspaces();
    307     if (auto* space = spaces.m_subspaceForTestIndexedSetterWithIdentifier.get())
    308         return space;
    309     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterWithIdentifier> || !JSTestIndexedSetterWithIdentifier::needsDestruction);
    310     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterWithIdentifier>)
    311         spaces.m_subspaceForTestIndexedSetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestIndexedSetterWithIdentifier);
    312     else
    313         spaces.m_subspaceForTestIndexedSetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestIndexedSetterWithIdentifier);
    314     auto* space = spaces.m_subspaceForTestIndexedSetterWithIdentifier.get();
     307    auto& clientSpaces = clientData.clientSubspaces();
     308    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestIndexedSetterWithIdentifier.get())
     309        return clientSpace;
     310
     311    auto& heapData = clientData.heapData();
     312    Locker locker { heapData.lock() };
     313
     314    auto& spaces = heapData.subspaces();
     315    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     316    if (!space) {
     317        Heap& heap = vm.heap;
     318        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterWithIdentifier> || !JSTestIndexedSetterWithIdentifier::needsDestruction);
     319        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIndexedSetterWithIdentifier>)
     320            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestIndexedSetterWithIdentifier);
     321        else
     322            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestIndexedSetterWithIdentifier);
     323        spaces.m_subspaceForTestIndexedSetterWithIdentifier = std::unique_ptr<IsoSubspace>(space);
    315324IGNORE_WARNINGS_BEGIN("unreachable-code")
    316325IGNORE_WARNINGS_BEGIN("tautological-compare")
    317     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIndexedSetterWithIdentifier::visitOutputConstraints;
    318     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    319     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    320         clientData.outputConstraintSpaces().append(space);
     326        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIndexedSetterWithIdentifier::visitOutputConstraints;
     327        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     328        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     329            heapData.outputConstraintSpaces().append(space);
    321330IGNORE_WARNINGS_END
    322331IGNORE_WARNINGS_END
    323     return space;
     332    }
     333
     334    clientSpaces.m_clientSubspaceForTestIndexedSetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     335    return clientSpaces.m_clientSubspaceForTestIndexedSetterWithIdentifier.get();
    324336}
    325337
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp

    r288118 r290129  
    2626
    2727#include "ActiveDOMObject.h"
     28#include "DOMClientIsoSubspaces.h"
    2829#include "DOMIsoSubspaces.h"
    2930#include "ElementInlines.h"
     
    179180    DECLARE_INFO;
    180181    template<typename CellType, JSC::SubspaceAccess>
    181     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     182    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    182183    {
    183184        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestInterfacePrototype, Base);
     
    10971098    DECLARE_INFO;
    10981099
    1099     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     1100    template<typename, SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    11001101    {
    11011102        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    11021103            return nullptr;
    11031104        auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    1104         auto& spaces = clientData.subspaces();
    1105         if (auto* space = spaces.m_subspaceForTestInterfaceIterator.get())
    1106             return space;
    1107         static_assert(std::is_base_of_v<JSC::JSDestructibleObject, TestInterfaceIterator> || !TestInterfaceIterator::needsDestruction);
    1108         if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, TestInterfaceIterator>)
    1109             spaces.m_subspaceForTestInterfaceIterator = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), TestInterfaceIterator);
    1110         else
    1111             spaces.m_subspaceForTestInterfaceIterator = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), TestInterfaceIterator);
    1112         auto* space = spaces.m_subspaceForTestInterfaceIterator.get();
     1105        auto& clientSpaces = clientData.clientSubspaces();
     1106        if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestInterfaceIterator.get())
     1107            return clientSpace;
     1108
     1109        auto& heapData = clientData.heapData();
     1110        Locker locker { heapData.lock() };
     1111
     1112        auto& spaces = heapData.subspaces();
     1113        IsoSubspace* space = spaces.m_subspaceForTestInterfaceIterator.get();
     1114        if (!space) {
     1115            Heap& heap = vm.heap;
     1116            static_assert(std::is_base_of_v<JSC::JSDestructibleObject, TestInterfaceIterator> || !TestInterfaceIterator::needsDestruction);
     1117            if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, TestInterfaceIterator>)
     1118                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, TestInterfaceIterator);
     1119            else
     1120                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, TestInterfaceIterator);
     1121            spaces.m_subspaceForTestInterfaceIterator = std::unique_ptr<IsoSubspace>(space);
    11131122IGNORE_WARNINGS_BEGIN("unreachable-code")
    11141123IGNORE_WARNINGS_BEGIN("tautological-compare")
    1115         void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = TestInterfaceIterator::visitOutputConstraints;
    1116         void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    1117         if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    1118             clientData.outputConstraintSpaces().append(space);
     1124            void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = TestInterfaceIterator::visitOutputConstraints;
     1125            void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     1126            if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     1127                heapData.outputConstraintSpaces().append(space);
    11191128IGNORE_WARNINGS_END
    11201129IGNORE_WARNINGS_END
    1121         return space;
     1130        }
     1131
     1132        clientSpaces.m_clientSubspaceForTestInterfaceIterator = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     1133        return clientSpaces.m_clientSubspaceForTestInterfaceIterator.get();
    11221134    }
    11231135
     
    11911203}
    11921204
    1193 JSC::IsoSubspace* JSTestInterface::subspaceForImpl(JSC::VM& vm)
     1205JSC::GCClient::IsoSubspace* JSTestInterface::subspaceForImpl(JSC::VM& vm)
    11941206{
    11951207    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    1196     auto& spaces = clientData.subspaces();
    1197     if (auto* space = spaces.m_subspaceForTestInterface.get())
    1198         return space;
    1199     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterface> || !JSTestInterface::needsDestruction);
    1200     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterface>)
    1201         spaces.m_subspaceForTestInterface = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestInterface);
    1202     else
    1203         spaces.m_subspaceForTestInterface = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestInterface);
    1204     auto* space = spaces.m_subspaceForTestInterface.get();
     1208    auto& clientSpaces = clientData.clientSubspaces();
     1209    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestInterface.get())
     1210        return clientSpace;
     1211
     1212    auto& heapData = clientData.heapData();
     1213    Locker locker { heapData.lock() };
     1214
     1215    auto& spaces = heapData.subspaces();
     1216    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     1217    if (!space) {
     1218        Heap& heap = vm.heap;
     1219        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterface> || !JSTestInterface::needsDestruction);
     1220        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterface>)
     1221            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestInterface);
     1222        else
     1223            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestInterface);
     1224        spaces.m_subspaceForTestInterface = std::unique_ptr<IsoSubspace>(space);
    12051225IGNORE_WARNINGS_BEGIN("unreachable-code")
    12061226IGNORE_WARNINGS_BEGIN("tautological-compare")
    1207     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestInterface::visitOutputConstraints;
    1208     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    1209     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    1210         clientData.outputConstraintSpaces().append(space);
     1227        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestInterface::visitOutputConstraints;
     1228        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     1229        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     1230            heapData.outputConstraintSpaces().append(space);
    12111231IGNORE_WARNINGS_END
    12121232IGNORE_WARNINGS_END
    1213     return space;
     1233    }
     1234
     1235    clientSpaces.m_clientSubspaceForTestInterface = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     1236    return clientSpaces.m_clientSubspaceForTestInterface.get();
    12141237}
    12151238
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h

    r285730 r290129  
    5454
    5555    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    56     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     56    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5757    {
    5858        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6060        return subspaceForImpl(vm);
    6161    }
    62     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     62    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6363    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6464
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestInterfaceLeadingUnderscorePrototype, Base);
     
    180181}
    181182
    182 JSC::IsoSubspace* JSTestInterfaceLeadingUnderscore::subspaceForImpl(JSC::VM& vm)
     183JSC::GCClient::IsoSubspace* JSTestInterfaceLeadingUnderscore::subspaceForImpl(JSC::VM& vm)
    183184{
    184185    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    185     auto& spaces = clientData.subspaces();
    186     if (auto* space = spaces.m_subspaceForTestInterfaceLeadingUnderscore.get())
    187         return space;
    188     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterfaceLeadingUnderscore> || !JSTestInterfaceLeadingUnderscore::needsDestruction);
    189     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterfaceLeadingUnderscore>)
    190         spaces.m_subspaceForTestInterfaceLeadingUnderscore = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestInterfaceLeadingUnderscore);
    191     else
    192         spaces.m_subspaceForTestInterfaceLeadingUnderscore = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestInterfaceLeadingUnderscore);
    193     auto* space = spaces.m_subspaceForTestInterfaceLeadingUnderscore.get();
     186    auto& clientSpaces = clientData.clientSubspaces();
     187    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestInterfaceLeadingUnderscore.get())
     188        return clientSpace;
     189
     190    auto& heapData = clientData.heapData();
     191    Locker locker { heapData.lock() };
     192
     193    auto& spaces = heapData.subspaces();
     194    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     195    if (!space) {
     196        Heap& heap = vm.heap;
     197        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterfaceLeadingUnderscore> || !JSTestInterfaceLeadingUnderscore::needsDestruction);
     198        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestInterfaceLeadingUnderscore>)
     199            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestInterfaceLeadingUnderscore);
     200        else
     201            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestInterfaceLeadingUnderscore);
     202        spaces.m_subspaceForTestInterfaceLeadingUnderscore = std::unique_ptr<IsoSubspace>(space);
    194203IGNORE_WARNINGS_BEGIN("unreachable-code")
    195204IGNORE_WARNINGS_BEGIN("tautological-compare")
    196     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestInterfaceLeadingUnderscore::visitOutputConstraints;
    197     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    198     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    199         clientData.outputConstraintSpaces().append(space);
     205        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestInterfaceLeadingUnderscore::visitOutputConstraints;
     206        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     207        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     208            heapData.outputConstraintSpaces().append(space);
    200209IGNORE_WARNINGS_END
    201210IGNORE_WARNINGS_END
    202     return space;
     211    }
     212
     213    clientSpaces.m_clientSubspaceForTestInterfaceLeadingUnderscore = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     214    return clientSpaces.m_clientSubspaceForTestInterfaceLeadingUnderscore.get();
    203215}
    204216
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    7374    DECLARE_INFO;
    7475    template<typename CellType, JSC::SubspaceAccess>
    75     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     76    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7677    {
    7778        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestIterablePrototype, Base);
     
    192193    DECLARE_INFO;
    193194
    194     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     195    template<typename, SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    195196    {
    196197        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    197198            return nullptr;
    198199        auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    199         auto& spaces = clientData.subspaces();
    200         if (auto* space = spaces.m_subspaceForTestIterableIterator.get())
    201             return space;
    202         static_assert(std::is_base_of_v<JSC::JSDestructibleObject, TestIterableIterator> || !TestIterableIterator::needsDestruction);
    203         if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, TestIterableIterator>)
    204             spaces.m_subspaceForTestIterableIterator = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), TestIterableIterator);
    205         else
    206             spaces.m_subspaceForTestIterableIterator = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), TestIterableIterator);
    207         auto* space = spaces.m_subspaceForTestIterableIterator.get();
     200        auto& clientSpaces = clientData.clientSubspaces();
     201        if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestIterableIterator.get())
     202            return clientSpace;
     203
     204        auto& heapData = clientData.heapData();
     205        Locker locker { heapData.lock() };
     206
     207        auto& spaces = heapData.subspaces();
     208        IsoSubspace* space = spaces.m_subspaceForTestIterableIterator.get();
     209        if (!space) {
     210            Heap& heap = vm.heap;
     211            static_assert(std::is_base_of_v<JSC::JSDestructibleObject, TestIterableIterator> || !TestIterableIterator::needsDestruction);
     212            if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, TestIterableIterator>)
     213                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, TestIterableIterator);
     214            else
     215                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, TestIterableIterator);
     216            spaces.m_subspaceForTestIterableIterator = std::unique_ptr<IsoSubspace>(space);
    208217IGNORE_WARNINGS_BEGIN("unreachable-code")
    209218IGNORE_WARNINGS_BEGIN("tautological-compare")
    210         void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = TestIterableIterator::visitOutputConstraints;
    211         void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    212         if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    213             clientData.outputConstraintSpaces().append(space);
     219            void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = TestIterableIterator::visitOutputConstraints;
     220            void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     221            if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     222                heapData.outputConstraintSpaces().append(space);
    214223IGNORE_WARNINGS_END
    215224IGNORE_WARNINGS_END
    216         return space;
     225        }
     226
     227        clientSpaces.m_clientSubspaceForTestIterableIterator = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     228        return clientSpaces.m_clientSubspaceForTestIterableIterator.get();
    217229    }
    218230
     
    286298}
    287299
    288 JSC::IsoSubspace* JSTestIterable::subspaceForImpl(JSC::VM& vm)
     300JSC::GCClient::IsoSubspace* JSTestIterable::subspaceForImpl(JSC::VM& vm)
    289301{
    290302    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    291     auto& spaces = clientData.subspaces();
    292     if (auto* space = spaces.m_subspaceForTestIterable.get())
    293         return space;
    294     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIterable> || !JSTestIterable::needsDestruction);
    295     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIterable>)
    296         spaces.m_subspaceForTestIterable = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestIterable);
    297     else
    298         spaces.m_subspaceForTestIterable = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestIterable);
    299     auto* space = spaces.m_subspaceForTestIterable.get();
     303    auto& clientSpaces = clientData.clientSubspaces();
     304    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestIterable.get())
     305        return clientSpace;
     306
     307    auto& heapData = clientData.heapData();
     308    Locker locker { heapData.lock() };
     309
     310    auto& spaces = heapData.subspaces();
     311    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     312    if (!space) {
     313        Heap& heap = vm.heap;
     314        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestIterable> || !JSTestIterable::needsDestruction);
     315        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestIterable>)
     316            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestIterable);
     317        else
     318            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestIterable);
     319        spaces.m_subspaceForTestIterable = std::unique_ptr<IsoSubspace>(space);
    300320IGNORE_WARNINGS_BEGIN("unreachable-code")
    301321IGNORE_WARNINGS_BEGIN("tautological-compare")
    302     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIterable::visitOutputConstraints;
    303     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    304     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    305         clientData.outputConstraintSpaces().append(space);
     322        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestIterable::visitOutputConstraints;
     323        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     324        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     325            heapData.outputConstraintSpaces().append(space);
    306326IGNORE_WARNINGS_END
    307327IGNORE_WARNINGS_END
    308     return space;
     328    }
     329
     330    clientSpaces.m_clientSubspaceForTestIterable = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     331    return clientSpaces.m_clientSubspaceForTestIterable.get();
    309332}
    310333
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp

    r286347 r290129  
    2222#include "JSTestJSBuiltinConstructor.h"
    2323
     24#include "DOMClientIsoSubspaces.h"
    2425#include "DOMIsoSubspaces.h"
    2526#include "JSDOMAttribute.h"
     
    6768    DECLARE_INFO;
    6869    template<typename CellType, JSC::SubspaceAccess>
    69     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     70    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7071    {
    7172        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestJSBuiltinConstructorPrototype, Base);
     
    223224}
    224225
    225 JSC::IsoSubspace* JSTestJSBuiltinConstructor::subspaceForImpl(JSC::VM& vm)
     226JSC::GCClient::IsoSubspace* JSTestJSBuiltinConstructor::subspaceForImpl(JSC::VM& vm)
    226227{
    227228    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    228     auto& spaces = clientData.subspaces();
    229     if (auto* space = spaces.m_subspaceForTestJSBuiltinConstructor.get())
    230         return space;
    231     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestJSBuiltinConstructor> || !JSTestJSBuiltinConstructor::needsDestruction);
    232     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestJSBuiltinConstructor>)
    233         spaces.m_subspaceForTestJSBuiltinConstructor = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestJSBuiltinConstructor);
    234     else
    235         spaces.m_subspaceForTestJSBuiltinConstructor = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestJSBuiltinConstructor);
    236     auto* space = spaces.m_subspaceForTestJSBuiltinConstructor.get();
     229    auto& clientSpaces = clientData.clientSubspaces();
     230    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestJSBuiltinConstructor.get())
     231        return clientSpace;
     232
     233    auto& heapData = clientData.heapData();
     234    Locker locker { heapData.lock() };
     235
     236    auto& spaces = heapData.subspaces();
     237    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     238    if (!space) {
     239        Heap& heap = vm.heap;
     240        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestJSBuiltinConstructor> || !JSTestJSBuiltinConstructor::needsDestruction);
     241        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestJSBuiltinConstructor>)
     242            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestJSBuiltinConstructor);
     243        else
     244            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestJSBuiltinConstructor);
     245        spaces.m_subspaceForTestJSBuiltinConstructor = std::unique_ptr<IsoSubspace>(space);
    237246IGNORE_WARNINGS_BEGIN("unreachable-code")
    238247IGNORE_WARNINGS_BEGIN("tautological-compare")
    239     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestJSBuiltinConstructor::visitOutputConstraints;
    240     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    241     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    242         clientData.outputConstraintSpaces().append(space);
     248        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestJSBuiltinConstructor::visitOutputConstraints;
     249        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     250        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     251            heapData.outputConstraintSpaces().append(space);
    243252IGNORE_WARNINGS_END
    244253IGNORE_WARNINGS_END
    245     return space;
    246 }
    247 
    248 
    249 }
     254    }
     255
     256    clientSpaces.m_clientSubspaceForTestJSBuiltinConstructor = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     257    return clientSpaces.m_clientSubspaceForTestJSBuiltinConstructor.get();
     258}
     259
     260
     261}
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h

    r285730 r290129  
    4747
    4848    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    49     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     49    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5050    {
    5151        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5353        return subspaceForImpl(vm);
    5454    }
    55     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     55    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5656
    5757    // Custom attributes
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "Document.h"
     
    6566    DECLARE_INFO;
    6667    template<typename CellType, JSC::SubspaceAccess>
    67     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     68    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6869    {
    6970        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestLegacyFactoryFunctionPrototype, Base);
     
    225226}
    226227
    227 JSC::IsoSubspace* JSTestLegacyFactoryFunction::subspaceForImpl(JSC::VM& vm)
     228JSC::GCClient::IsoSubspace* JSTestLegacyFactoryFunction::subspaceForImpl(JSC::VM& vm)
    228229{
    229230    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    230     auto& spaces = clientData.subspaces();
    231     if (auto* space = spaces.m_subspaceForTestLegacyFactoryFunction.get())
    232         return space;
    233     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyFactoryFunction> || !JSTestLegacyFactoryFunction::needsDestruction);
    234     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyFactoryFunction>)
    235         spaces.m_subspaceForTestLegacyFactoryFunction = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestLegacyFactoryFunction);
    236     else
    237         spaces.m_subspaceForTestLegacyFactoryFunction = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestLegacyFactoryFunction);
    238     auto* space = spaces.m_subspaceForTestLegacyFactoryFunction.get();
     231    auto& clientSpaces = clientData.clientSubspaces();
     232    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestLegacyFactoryFunction.get())
     233        return clientSpace;
     234
     235    auto& heapData = clientData.heapData();
     236    Locker locker { heapData.lock() };
     237
     238    auto& spaces = heapData.subspaces();
     239    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     240    if (!space) {
     241        Heap& heap = vm.heap;
     242        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyFactoryFunction> || !JSTestLegacyFactoryFunction::needsDestruction);
     243        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyFactoryFunction>)
     244            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestLegacyFactoryFunction);
     245        else
     246            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestLegacyFactoryFunction);
     247        spaces.m_subspaceForTestLegacyFactoryFunction = std::unique_ptr<IsoSubspace>(space);
    239248IGNORE_WARNINGS_BEGIN("unreachable-code")
    240249IGNORE_WARNINGS_BEGIN("tautological-compare")
    241     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestLegacyFactoryFunction::visitOutputConstraints;
    242     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    243     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    244         clientData.outputConstraintSpaces().append(space);
     250        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestLegacyFactoryFunction::visitOutputConstraints;
     251        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     252        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     253            heapData.outputConstraintSpaces().append(space);
    245254IGNORE_WARNINGS_END
    246255IGNORE_WARNINGS_END
    247     return space;
     256    }
     257
     258    clientSpaces.m_clientSubspaceForTestLegacyFactoryFunction = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     259    return clientSpaces.m_clientSubspaceForTestLegacyFactoryFunction.get();
    248260}
    249261
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.h

    r285730 r290129  
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    5252    static JSC::JSValue getLegacyFactoryFunction(JSC::VM&, JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp

    r288118 r290129  
    2626
    2727#include "ActiveDOMObject.h"
     28#include "DOMClientIsoSubspaces.h"
    2829#include "DOMIsoSubspaces.h"
    2930#include "IDLTypes.h"
     
    8384    DECLARE_INFO;
    8485    template<typename CellType, JSC::SubspaceAccess>
    85     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     86    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8687    {
    8788        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestLegacyNoInterfaceObjectPrototype, Base);
     
    328329}
    329330
    330 JSC::IsoSubspace* JSTestLegacyNoInterfaceObject::subspaceForImpl(JSC::VM& vm)
     331JSC::GCClient::IsoSubspace* JSTestLegacyNoInterfaceObject::subspaceForImpl(JSC::VM& vm)
    331332{
    332333    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    333     auto& spaces = clientData.subspaces();
    334     if (auto* space = spaces.m_subspaceForTestLegacyNoInterfaceObject.get())
    335         return space;
    336     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyNoInterfaceObject> || !JSTestLegacyNoInterfaceObject::needsDestruction);
    337     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyNoInterfaceObject>)
    338         spaces.m_subspaceForTestLegacyNoInterfaceObject = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestLegacyNoInterfaceObject);
    339     else
    340         spaces.m_subspaceForTestLegacyNoInterfaceObject = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestLegacyNoInterfaceObject);
    341     auto* space = spaces.m_subspaceForTestLegacyNoInterfaceObject.get();
     334    auto& clientSpaces = clientData.clientSubspaces();
     335    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestLegacyNoInterfaceObject.get())
     336        return clientSpace;
     337
     338    auto& heapData = clientData.heapData();
     339    Locker locker { heapData.lock() };
     340
     341    auto& spaces = heapData.subspaces();
     342    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     343    if (!space) {
     344        Heap& heap = vm.heap;
     345        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyNoInterfaceObject> || !JSTestLegacyNoInterfaceObject::needsDestruction);
     346        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyNoInterfaceObject>)
     347            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestLegacyNoInterfaceObject);
     348        else
     349            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestLegacyNoInterfaceObject);
     350        spaces.m_subspaceForTestLegacyNoInterfaceObject = std::unique_ptr<IsoSubspace>(space);
    342351IGNORE_WARNINGS_BEGIN("unreachable-code")
    343352IGNORE_WARNINGS_BEGIN("tautological-compare")
    344     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestLegacyNoInterfaceObject::visitOutputConstraints;
    345     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    346     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    347         clientData.outputConstraintSpaces().append(space);
     353        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestLegacyNoInterfaceObject::visitOutputConstraints;
     354        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     355        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     356            heapData.outputConstraintSpaces().append(space);
    348357IGNORE_WARNINGS_END
    349358IGNORE_WARNINGS_END
    350     return space;
     359    }
     360
     361    clientSpaces.m_clientSubspaceForTestLegacyNoInterfaceObject = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     362    return clientSpaces.m_clientSubspaceForTestLegacyNoInterfaceObject.get();
    351363}
    352364
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.h

    r285730 r290129  
    5151    }
    5252
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    7172    DECLARE_INFO;
    7273    template<typename CellType, JSC::SubspaceAccess>
    73     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     74    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7475    {
    7576        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestLegacyOverrideBuiltInsPrototype, Base);
     
    242243}
    243244
    244 JSC::IsoSubspace* JSTestLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
     245JSC::GCClient::IsoSubspace* JSTestLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
    245246{
    246247    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    247     auto& spaces = clientData.subspaces();
    248     if (auto* space = spaces.m_subspaceForTestLegacyOverrideBuiltIns.get())
    249         return space;
    250     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyOverrideBuiltIns> || !JSTestLegacyOverrideBuiltIns::needsDestruction);
    251     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyOverrideBuiltIns>)
    252         spaces.m_subspaceForTestLegacyOverrideBuiltIns = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestLegacyOverrideBuiltIns);
    253     else
    254         spaces.m_subspaceForTestLegacyOverrideBuiltIns = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestLegacyOverrideBuiltIns);
    255     auto* space = spaces.m_subspaceForTestLegacyOverrideBuiltIns.get();
     248    auto& clientSpaces = clientData.clientSubspaces();
     249    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestLegacyOverrideBuiltIns.get())
     250        return clientSpace;
     251
     252    auto& heapData = clientData.heapData();
     253    Locker locker { heapData.lock() };
     254
     255    auto& spaces = heapData.subspaces();
     256    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     257    if (!space) {
     258        Heap& heap = vm.heap;
     259        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyOverrideBuiltIns> || !JSTestLegacyOverrideBuiltIns::needsDestruction);
     260        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestLegacyOverrideBuiltIns>)
     261            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestLegacyOverrideBuiltIns);
     262        else
     263            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestLegacyOverrideBuiltIns);
     264        spaces.m_subspaceForTestLegacyOverrideBuiltIns = std::unique_ptr<IsoSubspace>(space);
    256265IGNORE_WARNINGS_BEGIN("unreachable-code")
    257266IGNORE_WARNINGS_BEGIN("tautological-compare")
    258     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestLegacyOverrideBuiltIns::visitOutputConstraints;
    259     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    260     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    261         clientData.outputConstraintSpaces().append(space);
     267        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestLegacyOverrideBuiltIns::visitOutputConstraints;
     268        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     269        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     270            heapData.outputConstraintSpaces().append(space);
    262271IGNORE_WARNINGS_END
    263272IGNORE_WARNINGS_END
    264     return space;
     273    }
     274
     275    clientSpaces.m_clientSubspaceForTestLegacyOverrideBuiltIns = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     276    return clientSpaces.m_clientSubspaceForTestLegacyOverrideBuiltIns.get();
    265277}
    266278
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.h

    r285730 r290129  
    5353
    5454    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    55     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     55    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5656    {
    5757        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5959        return subspaceForImpl(vm);
    6060    }
    61     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     61    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6262    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6363public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    8081    DECLARE_INFO;
    8182    template<typename CellType, JSC::SubspaceAccess>
    82     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     83    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8384    {
    8485        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestMapLikePrototype, Base);
     
    359360}
    360361
    361 JSC::IsoSubspace* JSTestMapLike::subspaceForImpl(JSC::VM& vm)
     362JSC::GCClient::IsoSubspace* JSTestMapLike::subspaceForImpl(JSC::VM& vm)
    362363{
    363364    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    364     auto& spaces = clientData.subspaces();
    365     if (auto* space = spaces.m_subspaceForTestMapLike.get())
    366         return space;
    367     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLike> || !JSTestMapLike::needsDestruction);
    368     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLike>)
    369         spaces.m_subspaceForTestMapLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestMapLike);
    370     else
    371         spaces.m_subspaceForTestMapLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestMapLike);
    372     auto* space = spaces.m_subspaceForTestMapLike.get();
     365    auto& clientSpaces = clientData.clientSubspaces();
     366    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestMapLike.get())
     367        return clientSpace;
     368
     369    auto& heapData = clientData.heapData();
     370    Locker locker { heapData.lock() };
     371
     372    auto& spaces = heapData.subspaces();
     373    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     374    if (!space) {
     375        Heap& heap = vm.heap;
     376        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLike> || !JSTestMapLike::needsDestruction);
     377        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLike>)
     378            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestMapLike);
     379        else
     380            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestMapLike);
     381        spaces.m_subspaceForTestMapLike = std::unique_ptr<IsoSubspace>(space);
    373382IGNORE_WARNINGS_BEGIN("unreachable-code")
    374383IGNORE_WARNINGS_BEGIN("tautological-compare")
    375     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestMapLike::visitOutputConstraints;
    376     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    377     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    378         clientData.outputConstraintSpaces().append(space);
     384        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestMapLike::visitOutputConstraints;
     385        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     386        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     387            heapData.outputConstraintSpaces().append(space);
    379388IGNORE_WARNINGS_END
    380389IGNORE_WARNINGS_END
    381     return space;
     390    }
     391
     392    clientSpaces.m_clientSubspaceForTestMapLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     393    return clientSpaces.m_clientSubspaceForTestMapLike.get();
    382394}
    383395
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    8485    DECLARE_INFO;
    8586    template<typename CellType, JSC::SubspaceAccess>
    86     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     87    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8788    {
    8889        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestMapLikeWithOverriddenOperationsPrototype, Base);
     
    373374}
    374375
    375 JSC::IsoSubspace* JSTestMapLikeWithOverriddenOperations::subspaceForImpl(JSC::VM& vm)
     376JSC::GCClient::IsoSubspace* JSTestMapLikeWithOverriddenOperations::subspaceForImpl(JSC::VM& vm)
    376377{
    377378    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    378     auto& spaces = clientData.subspaces();
    379     if (auto* space = spaces.m_subspaceForTestMapLikeWithOverriddenOperations.get())
    380         return space;
    381     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLikeWithOverriddenOperations> || !JSTestMapLikeWithOverriddenOperations::needsDestruction);
    382     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLikeWithOverriddenOperations>)
    383         spaces.m_subspaceForTestMapLikeWithOverriddenOperations = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestMapLikeWithOverriddenOperations);
    384     else
    385         spaces.m_subspaceForTestMapLikeWithOverriddenOperations = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestMapLikeWithOverriddenOperations);
    386     auto* space = spaces.m_subspaceForTestMapLikeWithOverriddenOperations.get();
     379    auto& clientSpaces = clientData.clientSubspaces();
     380    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestMapLikeWithOverriddenOperations.get())
     381        return clientSpace;
     382
     383    auto& heapData = clientData.heapData();
     384    Locker locker { heapData.lock() };
     385
     386    auto& spaces = heapData.subspaces();
     387    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     388    if (!space) {
     389        Heap& heap = vm.heap;
     390        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLikeWithOverriddenOperations> || !JSTestMapLikeWithOverriddenOperations::needsDestruction);
     391        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestMapLikeWithOverriddenOperations>)
     392            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestMapLikeWithOverriddenOperations);
     393        else
     394            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestMapLikeWithOverriddenOperations);
     395        spaces.m_subspaceForTestMapLikeWithOverriddenOperations = std::unique_ptr<IsoSubspace>(space);
    387396IGNORE_WARNINGS_BEGIN("unreachable-code")
    388397IGNORE_WARNINGS_BEGIN("tautological-compare")
    389     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestMapLikeWithOverriddenOperations::visitOutputConstraints;
    390     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    391     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    392         clientData.outputConstraintSpaces().append(space);
     398        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestMapLikeWithOverriddenOperations::visitOutputConstraints;
     399        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     400        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     401            heapData.outputConstraintSpaces().append(space);
    393402IGNORE_WARNINGS_END
    394403IGNORE_WARNINGS_END
    395     return space;
     404    }
     405
     406    clientSpaces.m_clientSubspaceForTestMapLikeWithOverriddenOperations = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     407    return clientSpaces.m_clientSubspaceForTestMapLikeWithOverriddenOperations.get();
    396408}
    397409
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedAndIndexedSetterNoIdentifierPrototype, Base);
     
    337338}
    338339
    339 JSC::IsoSubspace* JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
     340JSC::GCClient::IsoSubspace* JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    340341{
    341342    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    342     auto& spaces = clientData.subspaces();
    343     if (auto* space = spaces.m_subspaceForTestNamedAndIndexedSetterNoIdentifier.get())
    344         return space;
    345     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterNoIdentifier> || !JSTestNamedAndIndexedSetterNoIdentifier::needsDestruction);
    346     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterNoIdentifier>)
    347         spaces.m_subspaceForTestNamedAndIndexedSetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedAndIndexedSetterNoIdentifier);
    348     else
    349         spaces.m_subspaceForTestNamedAndIndexedSetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedAndIndexedSetterNoIdentifier);
    350     auto* space = spaces.m_subspaceForTestNamedAndIndexedSetterNoIdentifier.get();
     343    auto& clientSpaces = clientData.clientSubspaces();
     344    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterNoIdentifier.get())
     345        return clientSpace;
     346
     347    auto& heapData = clientData.heapData();
     348    Locker locker { heapData.lock() };
     349
     350    auto& spaces = heapData.subspaces();
     351    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     352    if (!space) {
     353        Heap& heap = vm.heap;
     354        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterNoIdentifier> || !JSTestNamedAndIndexedSetterNoIdentifier::needsDestruction);
     355        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterNoIdentifier>)
     356            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedAndIndexedSetterNoIdentifier);
     357        else
     358            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedAndIndexedSetterNoIdentifier);
     359        spaces.m_subspaceForTestNamedAndIndexedSetterNoIdentifier = std::unique_ptr<IsoSubspace>(space);
    351360IGNORE_WARNINGS_BEGIN("unreachable-code")
    352361IGNORE_WARNINGS_BEGIN("tautological-compare")
    353     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedAndIndexedSetterNoIdentifier::visitOutputConstraints;
    354     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    355     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    356         clientData.outputConstraintSpaces().append(space);
     362        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedAndIndexedSetterNoIdentifier::visitOutputConstraints;
     363        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     364        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     365            heapData.outputConstraintSpaces().append(space);
    357366IGNORE_WARNINGS_END
    358367IGNORE_WARNINGS_END
    359     return space;
     368    }
     369
     370    clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     371    return clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterNoIdentifier.get();
    360372}
    361373
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedAndIndexedSetterThrowingExceptionPrototype, Base);
     
    337338}
    338339
    339 JSC::IsoSubspace* JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
     340JSC::GCClient::IsoSubspace* JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
    340341{
    341342    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    342     auto& spaces = clientData.subspaces();
    343     if (auto* space = spaces.m_subspaceForTestNamedAndIndexedSetterThrowingException.get())
    344         return space;
    345     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterThrowingException> || !JSTestNamedAndIndexedSetterThrowingException::needsDestruction);
    346     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterThrowingException>)
    347         spaces.m_subspaceForTestNamedAndIndexedSetterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedAndIndexedSetterThrowingException);
    348     else
    349         spaces.m_subspaceForTestNamedAndIndexedSetterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedAndIndexedSetterThrowingException);
    350     auto* space = spaces.m_subspaceForTestNamedAndIndexedSetterThrowingException.get();
     343    auto& clientSpaces = clientData.clientSubspaces();
     344    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterThrowingException.get())
     345        return clientSpace;
     346
     347    auto& heapData = clientData.heapData();
     348    Locker locker { heapData.lock() };
     349
     350    auto& spaces = heapData.subspaces();
     351    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     352    if (!space) {
     353        Heap& heap = vm.heap;
     354        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterThrowingException> || !JSTestNamedAndIndexedSetterThrowingException::needsDestruction);
     355        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterThrowingException>)
     356            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedAndIndexedSetterThrowingException);
     357        else
     358            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedAndIndexedSetterThrowingException);
     359        spaces.m_subspaceForTestNamedAndIndexedSetterThrowingException = std::unique_ptr<IsoSubspace>(space);
    351360IGNORE_WARNINGS_BEGIN("unreachable-code")
    352361IGNORE_WARNINGS_BEGIN("tautological-compare")
    353     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedAndIndexedSetterThrowingException::visitOutputConstraints;
    354     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    355     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    356         clientData.outputConstraintSpaces().append(space);
     362        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedAndIndexedSetterThrowingException::visitOutputConstraints;
     363        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     364        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     365            heapData.outputConstraintSpaces().append(space);
    357366IGNORE_WARNINGS_END
    358367IGNORE_WARNINGS_END
    359     return space;
     368    }
     369
     370    clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     371    return clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterThrowingException.get();
    360372}
    361373
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7374    DECLARE_INFO;
    7475    template<typename CellType, JSC::SubspaceAccess>
    75     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     76    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7677    {
    7778        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedAndIndexedSetterWithIdentifierPrototype, Base);
     
    394395}
    395396
    396 JSC::IsoSubspace* JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
     397JSC::GCClient::IsoSubspace* JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    397398{
    398399    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    399     auto& spaces = clientData.subspaces();
    400     if (auto* space = spaces.m_subspaceForTestNamedAndIndexedSetterWithIdentifier.get())
    401         return space;
    402     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterWithIdentifier> || !JSTestNamedAndIndexedSetterWithIdentifier::needsDestruction);
    403     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterWithIdentifier>)
    404         spaces.m_subspaceForTestNamedAndIndexedSetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedAndIndexedSetterWithIdentifier);
    405     else
    406         spaces.m_subspaceForTestNamedAndIndexedSetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedAndIndexedSetterWithIdentifier);
    407     auto* space = spaces.m_subspaceForTestNamedAndIndexedSetterWithIdentifier.get();
     400    auto& clientSpaces = clientData.clientSubspaces();
     401    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterWithIdentifier.get())
     402        return clientSpace;
     403
     404    auto& heapData = clientData.heapData();
     405    Locker locker { heapData.lock() };
     406
     407    auto& spaces = heapData.subspaces();
     408    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     409    if (!space) {
     410        Heap& heap = vm.heap;
     411        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterWithIdentifier> || !JSTestNamedAndIndexedSetterWithIdentifier::needsDestruction);
     412        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedAndIndexedSetterWithIdentifier>)
     413            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedAndIndexedSetterWithIdentifier);
     414        else
     415            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedAndIndexedSetterWithIdentifier);
     416        spaces.m_subspaceForTestNamedAndIndexedSetterWithIdentifier = std::unique_ptr<IsoSubspace>(space);
    408417IGNORE_WARNINGS_BEGIN("unreachable-code")
    409418IGNORE_WARNINGS_BEGIN("tautological-compare")
    410     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedAndIndexedSetterWithIdentifier::visitOutputConstraints;
    411     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    412     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    413         clientData.outputConstraintSpaces().append(space);
     419        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedAndIndexedSetterWithIdentifier::visitOutputConstraints;
     420        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     421        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     422            heapData.outputConstraintSpaces().append(space);
    414423IGNORE_WARNINGS_END
    415424IGNORE_WARNINGS_END
    416     return space;
     425    }
     426
     427    clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     428    return clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterWithIdentifier.get();
    417429}
    418430
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedDeleterNoIdentifierPrototype, Base);
     
    239240}
    240241
    241 JSC::IsoSubspace* JSTestNamedDeleterNoIdentifier::subspaceForImpl(JSC::VM& vm)
     242JSC::GCClient::IsoSubspace* JSTestNamedDeleterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    242243{
    243244    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    244     auto& spaces = clientData.subspaces();
    245     if (auto* space = spaces.m_subspaceForTestNamedDeleterNoIdentifier.get())
    246         return space;
    247     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterNoIdentifier> || !JSTestNamedDeleterNoIdentifier::needsDestruction);
    248     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterNoIdentifier>)
    249         spaces.m_subspaceForTestNamedDeleterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedDeleterNoIdentifier);
    250     else
    251         spaces.m_subspaceForTestNamedDeleterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedDeleterNoIdentifier);
    252     auto* space = spaces.m_subspaceForTestNamedDeleterNoIdentifier.get();
     245    auto& clientSpaces = clientData.clientSubspaces();
     246    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedDeleterNoIdentifier.get())
     247        return clientSpace;
     248
     249    auto& heapData = clientData.heapData();
     250    Locker locker { heapData.lock() };
     251
     252    auto& spaces = heapData.subspaces();
     253    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     254    if (!space) {
     255        Heap& heap = vm.heap;
     256        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterNoIdentifier> || !JSTestNamedDeleterNoIdentifier::needsDestruction);
     257        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterNoIdentifier>)
     258            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedDeleterNoIdentifier);
     259        else
     260            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedDeleterNoIdentifier);
     261        spaces.m_subspaceForTestNamedDeleterNoIdentifier = std::unique_ptr<IsoSubspace>(space);
    253262IGNORE_WARNINGS_BEGIN("unreachable-code")
    254263IGNORE_WARNINGS_BEGIN("tautological-compare")
    255     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterNoIdentifier::visitOutputConstraints;
    256     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    257     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    258         clientData.outputConstraintSpaces().append(space);
     264        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterNoIdentifier::visitOutputConstraints;
     265        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     266        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     267            heapData.outputConstraintSpaces().append(space);
    259268IGNORE_WARNINGS_END
    260269IGNORE_WARNINGS_END
    261     return space;
     270    }
     271
     272    clientSpaces.m_clientSubspaceForTestNamedDeleterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     273    return clientSpaces.m_clientSubspaceForTestNamedDeleterNoIdentifier.get();
    262274}
    263275
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h

    r285730 r290129  
    5555
    5656    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    57     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     57    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5858    {
    5959        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6161        return subspaceForImpl(vm);
    6262    }
    63     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     63    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6464    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6565public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedDeleterThrowingExceptionPrototype, Base);
     
    239240}
    240241
    241 JSC::IsoSubspace* JSTestNamedDeleterThrowingException::subspaceForImpl(JSC::VM& vm)
     242JSC::GCClient::IsoSubspace* JSTestNamedDeleterThrowingException::subspaceForImpl(JSC::VM& vm)
    242243{
    243244    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    244     auto& spaces = clientData.subspaces();
    245     if (auto* space = spaces.m_subspaceForTestNamedDeleterThrowingException.get())
    246         return space;
    247     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterThrowingException> || !JSTestNamedDeleterThrowingException::needsDestruction);
    248     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterThrowingException>)
    249         spaces.m_subspaceForTestNamedDeleterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedDeleterThrowingException);
    250     else
    251         spaces.m_subspaceForTestNamedDeleterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedDeleterThrowingException);
    252     auto* space = spaces.m_subspaceForTestNamedDeleterThrowingException.get();
     245    auto& clientSpaces = clientData.clientSubspaces();
     246    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedDeleterThrowingException.get())
     247        return clientSpace;
     248
     249    auto& heapData = clientData.heapData();
     250    Locker locker { heapData.lock() };
     251
     252    auto& spaces = heapData.subspaces();
     253    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     254    if (!space) {
     255        Heap& heap = vm.heap;
     256        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterThrowingException> || !JSTestNamedDeleterThrowingException::needsDestruction);
     257        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterThrowingException>)
     258            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedDeleterThrowingException);
     259        else
     260            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedDeleterThrowingException);
     261        spaces.m_subspaceForTestNamedDeleterThrowingException = std::unique_ptr<IsoSubspace>(space);
    253262IGNORE_WARNINGS_BEGIN("unreachable-code")
    254263IGNORE_WARNINGS_BEGIN("tautological-compare")
    255     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterThrowingException::visitOutputConstraints;
    256     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    257     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    258         clientData.outputConstraintSpaces().append(space);
     264        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterThrowingException::visitOutputConstraints;
     265        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     266        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     267            heapData.outputConstraintSpaces().append(space);
    259268IGNORE_WARNINGS_END
    260269IGNORE_WARNINGS_END
    261     return space;
     270    }
     271
     272    clientSpaces.m_clientSubspaceForTestNamedDeleterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     273    return clientSpaces.m_clientSubspaceForTestNamedDeleterThrowingException.get();
    262274}
    263275
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h

    r285730 r290129  
    5555
    5656    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    57     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     57    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5858    {
    5959        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6161        return subspaceForImpl(vm);
    6262    }
    63     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     63    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6464    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6565public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7071    DECLARE_INFO;
    7172    template<typename CellType, JSC::SubspaceAccess>
    72     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     73    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7374    {
    7475        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedDeleterWithIdentifierPrototype, Base);
     
    263264}
    264265
    265 JSC::IsoSubspace* JSTestNamedDeleterWithIdentifier::subspaceForImpl(JSC::VM& vm)
     266JSC::GCClient::IsoSubspace* JSTestNamedDeleterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    266267{
    267268    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    268     auto& spaces = clientData.subspaces();
    269     if (auto* space = spaces.m_subspaceForTestNamedDeleterWithIdentifier.get())
    270         return space;
    271     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIdentifier> || !JSTestNamedDeleterWithIdentifier::needsDestruction);
    272     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIdentifier>)
    273         spaces.m_subspaceForTestNamedDeleterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedDeleterWithIdentifier);
    274     else
    275         spaces.m_subspaceForTestNamedDeleterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedDeleterWithIdentifier);
    276     auto* space = spaces.m_subspaceForTestNamedDeleterWithIdentifier.get();
     269    auto& clientSpaces = clientData.clientSubspaces();
     270    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedDeleterWithIdentifier.get())
     271        return clientSpace;
     272
     273    auto& heapData = clientData.heapData();
     274    Locker locker { heapData.lock() };
     275
     276    auto& spaces = heapData.subspaces();
     277    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     278    if (!space) {
     279        Heap& heap = vm.heap;
     280        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIdentifier> || !JSTestNamedDeleterWithIdentifier::needsDestruction);
     281        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIdentifier>)
     282            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedDeleterWithIdentifier);
     283        else
     284            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedDeleterWithIdentifier);
     285        spaces.m_subspaceForTestNamedDeleterWithIdentifier = std::unique_ptr<IsoSubspace>(space);
    277286IGNORE_WARNINGS_BEGIN("unreachable-code")
    278287IGNORE_WARNINGS_BEGIN("tautological-compare")
    279     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterWithIdentifier::visitOutputConstraints;
    280     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    281     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    282         clientData.outputConstraintSpaces().append(space);
     288        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterWithIdentifier::visitOutputConstraints;
     289        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     290        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     291            heapData.outputConstraintSpaces().append(space);
    283292IGNORE_WARNINGS_END
    284293IGNORE_WARNINGS_END
    285     return space;
     294    }
     295
     296    clientSpaces.m_clientSubspaceForTestNamedDeleterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     297    return clientSpaces.m_clientSubspaceForTestNamedDeleterWithIdentifier.get();
    286298}
    287299
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h

    r285730 r290129  
    5555
    5656    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    57     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     57    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5858    {
    5959        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6161        return subspaceForImpl(vm);
    6262    }
    63     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     63    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6464    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6565public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6465    DECLARE_INFO;
    6566    template<typename CellType, JSC::SubspaceAccess>
    66     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     67    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6768    {
    6869        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedDeleterWithIndexedGetterPrototype, Base);
     
    255256}
    256257
    257 JSC::IsoSubspace* JSTestNamedDeleterWithIndexedGetter::subspaceForImpl(JSC::VM& vm)
     258JSC::GCClient::IsoSubspace* JSTestNamedDeleterWithIndexedGetter::subspaceForImpl(JSC::VM& vm)
    258259{
    259260    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    260     auto& spaces = clientData.subspaces();
    261     if (auto* space = spaces.m_subspaceForTestNamedDeleterWithIndexedGetter.get())
    262         return space;
    263     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIndexedGetter> || !JSTestNamedDeleterWithIndexedGetter::needsDestruction);
    264     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIndexedGetter>)
    265         spaces.m_subspaceForTestNamedDeleterWithIndexedGetter = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedDeleterWithIndexedGetter);
    266     else
    267         spaces.m_subspaceForTestNamedDeleterWithIndexedGetter = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedDeleterWithIndexedGetter);
    268     auto* space = spaces.m_subspaceForTestNamedDeleterWithIndexedGetter.get();
     261    auto& clientSpaces = clientData.clientSubspaces();
     262    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedDeleterWithIndexedGetter.get())
     263        return clientSpace;
     264
     265    auto& heapData = clientData.heapData();
     266    Locker locker { heapData.lock() };
     267
     268    auto& spaces = heapData.subspaces();
     269    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     270    if (!space) {
     271        Heap& heap = vm.heap;
     272        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIndexedGetter> || !JSTestNamedDeleterWithIndexedGetter::needsDestruction);
     273        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedDeleterWithIndexedGetter>)
     274            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedDeleterWithIndexedGetter);
     275        else
     276            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedDeleterWithIndexedGetter);
     277        spaces.m_subspaceForTestNamedDeleterWithIndexedGetter = std::unique_ptr<IsoSubspace>(space);
    269278IGNORE_WARNINGS_BEGIN("unreachable-code")
    270279IGNORE_WARNINGS_BEGIN("tautological-compare")
    271     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterWithIndexedGetter::visitOutputConstraints;
    272     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    273     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    274         clientData.outputConstraintSpaces().append(space);
     280        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedDeleterWithIndexedGetter::visitOutputConstraints;
     281        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     282        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     283            heapData.outputConstraintSpaces().append(space);
    275284IGNORE_WARNINGS_END
    276285IGNORE_WARNINGS_END
    277     return space;
     286    }
     287
     288    clientSpaces.m_clientSubspaceForTestNamedDeleterWithIndexedGetter = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     289    return clientSpaces.m_clientSubspaceForTestNamedDeleterWithIndexedGetter.get();
    278290}
    279291
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h

    r285730 r290129  
    5555
    5656    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    57     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     57    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5858    {
    5959        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6161        return subspaceForImpl(vm);
    6262    }
    63     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     63    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6464    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6565public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedGetterCallWithPrototype, Base);
     
    213214}
    214215
    215 JSC::IsoSubspace* JSTestNamedGetterCallWith::subspaceForImpl(JSC::VM& vm)
     216JSC::GCClient::IsoSubspace* JSTestNamedGetterCallWith::subspaceForImpl(JSC::VM& vm)
    216217{
    217218    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    218     auto& spaces = clientData.subspaces();
    219     if (auto* space = spaces.m_subspaceForTestNamedGetterCallWith.get())
    220         return space;
    221     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterCallWith> || !JSTestNamedGetterCallWith::needsDestruction);
    222     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterCallWith>)
    223         spaces.m_subspaceForTestNamedGetterCallWith = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedGetterCallWith);
    224     else
    225         spaces.m_subspaceForTestNamedGetterCallWith = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedGetterCallWith);
    226     auto* space = spaces.m_subspaceForTestNamedGetterCallWith.get();
     219    auto& clientSpaces = clientData.clientSubspaces();
     220    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedGetterCallWith.get())
     221        return clientSpace;
     222
     223    auto& heapData = clientData.heapData();
     224    Locker locker { heapData.lock() };
     225
     226    auto& spaces = heapData.subspaces();
     227    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     228    if (!space) {
     229        Heap& heap = vm.heap;
     230        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterCallWith> || !JSTestNamedGetterCallWith::needsDestruction);
     231        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterCallWith>)
     232            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedGetterCallWith);
     233        else
     234            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedGetterCallWith);
     235        spaces.m_subspaceForTestNamedGetterCallWith = std::unique_ptr<IsoSubspace>(space);
    227236IGNORE_WARNINGS_BEGIN("unreachable-code")
    228237IGNORE_WARNINGS_BEGIN("tautological-compare")
    229     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedGetterCallWith::visitOutputConstraints;
    230     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    231     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    232         clientData.outputConstraintSpaces().append(space);
     238        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedGetterCallWith::visitOutputConstraints;
     239        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     240        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     241            heapData.outputConstraintSpaces().append(space);
    233242IGNORE_WARNINGS_END
    234243IGNORE_WARNINGS_END
    235     return space;
     244    }
     245
     246    clientSpaces.m_clientSubspaceForTestNamedGetterCallWith = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     247    return clientSpaces.m_clientSubspaceForTestNamedGetterCallWith.get();
    236248}
    237249
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.h

    r285730 r290129  
    5353
    5454    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    55     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     55    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5656    {
    5757        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5959        return subspaceForImpl(vm);
    6060    }
    61     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     61    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6262    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6363public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedGetterNoIdentifierPrototype, Base);
     
    213214}
    214215
    215 JSC::IsoSubspace* JSTestNamedGetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
     216JSC::GCClient::IsoSubspace* JSTestNamedGetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    216217{
    217218    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    218     auto& spaces = clientData.subspaces();
    219     if (auto* space = spaces.m_subspaceForTestNamedGetterNoIdentifier.get())
    220         return space;
    221     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterNoIdentifier> || !JSTestNamedGetterNoIdentifier::needsDestruction);
    222     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterNoIdentifier>)
    223         spaces.m_subspaceForTestNamedGetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedGetterNoIdentifier);
    224     else
    225         spaces.m_subspaceForTestNamedGetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedGetterNoIdentifier);
    226     auto* space = spaces.m_subspaceForTestNamedGetterNoIdentifier.get();
     219    auto& clientSpaces = clientData.clientSubspaces();
     220    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedGetterNoIdentifier.get())
     221        return clientSpace;
     222
     223    auto& heapData = clientData.heapData();
     224    Locker locker { heapData.lock() };
     225
     226    auto& spaces = heapData.subspaces();
     227    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     228    if (!space) {
     229        Heap& heap = vm.heap;
     230        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterNoIdentifier> || !JSTestNamedGetterNoIdentifier::needsDestruction);
     231        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterNoIdentifier>)
     232            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedGetterNoIdentifier);
     233        else
     234            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedGetterNoIdentifier);
     235        spaces.m_subspaceForTestNamedGetterNoIdentifier = std::unique_ptr<IsoSubspace>(space);
    227236IGNORE_WARNINGS_BEGIN("unreachable-code")
    228237IGNORE_WARNINGS_BEGIN("tautological-compare")
    229     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedGetterNoIdentifier::visitOutputConstraints;
    230     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    231     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    232         clientData.outputConstraintSpaces().append(space);
     238        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedGetterNoIdentifier::visitOutputConstraints;
     239        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     240        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     241            heapData.outputConstraintSpaces().append(space);
    233242IGNORE_WARNINGS_END
    234243IGNORE_WARNINGS_END
    235     return space;
     244    }
     245
     246    clientSpaces.m_clientSubspaceForTestNamedGetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     247    return clientSpaces.m_clientSubspaceForTestNamedGetterNoIdentifier.get();
    236248}
    237249
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h

    r285730 r290129  
    5353
    5454    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    55     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     55    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5656    {
    5757        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5959        return subspaceForImpl(vm);
    6060    }
    61     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     61    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6262    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6363public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6869    DECLARE_INFO;
    6970    template<typename CellType, JSC::SubspaceAccess>
    70     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     71    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7172    {
    7273        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedGetterWithIdentifierPrototype, Base);
     
    239240}
    240241
    241 JSC::IsoSubspace* JSTestNamedGetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
     242JSC::GCClient::IsoSubspace* JSTestNamedGetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    242243{
    243244    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    244     auto& spaces = clientData.subspaces();
    245     if (auto* space = spaces.m_subspaceForTestNamedGetterWithIdentifier.get())
    246         return space;
    247     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterWithIdentifier> || !JSTestNamedGetterWithIdentifier::needsDestruction);
    248     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterWithIdentifier>)
    249         spaces.m_subspaceForTestNamedGetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedGetterWithIdentifier);
    250     else
    251         spaces.m_subspaceForTestNamedGetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedGetterWithIdentifier);
    252     auto* space = spaces.m_subspaceForTestNamedGetterWithIdentifier.get();
     245    auto& clientSpaces = clientData.clientSubspaces();
     246    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedGetterWithIdentifier.get())
     247        return clientSpace;
     248
     249    auto& heapData = clientData.heapData();
     250    Locker locker { heapData.lock() };
     251
     252    auto& spaces = heapData.subspaces();
     253    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     254    if (!space) {
     255        Heap& heap = vm.heap;
     256        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterWithIdentifier> || !JSTestNamedGetterWithIdentifier::needsDestruction);
     257        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedGetterWithIdentifier>)
     258            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedGetterWithIdentifier);
     259        else
     260            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedGetterWithIdentifier);
     261        spaces.m_subspaceForTestNamedGetterWithIdentifier = std::unique_ptr<IsoSubspace>(space);
    253262IGNORE_WARNINGS_BEGIN("unreachable-code")
    254263IGNORE_WARNINGS_BEGIN("tautological-compare")
    255     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedGetterWithIdentifier::visitOutputConstraints;
    256     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    257     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    258         clientData.outputConstraintSpaces().append(space);
     264        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedGetterWithIdentifier::visitOutputConstraints;
     265        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     266        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     267            heapData.outputConstraintSpaces().append(space);
    259268IGNORE_WARNINGS_END
    260269IGNORE_WARNINGS_END
    261     return space;
     270    }
     271
     272    clientSpaces.m_clientSubspaceForTestNamedGetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     273    return clientSpaces.m_clientSubspaceForTestNamedGetterWithIdentifier.get();
    262274}
    263275
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h

    r285730 r290129  
    5353
    5454    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    55     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     55    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5656    {
    5757        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5959        return subspaceForImpl(vm);
    6060    }
    61     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     61    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6262    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6363public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterNoIdentifierPrototype, Base);
     
    293294}
    294295
    295 JSC::IsoSubspace* JSTestNamedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
     296JSC::GCClient::IsoSubspace* JSTestNamedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    296297{
    297298    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    298     auto& spaces = clientData.subspaces();
    299     if (auto* space = spaces.m_subspaceForTestNamedSetterNoIdentifier.get())
    300         return space;
    301     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterNoIdentifier> || !JSTestNamedSetterNoIdentifier::needsDestruction);
    302     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterNoIdentifier>)
    303         spaces.m_subspaceForTestNamedSetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterNoIdentifier);
    304     else
    305         spaces.m_subspaceForTestNamedSetterNoIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterNoIdentifier);
    306     auto* space = spaces.m_subspaceForTestNamedSetterNoIdentifier.get();
     299    auto& clientSpaces = clientData.clientSubspaces();
     300    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterNoIdentifier.get())
     301        return clientSpace;
     302
     303    auto& heapData = clientData.heapData();
     304    Locker locker { heapData.lock() };
     305
     306    auto& spaces = heapData.subspaces();
     307    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     308    if (!space) {
     309        Heap& heap = vm.heap;
     310        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterNoIdentifier> || !JSTestNamedSetterNoIdentifier::needsDestruction);
     311        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterNoIdentifier>)
     312            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterNoIdentifier);
     313        else
     314            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterNoIdentifier);
     315        spaces.m_subspaceForTestNamedSetterNoIdentifier = std::unique_ptr<IsoSubspace>(space);
    307316IGNORE_WARNINGS_BEGIN("unreachable-code")
    308317IGNORE_WARNINGS_BEGIN("tautological-compare")
    309     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterNoIdentifier::visitOutputConstraints;
    310     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    311     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    312         clientData.outputConstraintSpaces().append(space);
     318        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterNoIdentifier::visitOutputConstraints;
     319        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     320        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     321            heapData.outputConstraintSpaces().append(space);
    313322IGNORE_WARNINGS_END
    314323IGNORE_WARNINGS_END
    315     return space;
     324    }
     325
     326    clientSpaces.m_clientSubspaceForTestNamedSetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     327    return clientSpaces.m_clientSubspaceForTestNamedSetterNoIdentifier.get();
    316328}
    317329
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterThrowingExceptionPrototype, Base);
     
    293294}
    294295
    295 JSC::IsoSubspace* JSTestNamedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
     296JSC::GCClient::IsoSubspace* JSTestNamedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
    296297{
    297298    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    298     auto& spaces = clientData.subspaces();
    299     if (auto* space = spaces.m_subspaceForTestNamedSetterThrowingException.get())
    300         return space;
    301     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterThrowingException> || !JSTestNamedSetterThrowingException::needsDestruction);
    302     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterThrowingException>)
    303         spaces.m_subspaceForTestNamedSetterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterThrowingException);
    304     else
    305         spaces.m_subspaceForTestNamedSetterThrowingException = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterThrowingException);
    306     auto* space = spaces.m_subspaceForTestNamedSetterThrowingException.get();
     299    auto& clientSpaces = clientData.clientSubspaces();
     300    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterThrowingException.get())
     301        return clientSpace;
     302
     303    auto& heapData = clientData.heapData();
     304    Locker locker { heapData.lock() };
     305
     306    auto& spaces = heapData.subspaces();
     307    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     308    if (!space) {
     309        Heap& heap = vm.heap;
     310        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterThrowingException> || !JSTestNamedSetterThrowingException::needsDestruction);
     311        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterThrowingException>)
     312            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterThrowingException);
     313        else
     314            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterThrowingException);
     315        spaces.m_subspaceForTestNamedSetterThrowingException = std::unique_ptr<IsoSubspace>(space);
    307316IGNORE_WARNINGS_BEGIN("unreachable-code")
    308317IGNORE_WARNINGS_BEGIN("tautological-compare")
    309     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterThrowingException::visitOutputConstraints;
    310     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    311     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    312         clientData.outputConstraintSpaces().append(space);
     318        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterThrowingException::visitOutputConstraints;
     319        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     320        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     321            heapData.outputConstraintSpaces().append(space);
    313322IGNORE_WARNINGS_END
    314323IGNORE_WARNINGS_END
    315     return space;
     324    }
     325
     326    clientSpaces.m_clientSubspaceForTestNamedSetterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     327    return clientSpaces.m_clientSubspaceForTestNamedSetterThrowingException.get();
    316328}
    317329
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7071    DECLARE_INFO;
    7172    template<typename CellType, JSC::SubspaceAccess>
    72     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     73    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7374    {
    7475        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterWithIdentifierPrototype, Base);
     
    324325}
    325326
    326 JSC::IsoSubspace* JSTestNamedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
     327JSC::GCClient::IsoSubspace* JSTestNamedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    327328{
    328329    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    329     auto& spaces = clientData.subspaces();
    330     if (auto* space = spaces.m_subspaceForTestNamedSetterWithIdentifier.get())
    331         return space;
    332     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIdentifier> || !JSTestNamedSetterWithIdentifier::needsDestruction);
    333     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIdentifier>)
    334         spaces.m_subspaceForTestNamedSetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterWithIdentifier);
    335     else
    336         spaces.m_subspaceForTestNamedSetterWithIdentifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterWithIdentifier);
    337     auto* space = spaces.m_subspaceForTestNamedSetterWithIdentifier.get();
     330    auto& clientSpaces = clientData.clientSubspaces();
     331    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterWithIdentifier.get())
     332        return clientSpace;
     333
     334    auto& heapData = clientData.heapData();
     335    Locker locker { heapData.lock() };
     336
     337    auto& spaces = heapData.subspaces();
     338    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     339    if (!space) {
     340        Heap& heap = vm.heap;
     341        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIdentifier> || !JSTestNamedSetterWithIdentifier::needsDestruction);
     342        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIdentifier>)
     343            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterWithIdentifier);
     344        else
     345            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterWithIdentifier);
     346        spaces.m_subspaceForTestNamedSetterWithIdentifier = std::unique_ptr<IsoSubspace>(space);
    338347IGNORE_WARNINGS_BEGIN("unreachable-code")
    339348IGNORE_WARNINGS_BEGIN("tautological-compare")
    340     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithIdentifier::visitOutputConstraints;
    341     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    342     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    343         clientData.outputConstraintSpaces().append(space);
     349        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithIdentifier::visitOutputConstraints;
     350        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     351        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     352            heapData.outputConstraintSpaces().append(space);
    344353IGNORE_WARNINGS_END
    345354IGNORE_WARNINGS_END
    346     return space;
     355    }
     356
     357    clientSpaces.m_clientSubspaceForTestNamedSetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     358    return clientSpaces.m_clientSubspaceForTestNamedSetterWithIdentifier.get();
    347359}
    348360
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7374    DECLARE_INFO;
    7475    template<typename CellType, JSC::SubspaceAccess>
    75     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     76    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7677    {
    7778        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterWithIndexedGetterPrototype, Base);
     
    371372}
    372373
    373 JSC::IsoSubspace* JSTestNamedSetterWithIndexedGetter::subspaceForImpl(JSC::VM& vm)
     374JSC::GCClient::IsoSubspace* JSTestNamedSetterWithIndexedGetter::subspaceForImpl(JSC::VM& vm)
    374375{
    375376    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    376     auto& spaces = clientData.subspaces();
    377     if (auto* space = spaces.m_subspaceForTestNamedSetterWithIndexedGetter.get())
    378         return space;
    379     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetter> || !JSTestNamedSetterWithIndexedGetter::needsDestruction);
    380     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetter>)
    381         spaces.m_subspaceForTestNamedSetterWithIndexedGetter = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterWithIndexedGetter);
    382     else
    383         spaces.m_subspaceForTestNamedSetterWithIndexedGetter = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterWithIndexedGetter);
    384     auto* space = spaces.m_subspaceForTestNamedSetterWithIndexedGetter.get();
     377    auto& clientSpaces = clientData.clientSubspaces();
     378    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetter.get())
     379        return clientSpace;
     380
     381    auto& heapData = clientData.heapData();
     382    Locker locker { heapData.lock() };
     383
     384    auto& spaces = heapData.subspaces();
     385    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     386    if (!space) {
     387        Heap& heap = vm.heap;
     388        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetter> || !JSTestNamedSetterWithIndexedGetter::needsDestruction);
     389        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetter>)
     390            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterWithIndexedGetter);
     391        else
     392            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterWithIndexedGetter);
     393        spaces.m_subspaceForTestNamedSetterWithIndexedGetter = std::unique_ptr<IsoSubspace>(space);
    385394IGNORE_WARNINGS_BEGIN("unreachable-code")
    386395IGNORE_WARNINGS_BEGIN("tautological-compare")
    387     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithIndexedGetter::visitOutputConstraints;
    388     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    389     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    390         clientData.outputConstraintSpaces().append(space);
     396        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithIndexedGetter::visitOutputConstraints;
     397        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     398        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     399            heapData.outputConstraintSpaces().append(space);
    391400IGNORE_WARNINGS_END
    392401IGNORE_WARNINGS_END
    393     return space;
     402    }
     403
     404    clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetter = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     405    return clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetter.get();
    394406}
    395407
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7374    DECLARE_INFO;
    7475    template<typename CellType, JSC::SubspaceAccess>
    75     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     76    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7677    {
    7778        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterWithIndexedGetterAndSetterPrototype, Base);
     
    421422}
    422423
    423 JSC::IsoSubspace* JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl(JSC::VM& vm)
     424JSC::GCClient::IsoSubspace* JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl(JSC::VM& vm)
    424425{
    425426    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    426     auto& spaces = clientData.subspaces();
    427     if (auto* space = spaces.m_subspaceForTestNamedSetterWithIndexedGetterAndSetter.get())
    428         return space;
    429     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetterAndSetter> || !JSTestNamedSetterWithIndexedGetterAndSetter::needsDestruction);
    430     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetterAndSetter>)
    431         spaces.m_subspaceForTestNamedSetterWithIndexedGetterAndSetter = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterWithIndexedGetterAndSetter);
    432     else
    433         spaces.m_subspaceForTestNamedSetterWithIndexedGetterAndSetter = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterWithIndexedGetterAndSetter);
    434     auto* space = spaces.m_subspaceForTestNamedSetterWithIndexedGetterAndSetter.get();
     427    auto& clientSpaces = clientData.clientSubspaces();
     428    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetterAndSetter.get())
     429        return clientSpace;
     430
     431    auto& heapData = clientData.heapData();
     432    Locker locker { heapData.lock() };
     433
     434    auto& spaces = heapData.subspaces();
     435    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     436    if (!space) {
     437        Heap& heap = vm.heap;
     438        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetterAndSetter> || !JSTestNamedSetterWithIndexedGetterAndSetter::needsDestruction);
     439        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithIndexedGetterAndSetter>)
     440            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterWithIndexedGetterAndSetter);
     441        else
     442            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterWithIndexedGetterAndSetter);
     443        spaces.m_subspaceForTestNamedSetterWithIndexedGetterAndSetter = std::unique_ptr<IsoSubspace>(space);
    435444IGNORE_WARNINGS_BEGIN("unreachable-code")
    436445IGNORE_WARNINGS_BEGIN("tautological-compare")
    437     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithIndexedGetterAndSetter::visitOutputConstraints;
    438     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    439     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    440         clientData.outputConstraintSpaces().append(space);
     446        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithIndexedGetterAndSetter::visitOutputConstraints;
     447        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     448        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     449            heapData.outputConstraintSpaces().append(space);
    441450IGNORE_WARNINGS_END
    442451IGNORE_WARNINGS_END
    443     return space;
     452    }
     453
     454    clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetterAndSetter = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     455    return clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetterAndSetter.get();
    444456}
    445457
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAbstractOperations.h"
     
    6364    DECLARE_INFO;
    6465    template<typename CellType, JSC::SubspaceAccess>
    65     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     66    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6667    {
    6768        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterWithLegacyOverrideBuiltInsPrototype, Base);
     
    270271}
    271272
    272 JSC::IsoSubspace* JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
     273JSC::GCClient::IsoSubspace* JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
    273274{
    274275    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    275     auto& spaces = clientData.subspaces();
    276     if (auto* space = spaces.m_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns.get())
    277         return space;
    278     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyOverrideBuiltIns> || !JSTestNamedSetterWithLegacyOverrideBuiltIns::needsDestruction);
    279     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyOverrideBuiltIns>)
    280         spaces.m_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterWithLegacyOverrideBuiltIns);
    281     else
    282         spaces.m_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterWithLegacyOverrideBuiltIns);
    283     auto* space = spaces.m_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns.get();
     276    auto& clientSpaces = clientData.clientSubspaces();
     277    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyOverrideBuiltIns.get())
     278        return clientSpace;
     279
     280    auto& heapData = clientData.heapData();
     281    Locker locker { heapData.lock() };
     282
     283    auto& spaces = heapData.subspaces();
     284    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     285    if (!space) {
     286        Heap& heap = vm.heap;
     287        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyOverrideBuiltIns> || !JSTestNamedSetterWithLegacyOverrideBuiltIns::needsDestruction);
     288        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyOverrideBuiltIns>)
     289            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterWithLegacyOverrideBuiltIns);
     290        else
     291            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterWithLegacyOverrideBuiltIns);
     292        spaces.m_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns = std::unique_ptr<IsoSubspace>(space);
    284293IGNORE_WARNINGS_BEGIN("unreachable-code")
    285294IGNORE_WARNINGS_BEGIN("tautological-compare")
    286     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithLegacyOverrideBuiltIns::visitOutputConstraints;
    287     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    288     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    289         clientData.outputConstraintSpaces().append(space);
     295        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithLegacyOverrideBuiltIns::visitOutputConstraints;
     296        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     297        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     298            heapData.outputConstraintSpaces().append(space);
    290299IGNORE_WARNINGS_END
    291300IGNORE_WARNINGS_END
    292     return space;
     301    }
     302
     303    clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyOverrideBuiltIns = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     304    return clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyOverrideBuiltIns.get();
    293305}
    294306
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7273    DECLARE_INFO;
    7374    template<typename CellType, JSC::SubspaceAccess>
    74     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     75    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7576    {
    7677        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterWithLegacyUnforgeablePropertiesPrototype, Base);
     
    354355}
    355356
    356 JSC::IsoSubspace* JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl(JSC::VM& vm)
     357JSC::GCClient::IsoSubspace* JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl(JSC::VM& vm)
    357358{
    358359    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    359     auto& spaces = clientData.subspaces();
    360     if (auto* space = spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeableProperties.get())
    361         return space;
    362     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeableProperties> || !JSTestNamedSetterWithLegacyUnforgeableProperties::needsDestruction);
    363     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeableProperties>)
    364         spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeableProperties = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterWithLegacyUnforgeableProperties);
    365     else
    366         spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeableProperties = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterWithLegacyUnforgeableProperties);
    367     auto* space = spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeableProperties.get();
     360    auto& clientSpaces = clientData.clientSubspaces();
     361    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeableProperties.get())
     362        return clientSpace;
     363
     364    auto& heapData = clientData.heapData();
     365    Locker locker { heapData.lock() };
     366
     367    auto& spaces = heapData.subspaces();
     368    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     369    if (!space) {
     370        Heap& heap = vm.heap;
     371        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeableProperties> || !JSTestNamedSetterWithLegacyUnforgeableProperties::needsDestruction);
     372        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeableProperties>)
     373            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterWithLegacyUnforgeableProperties);
     374        else
     375            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterWithLegacyUnforgeableProperties);
     376        spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeableProperties = std::unique_ptr<IsoSubspace>(space);
    368377IGNORE_WARNINGS_BEGIN("unreachable-code")
    369378IGNORE_WARNINGS_BEGIN("tautological-compare")
    370     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithLegacyUnforgeableProperties::visitOutputConstraints;
    371     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    372     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    373         clientData.outputConstraintSpaces().append(space);
     379        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithLegacyUnforgeableProperties::visitOutputConstraints;
     380        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     381        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     382            heapData.outputConstraintSpaces().append(space);
    374383IGNORE_WARNINGS_END
    375384IGNORE_WARNINGS_END
    376     return space;
     385    }
     386
     387    clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeableProperties = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     388    return clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeableProperties.get();
    377389}
    378390
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    7273    DECLARE_INFO;
    7374    template<typename CellType, JSC::SubspaceAccess>
    74     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     75    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7576    {
    7677        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltInsPrototype, Base);
     
    331332}
    332333
    333 JSC::IsoSubspace* JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
     334JSC::GCClient::IsoSubspace* JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
    334335{
    335336    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    336     auto& spaces = clientData.subspaces();
    337     if (auto* space = spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.get())
    338         return space;
    339     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns> || !JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::needsDestruction);
    340     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns>)
    341         spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns);
    342     else
    343         spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns);
    344     auto* space = spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.get();
     337    auto& clientSpaces = clientData.clientSubspaces();
     338    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.get())
     339        return clientSpace;
     340
     341    auto& heapData = clientData.heapData();
     342    Locker locker { heapData.lock() };
     343
     344    auto& spaces = heapData.subspaces();
     345    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     346    if (!space) {
     347        Heap& heap = vm.heap;
     348        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns> || !JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::needsDestruction);
     349        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns>)
     350            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns);
     351        else
     352            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns);
     353        spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns = std::unique_ptr<IsoSubspace>(space);
    345354IGNORE_WARNINGS_BEGIN("unreachable-code")
    346355IGNORE_WARNINGS_BEGIN("tautological-compare")
    347     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::visitOutputConstraints;
    348     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    349     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    350         clientData.outputConstraintSpaces().append(space);
     356        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::visitOutputConstraints;
     357        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     358        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     359            heapData.outputConstraintSpaces().append(space);
    351360IGNORE_WARNINGS_END
    352361IGNORE_WARNINGS_END
    353     return space;
     362    }
     363
     364    clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     365    return clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.get();
    354366}
    355367
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.h

    r285730 r290129  
    5656
    5757    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    58     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     58    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5959    {
    6060        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6262        return subspaceForImpl(vm);
    6363    }
    64     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     64    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6565    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6666public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceObject.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    273274#endif
    274275
    275 JSC::IsoSubspace* JSTestNamespaceObject::subspaceForImpl(JSC::VM& vm)
     276JSC::GCClient::IsoSubspace* JSTestNamespaceObject::subspaceForImpl(JSC::VM& vm)
    276277{
    277278    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    278     auto& spaces = clientData.subspaces();
    279     if (auto* space = spaces.m_subspaceForTestNamespaceObject.get())
    280         return space;
    281     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamespaceObject> || !JSTestNamespaceObject::needsDestruction);
    282     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamespaceObject>)
    283         spaces.m_subspaceForTestNamespaceObject = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNamespaceObject);
    284     else
    285         spaces.m_subspaceForTestNamespaceObject = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNamespaceObject);
    286     auto* space = spaces.m_subspaceForTestNamespaceObject.get();
     279    auto& clientSpaces = clientData.clientSubspaces();
     280    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNamespaceObject.get())
     281        return clientSpace;
     282
     283    auto& heapData = clientData.heapData();
     284    Locker locker { heapData.lock() };
     285
     286    auto& spaces = heapData.subspaces();
     287    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     288    if (!space) {
     289        Heap& heap = vm.heap;
     290        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamespaceObject> || !JSTestNamespaceObject::needsDestruction);
     291        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNamespaceObject>)
     292            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNamespaceObject);
     293        else
     294            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNamespaceObject);
     295        spaces.m_subspaceForTestNamespaceObject = std::unique_ptr<IsoSubspace>(space);
    287296IGNORE_WARNINGS_BEGIN("unreachable-code")
    288297IGNORE_WARNINGS_BEGIN("tautological-compare")
    289     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamespaceObject::visitOutputConstraints;
    290     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    291     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    292         clientData.outputConstraintSpaces().append(space);
     298        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNamespaceObject::visitOutputConstraints;
     299        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     300        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     301            heapData.outputConstraintSpaces().append(space);
    293302IGNORE_WARNINGS_END
    294303IGNORE_WARNINGS_END
    295     return space;
    296 }
    297 
    298 
    299 }
     304    }
     305
     306    clientSpaces.m_clientSubspaceForTestNamespaceObject = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     307    return clientSpaces.m_clientSubspaceForTestNamespaceObject.get();
     308}
     309
     310
     311}
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceObject.h

    r285730 r290129  
    4545
    4646    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    47     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     47    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4848    {
    4949        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5151        return subspaceForImpl(vm);
    5252    }
    53     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     53    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5454protected:
    5555    JSTestNamespaceObject(JSC::Structure*, JSDOMGlobalObject&);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "DOMPromiseProxy.h"
     
    9394    DECLARE_INFO;
    9495    template<typename CellType, JSC::SubspaceAccess>
    95     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     96    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9697    {
    9798        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestNodePrototype, Base);
     
    398399    DECLARE_INFO;
    399400
    400     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     401    template<typename, SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    401402    {
    402403        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    403404            return nullptr;
    404405        auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    405         auto& spaces = clientData.subspaces();
    406         if (auto* space = spaces.m_subspaceForTestNodeIterator.get())
    407             return space;
    408         static_assert(std::is_base_of_v<JSC::JSDestructibleObject, TestNodeIterator> || !TestNodeIterator::needsDestruction);
    409         if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, TestNodeIterator>)
    410             spaces.m_subspaceForTestNodeIterator = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), TestNodeIterator);
    411         else
    412             spaces.m_subspaceForTestNodeIterator = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), TestNodeIterator);
    413         auto* space = spaces.m_subspaceForTestNodeIterator.get();
     406        auto& clientSpaces = clientData.clientSubspaces();
     407        if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNodeIterator.get())
     408            return clientSpace;
     409
     410        auto& heapData = clientData.heapData();
     411        Locker locker { heapData.lock() };
     412
     413        auto& spaces = heapData.subspaces();
     414        IsoSubspace* space = spaces.m_subspaceForTestNodeIterator.get();
     415        if (!space) {
     416            Heap& heap = vm.heap;
     417            static_assert(std::is_base_of_v<JSC::JSDestructibleObject, TestNodeIterator> || !TestNodeIterator::needsDestruction);
     418            if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, TestNodeIterator>)
     419                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, TestNodeIterator);
     420            else
     421                space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, TestNodeIterator);
     422            spaces.m_subspaceForTestNodeIterator = std::unique_ptr<IsoSubspace>(space);
    414423IGNORE_WARNINGS_BEGIN("unreachable-code")
    415424IGNORE_WARNINGS_BEGIN("tautological-compare")
    416         void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = TestNodeIterator::visitOutputConstraints;
    417         void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    418         if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    419             clientData.outputConstraintSpaces().append(space);
     425            void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = TestNodeIterator::visitOutputConstraints;
     426            void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     427            if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     428                heapData.outputConstraintSpaces().append(space);
    420429IGNORE_WARNINGS_END
    421430IGNORE_WARNINGS_END
    422         return space;
     431        }
     432
     433        clientSpaces.m_clientSubspaceForTestNodeIterator = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     434        return clientSpaces.m_clientSubspaceForTestNodeIterator.get();
    423435    }
    424436
     
    492504}
    493505
    494 JSC::IsoSubspace* JSTestNode::subspaceForImpl(JSC::VM& vm)
     506JSC::GCClient::IsoSubspace* JSTestNode::subspaceForImpl(JSC::VM& vm)
    495507{
    496508    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    497     auto& spaces = clientData.subspaces();
    498     if (auto* space = spaces.m_subspaceForTestNode.get())
    499         return space;
    500     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNode> || !JSTestNode::needsDestruction);
    501     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNode>)
    502         spaces.m_subspaceForTestNode = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestNode);
    503     else
    504         spaces.m_subspaceForTestNode = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestNode);
    505     auto* space = spaces.m_subspaceForTestNode.get();
     509    auto& clientSpaces = clientData.clientSubspaces();
     510    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestNode.get())
     511        return clientSpace;
     512
     513    auto& heapData = clientData.heapData();
     514    Locker locker { heapData.lock() };
     515
     516    auto& spaces = heapData.subspaces();
     517    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     518    if (!space) {
     519        Heap& heap = vm.heap;
     520        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestNode> || !JSTestNode::needsDestruction);
     521        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestNode>)
     522            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestNode);
     523        else
     524            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestNode);
     525        spaces.m_subspaceForTestNode = std::unique_ptr<IsoSubspace>(space);
    506526IGNORE_WARNINGS_BEGIN("unreachable-code")
    507527IGNORE_WARNINGS_BEGIN("tautological-compare")
    508     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNode::visitOutputConstraints;
    509     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    510     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    511         clientData.outputConstraintSpaces().append(space);
     528        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestNode::visitOutputConstraints;
     529        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     530        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     531            heapData.outputConstraintSpaces().append(space);
    512532IGNORE_WARNINGS_END
    513533IGNORE_WARNINGS_END
    514     return space;
     534    }
     535
     536    clientSpaces.m_clientSubspaceForTestNode = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     537    return clientSpaces.m_clientSubspaceForTestNode.get();
    515538}
    516539
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h

    r285730 r290129  
    4949
    5050    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    51     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     51    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5252    {
    5353        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5555        return subspaceForImpl(vm);
    5656    }
    57     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     57    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5858    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    5959    TestNode& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp

    r289117 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "DOMPromiseProxy.h"
     
    18671868    DECLARE_INFO;
    18681869    template<typename CellType, JSC::SubspaceAccess>
    1869     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     1870    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    18701871    {
    18711872        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestObjPrototype, Base);
     
    90609061}
    90619062
    9062 JSC::IsoSubspace* JSTestObj::subspaceForImpl(JSC::VM& vm)
     9063JSC::GCClient::IsoSubspace* JSTestObj::subspaceForImpl(JSC::VM& vm)
    90639064{
    90649065    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    9065     auto& spaces = clientData.subspaces();
    9066     if (auto* space = spaces.m_subspaceForTestObj.get())
    9067         return space;
    9068     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestObj> || !JSTestObj::needsDestruction);
    9069     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestObj>)
    9070         spaces.m_subspaceForTestObj = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestObj);
    9071     else
    9072         spaces.m_subspaceForTestObj = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestObj);
    9073     auto* space = spaces.m_subspaceForTestObj.get();
     9066    auto& clientSpaces = clientData.clientSubspaces();
     9067    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestObj.get())
     9068        return clientSpace;
     9069
     9070    auto& heapData = clientData.heapData();
     9071    Locker locker { heapData.lock() };
     9072
     9073    auto& spaces = heapData.subspaces();
     9074    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     9075    if (!space) {
     9076        Heap& heap = vm.heap;
     9077        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestObj> || !JSTestObj::needsDestruction);
     9078        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestObj>)
     9079            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestObj);
     9080        else
     9081            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestObj);
     9082        spaces.m_subspaceForTestObj = std::unique_ptr<IsoSubspace>(space);
    90749083IGNORE_WARNINGS_BEGIN("unreachable-code")
    90759084IGNORE_WARNINGS_BEGIN("tautological-compare")
    9076     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestObj::visitOutputConstraints;
    9077     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    9078     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    9079         clientData.outputConstraintSpaces().append(space);
     9085        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestObj::visitOutputConstraints;
     9086        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     9087        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     9088            heapData.outputConstraintSpaces().append(space);
    90809089IGNORE_WARNINGS_END
    90819090IGNORE_WARNINGS_END
    9082     return space;
     9091    }
     9092
     9093    clientSpaces.m_clientSubspaceForTestObj = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     9094    return clientSpaces.m_clientSubspaceForTestObj.get();
    90839095}
    90849096
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h

    r285730 r290129  
    6060    mutable JSC::WriteBarrier<JSC::Unknown> m_cachedAttribute3;
    6161#endif
    62     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     62    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6363    {
    6464        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6666        return subspaceForImpl(vm);
    6767    }
    68     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     68    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6969    DECLARE_VISIT_CHILDREN;
    7070
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOperationConditional.cpp

    r288118 r290129  
    2626
    2727#include "ActiveDOMObject.h"
     28#include "DOMClientIsoSubspaces.h"
    2829#include "DOMIsoSubspaces.h"
    2930#include "JSDOMBinding.h"
     
    7980    DECLARE_INFO;
    8081    template<typename CellType, JSC::SubspaceAccess>
    81     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     82    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8283    {
    8384        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestOperationConditionalPrototype, Base);
     
    227228#endif
    228229
    229 JSC::IsoSubspace* JSTestOperationConditional::subspaceForImpl(JSC::VM& vm)
     230JSC::GCClient::IsoSubspace* JSTestOperationConditional::subspaceForImpl(JSC::VM& vm)
    230231{
    231232    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    232     auto& spaces = clientData.subspaces();
    233     if (auto* space = spaces.m_subspaceForTestOperationConditional.get())
    234         return space;
    235     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestOperationConditional> || !JSTestOperationConditional::needsDestruction);
    236     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestOperationConditional>)
    237         spaces.m_subspaceForTestOperationConditional = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestOperationConditional);
    238     else
    239         spaces.m_subspaceForTestOperationConditional = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestOperationConditional);
    240     auto* space = spaces.m_subspaceForTestOperationConditional.get();
     233    auto& clientSpaces = clientData.clientSubspaces();
     234    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestOperationConditional.get())
     235        return clientSpace;
     236
     237    auto& heapData = clientData.heapData();
     238    Locker locker { heapData.lock() };
     239
     240    auto& spaces = heapData.subspaces();
     241    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     242    if (!space) {
     243        Heap& heap = vm.heap;
     244        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestOperationConditional> || !JSTestOperationConditional::needsDestruction);
     245        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestOperationConditional>)
     246            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestOperationConditional);
     247        else
     248            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestOperationConditional);
     249        spaces.m_subspaceForTestOperationConditional = std::unique_ptr<IsoSubspace>(space);
    241250IGNORE_WARNINGS_BEGIN("unreachable-code")
    242251IGNORE_WARNINGS_BEGIN("tautological-compare")
    243     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestOperationConditional::visitOutputConstraints;
    244     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    245     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    246         clientData.outputConstraintSpaces().append(space);
     252        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestOperationConditional::visitOutputConstraints;
     253        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     254        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     255            heapData.outputConstraintSpaces().append(space);
    247256IGNORE_WARNINGS_END
    248257IGNORE_WARNINGS_END
    249     return space;
     258    }
     259
     260    clientSpaces.m_clientSubspaceForTestOperationConditional = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     261    return clientSpaces.m_clientSubspaceForTestOperationConditional.get();
    250262}
    251263
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOperationConditional.h

    r285730 r290129  
    5252
    5353    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    54     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     54    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5555    {
    5656        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5858        return subspaceForImpl(vm);
    5959    }
    60     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     60    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6161    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6262protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSBlob.h"
     
    6768    DECLARE_INFO;
    6869    template<typename CellType, JSC::SubspaceAccess>
    69     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     70    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7071    {
    7172        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestOverloadedConstructorsPrototype, Base);
     
    298299}
    299300
    300 JSC::IsoSubspace* JSTestOverloadedConstructors::subspaceForImpl(JSC::VM& vm)
     301JSC::GCClient::IsoSubspace* JSTestOverloadedConstructors::subspaceForImpl(JSC::VM& vm)
    301302{
    302303    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    303     auto& spaces = clientData.subspaces();
    304     if (auto* space = spaces.m_subspaceForTestOverloadedConstructors.get())
    305         return space;
    306     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructors> || !JSTestOverloadedConstructors::needsDestruction);
    307     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructors>)
    308         spaces.m_subspaceForTestOverloadedConstructors = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestOverloadedConstructors);
    309     else
    310         spaces.m_subspaceForTestOverloadedConstructors = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestOverloadedConstructors);
    311     auto* space = spaces.m_subspaceForTestOverloadedConstructors.get();
     304    auto& clientSpaces = clientData.clientSubspaces();
     305    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestOverloadedConstructors.get())
     306        return clientSpace;
     307
     308    auto& heapData = clientData.heapData();
     309    Locker locker { heapData.lock() };
     310
     311    auto& spaces = heapData.subspaces();
     312    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     313    if (!space) {
     314        Heap& heap = vm.heap;
     315        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructors> || !JSTestOverloadedConstructors::needsDestruction);
     316        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructors>)
     317            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestOverloadedConstructors);
     318        else
     319            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestOverloadedConstructors);
     320        spaces.m_subspaceForTestOverloadedConstructors = std::unique_ptr<IsoSubspace>(space);
    312321IGNORE_WARNINGS_BEGIN("unreachable-code")
    313322IGNORE_WARNINGS_BEGIN("tautological-compare")
    314     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestOverloadedConstructors::visitOutputConstraints;
    315     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    316     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    317         clientData.outputConstraintSpaces().append(space);
     323        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestOverloadedConstructors::visitOutputConstraints;
     324        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     325        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     326            heapData.outputConstraintSpaces().append(space);
    318327IGNORE_WARNINGS_END
    319328IGNORE_WARNINGS_END
    320     return space;
     329    }
     330
     331    clientSpaces.m_clientSubspaceForTestOverloadedConstructors = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     332    return clientSpaces.m_clientSubspaceForTestOverloadedConstructors.get();
    321333}
    322334
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6667    DECLARE_INFO;
    6768    template<typename CellType, JSC::SubspaceAccess>
    68     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     69    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6970    {
    7071        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestOverloadedConstructorsWithSequencePrototype, Base);
     
    235236}
    236237
    237 JSC::IsoSubspace* JSTestOverloadedConstructorsWithSequence::subspaceForImpl(JSC::VM& vm)
     238JSC::GCClient::IsoSubspace* JSTestOverloadedConstructorsWithSequence::subspaceForImpl(JSC::VM& vm)
    238239{
    239240    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    240     auto& spaces = clientData.subspaces();
    241     if (auto* space = spaces.m_subspaceForTestOverloadedConstructorsWithSequence.get())
    242         return space;
    243     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructorsWithSequence> || !JSTestOverloadedConstructorsWithSequence::needsDestruction);
    244     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructorsWithSequence>)
    245         spaces.m_subspaceForTestOverloadedConstructorsWithSequence = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestOverloadedConstructorsWithSequence);
    246     else
    247         spaces.m_subspaceForTestOverloadedConstructorsWithSequence = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestOverloadedConstructorsWithSequence);
    248     auto* space = spaces.m_subspaceForTestOverloadedConstructorsWithSequence.get();
     241    auto& clientSpaces = clientData.clientSubspaces();
     242    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestOverloadedConstructorsWithSequence.get())
     243        return clientSpace;
     244
     245    auto& heapData = clientData.heapData();
     246    Locker locker { heapData.lock() };
     247
     248    auto& spaces = heapData.subspaces();
     249    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     250    if (!space) {
     251        Heap& heap = vm.heap;
     252        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructorsWithSequence> || !JSTestOverloadedConstructorsWithSequence::needsDestruction);
     253        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestOverloadedConstructorsWithSequence>)
     254            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestOverloadedConstructorsWithSequence);
     255        else
     256            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestOverloadedConstructorsWithSequence);
     257        spaces.m_subspaceForTestOverloadedConstructorsWithSequence = std::unique_ptr<IsoSubspace>(space);
    249258IGNORE_WARNINGS_BEGIN("unreachable-code")
    250259IGNORE_WARNINGS_BEGIN("tautological-compare")
    251     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestOverloadedConstructorsWithSequence::visitOutputConstraints;
    252     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    253     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    254         clientData.outputConstraintSpaces().append(space);
     260        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestOverloadedConstructorsWithSequence::visitOutputConstraints;
     261        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     262        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     263            heapData.outputConstraintSpaces().append(space);
    255264IGNORE_WARNINGS_END
    256265IGNORE_WARNINGS_END
    257     return space;
     266    }
     267
     268    clientSpaces.m_clientSubspaceForTestOverloadedConstructorsWithSequence = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     269    return clientSpaces.m_clientSubspaceForTestOverloadedConstructorsWithSequence.get();
    258270}
    259271
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6263    DECLARE_INFO;
    6364    template<typename CellType, JSC::SubspaceAccess>
    64     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     65    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6566    {
    6667        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestPluginInterfacePrototype, Base);
     
    237238}
    238239
    239 JSC::IsoSubspace* JSTestPluginInterface::subspaceForImpl(JSC::VM& vm)
     240JSC::GCClient::IsoSubspace* JSTestPluginInterface::subspaceForImpl(JSC::VM& vm)
    240241{
    241242    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    242     auto& spaces = clientData.subspaces();
    243     if (auto* space = spaces.m_subspaceForTestPluginInterface.get())
    244         return space;
    245     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestPluginInterface> || !JSTestPluginInterface::needsDestruction);
    246     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestPluginInterface>)
    247         spaces.m_subspaceForTestPluginInterface = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestPluginInterface);
    248     else
    249         spaces.m_subspaceForTestPluginInterface = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestPluginInterface);
    250     auto* space = spaces.m_subspaceForTestPluginInterface.get();
     243    auto& clientSpaces = clientData.clientSubspaces();
     244    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestPluginInterface.get())
     245        return clientSpace;
     246
     247    auto& heapData = clientData.heapData();
     248    Locker locker { heapData.lock() };
     249
     250    auto& spaces = heapData.subspaces();
     251    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     252    if (!space) {
     253        Heap& heap = vm.heap;
     254        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestPluginInterface> || !JSTestPluginInterface::needsDestruction);
     255        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestPluginInterface>)
     256            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestPluginInterface);
     257        else
     258            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestPluginInterface);
     259        spaces.m_subspaceForTestPluginInterface = std::unique_ptr<IsoSubspace>(space);
    251260IGNORE_WARNINGS_BEGIN("unreachable-code")
    252261IGNORE_WARNINGS_BEGIN("tautological-compare")
    253     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestPluginInterface::visitOutputConstraints;
    254     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    255     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    256         clientData.outputConstraintSpaces().append(space);
     262        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestPluginInterface::visitOutputConstraints;
     263        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     264        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     265            heapData.outputConstraintSpaces().append(space);
    257266IGNORE_WARNINGS_END
    258267IGNORE_WARNINGS_END
    259     return space;
     268    }
     269
     270    clientSpaces.m_clientSubspaceForTestPluginInterface = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     271    return clientSpaces.m_clientSubspaceForTestPluginInterface.get();
    260272}
    261273
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.h

    r285730 r290129  
    5757
    5858    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    59     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     59    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6060    {
    6161        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6363        return subspaceForImpl(vm);
    6464    }
    65     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     65    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6666    DECLARE_VISIT_CHILDREN;
    6767
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "DOMPromiseProxy.h"
     
    146147    DECLARE_INFO;
    147148    template<typename CellType, JSC::SubspaceAccess>
    148     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     149    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    149150    {
    150151        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestPromiseRejectionEventPrototype, Base);
     
    296297}
    297298
    298 JSC::IsoSubspace* JSTestPromiseRejectionEvent::subspaceForImpl(JSC::VM& vm)
     299JSC::GCClient::IsoSubspace* JSTestPromiseRejectionEvent::subspaceForImpl(JSC::VM& vm)
    299300{
    300301    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    301     auto& spaces = clientData.subspaces();
    302     if (auto* space = spaces.m_subspaceForTestPromiseRejectionEvent.get())
    303         return space;
    304     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestPromiseRejectionEvent> || !JSTestPromiseRejectionEvent::needsDestruction);
    305     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestPromiseRejectionEvent>)
    306         spaces.m_subspaceForTestPromiseRejectionEvent = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestPromiseRejectionEvent);
    307     else
    308         spaces.m_subspaceForTestPromiseRejectionEvent = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestPromiseRejectionEvent);
    309     auto* space = spaces.m_subspaceForTestPromiseRejectionEvent.get();
     302    auto& clientSpaces = clientData.clientSubspaces();
     303    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestPromiseRejectionEvent.get())
     304        return clientSpace;
     305
     306    auto& heapData = clientData.heapData();
     307    Locker locker { heapData.lock() };
     308
     309    auto& spaces = heapData.subspaces();
     310    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     311    if (!space) {
     312        Heap& heap = vm.heap;
     313        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestPromiseRejectionEvent> || !JSTestPromiseRejectionEvent::needsDestruction);
     314        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestPromiseRejectionEvent>)
     315            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestPromiseRejectionEvent);
     316        else
     317            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestPromiseRejectionEvent);
     318        spaces.m_subspaceForTestPromiseRejectionEvent = std::unique_ptr<IsoSubspace>(space);
    310319IGNORE_WARNINGS_BEGIN("unreachable-code")
    311320IGNORE_WARNINGS_BEGIN("tautological-compare")
    312     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestPromiseRejectionEvent::visitOutputConstraints;
    313     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    314     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    315         clientData.outputConstraintSpaces().append(space);
     321        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestPromiseRejectionEvent::visitOutputConstraints;
     322        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     323        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     324            heapData.outputConstraintSpaces().append(space);
    316325IGNORE_WARNINGS_END
    317326IGNORE_WARNINGS_END
    318     return space;
     327    }
     328
     329    clientSpaces.m_clientSubspaceForTestPromiseRejectionEvent = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     330    return clientSpaces.m_clientSubspaceForTestPromiseRejectionEvent.get();
    319331}
    320332
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060    TestPromiseRejectionEvent& wrapped() const
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    7778    DECLARE_INFO;
    7879    template<typename CellType, JSC::SubspaceAccess>
    79     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     80    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8081    {
    8182        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestReadOnlyMapLikePrototype, Base);
     
    298299}
    299300
    300 JSC::IsoSubspace* JSTestReadOnlyMapLike::subspaceForImpl(JSC::VM& vm)
     301JSC::GCClient::IsoSubspace* JSTestReadOnlyMapLike::subspaceForImpl(JSC::VM& vm)
    301302{
    302303    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    303     auto& spaces = clientData.subspaces();
    304     if (auto* space = spaces.m_subspaceForTestReadOnlyMapLike.get())
    305         return space;
    306     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlyMapLike> || !JSTestReadOnlyMapLike::needsDestruction);
    307     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlyMapLike>)
    308         spaces.m_subspaceForTestReadOnlyMapLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestReadOnlyMapLike);
    309     else
    310         spaces.m_subspaceForTestReadOnlyMapLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestReadOnlyMapLike);
    311     auto* space = spaces.m_subspaceForTestReadOnlyMapLike.get();
     304    auto& clientSpaces = clientData.clientSubspaces();
     305    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestReadOnlyMapLike.get())
     306        return clientSpace;
     307
     308    auto& heapData = clientData.heapData();
     309    Locker locker { heapData.lock() };
     310
     311    auto& spaces = heapData.subspaces();
     312    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     313    if (!space) {
     314        Heap& heap = vm.heap;
     315        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlyMapLike> || !JSTestReadOnlyMapLike::needsDestruction);
     316        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlyMapLike>)
     317            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestReadOnlyMapLike);
     318        else
     319            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestReadOnlyMapLike);
     320        spaces.m_subspaceForTestReadOnlyMapLike = std::unique_ptr<IsoSubspace>(space);
    312321IGNORE_WARNINGS_BEGIN("unreachable-code")
    313322IGNORE_WARNINGS_BEGIN("tautological-compare")
    314     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestReadOnlyMapLike::visitOutputConstraints;
    315     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    316     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    317         clientData.outputConstraintSpaces().append(space);
     323        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestReadOnlyMapLike::visitOutputConstraints;
     324        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     325        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     326            heapData.outputConstraintSpaces().append(space);
    318327IGNORE_WARNINGS_END
    319328IGNORE_WARNINGS_END
    320     return space;
     329    }
     330
     331    clientSpaces.m_clientSubspaceForTestReadOnlyMapLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     332    return clientSpaces.m_clientSubspaceForTestReadOnlyMapLike.get();
    321333}
    322334
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlyMapLike.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    7677    DECLARE_INFO;
    7778    template<typename CellType, JSC::SubspaceAccess>
    78     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     79    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7980    {
    8081        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestReadOnlySetLikePrototype, Base);
     
    277278}
    278279
    279 JSC::IsoSubspace* JSTestReadOnlySetLike::subspaceForImpl(JSC::VM& vm)
     280JSC::GCClient::IsoSubspace* JSTestReadOnlySetLike::subspaceForImpl(JSC::VM& vm)
    280281{
    281282    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    282     auto& spaces = clientData.subspaces();
    283     if (auto* space = spaces.m_subspaceForTestReadOnlySetLike.get())
    284         return space;
    285     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlySetLike> || !JSTestReadOnlySetLike::needsDestruction);
    286     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlySetLike>)
    287         spaces.m_subspaceForTestReadOnlySetLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestReadOnlySetLike);
    288     else
    289         spaces.m_subspaceForTestReadOnlySetLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestReadOnlySetLike);
    290     auto* space = spaces.m_subspaceForTestReadOnlySetLike.get();
     283    auto& clientSpaces = clientData.clientSubspaces();
     284    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestReadOnlySetLike.get())
     285        return clientSpace;
     286
     287    auto& heapData = clientData.heapData();
     288    Locker locker { heapData.lock() };
     289
     290    auto& spaces = heapData.subspaces();
     291    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     292    if (!space) {
     293        Heap& heap = vm.heap;
     294        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlySetLike> || !JSTestReadOnlySetLike::needsDestruction);
     295        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestReadOnlySetLike>)
     296            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestReadOnlySetLike);
     297        else
     298            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestReadOnlySetLike);
     299        spaces.m_subspaceForTestReadOnlySetLike = std::unique_ptr<IsoSubspace>(space);
    291300IGNORE_WARNINGS_BEGIN("unreachable-code")
    292301IGNORE_WARNINGS_BEGIN("tautological-compare")
    293     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestReadOnlySetLike::visitOutputConstraints;
    294     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    295     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    296         clientData.outputConstraintSpaces().append(space);
     302        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestReadOnlySetLike::visitOutputConstraints;
     303        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     304        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     305            heapData.outputConstraintSpaces().append(space);
    297306IGNORE_WARNINGS_END
    298307IGNORE_WARNINGS_END
    299     return space;
     308    }
     309
     310    clientSpaces.m_clientSubspaceForTestReadOnlySetLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     311    return clientSpaces.m_clientSubspaceForTestReadOnlySetLike.get();
    300312}
    301313
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlySetLike.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6162    DECLARE_INFO;
    6263    template<typename CellType, JSC::SubspaceAccess>
    63     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     64    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6465    {
    6566        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestReportExtraMemoryCostPrototype, Base);
     
    164165}
    165166
    166 JSC::IsoSubspace* JSTestReportExtraMemoryCost::subspaceForImpl(JSC::VM& vm)
     167JSC::GCClient::IsoSubspace* JSTestReportExtraMemoryCost::subspaceForImpl(JSC::VM& vm)
    167168{
    168169    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    169     auto& spaces = clientData.subspaces();
    170     if (auto* space = spaces.m_subspaceForTestReportExtraMemoryCost.get())
    171         return space;
    172     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestReportExtraMemoryCost> || !JSTestReportExtraMemoryCost::needsDestruction);
    173     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestReportExtraMemoryCost>)
    174         spaces.m_subspaceForTestReportExtraMemoryCost = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestReportExtraMemoryCost);
    175     else
    176         spaces.m_subspaceForTestReportExtraMemoryCost = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestReportExtraMemoryCost);
    177     auto* space = spaces.m_subspaceForTestReportExtraMemoryCost.get();
     170    auto& clientSpaces = clientData.clientSubspaces();
     171    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestReportExtraMemoryCost.get())
     172        return clientSpace;
     173
     174    auto& heapData = clientData.heapData();
     175    Locker locker { heapData.lock() };
     176
     177    auto& spaces = heapData.subspaces();
     178    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     179    if (!space) {
     180        Heap& heap = vm.heap;
     181        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestReportExtraMemoryCost> || !JSTestReportExtraMemoryCost::needsDestruction);
     182        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestReportExtraMemoryCost>)
     183            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestReportExtraMemoryCost);
     184        else
     185            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestReportExtraMemoryCost);
     186        spaces.m_subspaceForTestReportExtraMemoryCost = std::unique_ptr<IsoSubspace>(space);
    178187IGNORE_WARNINGS_BEGIN("unreachable-code")
    179188IGNORE_WARNINGS_BEGIN("tautological-compare")
    180     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestReportExtraMemoryCost::visitOutputConstraints;
    181     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    182     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    183         clientData.outputConstraintSpaces().append(space);
     189        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestReportExtraMemoryCost::visitOutputConstraints;
     190        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     191        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     192            heapData.outputConstraintSpaces().append(space);
    184193IGNORE_WARNINGS_END
    185194IGNORE_WARNINGS_END
    186     return space;
     195    }
     196
     197    clientSpaces.m_clientSubspaceForTestReportExtraMemoryCost = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     198    return clientSpaces.m_clientSubspaceForTestReportExtraMemoryCost.get();
    187199}
    188200
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReportExtraMemoryCost.h

    r285730 r290129  
    5151
    5252    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    DECLARE_VISIT_CHILDREN;
    6161
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp

    r288118 r290129  
    2626
    2727#include "ActiveDOMObject.h"
     28#include "DOMClientIsoSubspaces.h"
    2829#include "DOMIsoSubspaces.h"
    2930#include "IDLTypes.h"
     
    8788    DECLARE_INFO;
    8889    template<typename CellType, JSC::SubspaceAccess>
    89     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     90    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9091    {
    9192        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestSerializedScriptValueInterfacePrototype, Base);
     
    342343}
    343344
    344 JSC::IsoSubspace* JSTestSerializedScriptValueInterface::subspaceForImpl(JSC::VM& vm)
     345JSC::GCClient::IsoSubspace* JSTestSerializedScriptValueInterface::subspaceForImpl(JSC::VM& vm)
    345346{
    346347    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    347     auto& spaces = clientData.subspaces();
    348     if (auto* space = spaces.m_subspaceForTestSerializedScriptValueInterface.get())
    349         return space;
    350     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestSerializedScriptValueInterface> || !JSTestSerializedScriptValueInterface::needsDestruction);
    351     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestSerializedScriptValueInterface>)
    352         spaces.m_subspaceForTestSerializedScriptValueInterface = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestSerializedScriptValueInterface);
    353     else
    354         spaces.m_subspaceForTestSerializedScriptValueInterface = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestSerializedScriptValueInterface);
    355     auto* space = spaces.m_subspaceForTestSerializedScriptValueInterface.get();
     348    auto& clientSpaces = clientData.clientSubspaces();
     349    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestSerializedScriptValueInterface.get())
     350        return clientSpace;
     351
     352    auto& heapData = clientData.heapData();
     353    Locker locker { heapData.lock() };
     354
     355    auto& spaces = heapData.subspaces();
     356    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     357    if (!space) {
     358        Heap& heap = vm.heap;
     359        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestSerializedScriptValueInterface> || !JSTestSerializedScriptValueInterface::needsDestruction);
     360        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestSerializedScriptValueInterface>)
     361            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestSerializedScriptValueInterface);
     362        else
     363            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestSerializedScriptValueInterface);
     364        spaces.m_subspaceForTestSerializedScriptValueInterface = std::unique_ptr<IsoSubspace>(space);
    356365IGNORE_WARNINGS_BEGIN("unreachable-code")
    357366IGNORE_WARNINGS_BEGIN("tautological-compare")
    358     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestSerializedScriptValueInterface::visitOutputConstraints;
    359     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    360     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    361         clientData.outputConstraintSpaces().append(space);
     367        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestSerializedScriptValueInterface::visitOutputConstraints;
     368        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     369        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     370            heapData.outputConstraintSpaces().append(space);
    362371IGNORE_WARNINGS_END
    363372IGNORE_WARNINGS_END
    364     return space;
     373    }
     374
     375    clientSpaces.m_clientSubspaceForTestSerializedScriptValueInterface = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     376    return clientSpaces.m_clientSubspaceForTestSerializedScriptValueInterface.get();
    365377}
    366378
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h

    r285730 r290129  
    5454    mutable JSC::WriteBarrier<JSC::Unknown> m_cachedValue;
    5555    mutable JSC::WriteBarrier<JSC::Unknown> m_cachedReadonlyValue;
    56     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     56    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5757    {
    5858        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    6060        return subspaceForImpl(vm);
    6161    }
    62     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     62    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6363    DECLARE_VISIT_CHILDREN;
    6464
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLike.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    7980    DECLARE_INFO;
    8081    template<typename CellType, JSC::SubspaceAccess>
    81     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     82    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8283    {
    8384        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestSetLikePrototype, Base);
     
    335336}
    336337
    337 JSC::IsoSubspace* JSTestSetLike::subspaceForImpl(JSC::VM& vm)
     338JSC::GCClient::IsoSubspace* JSTestSetLike::subspaceForImpl(JSC::VM& vm)
    338339{
    339340    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    340     auto& spaces = clientData.subspaces();
    341     if (auto* space = spaces.m_subspaceForTestSetLike.get())
    342         return space;
    343     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLike> || !JSTestSetLike::needsDestruction);
    344     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLike>)
    345         spaces.m_subspaceForTestSetLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestSetLike);
    346     else
    347         spaces.m_subspaceForTestSetLike = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestSetLike);
    348     auto* space = spaces.m_subspaceForTestSetLike.get();
     341    auto& clientSpaces = clientData.clientSubspaces();
     342    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestSetLike.get())
     343        return clientSpace;
     344
     345    auto& heapData = clientData.heapData();
     346    Locker locker { heapData.lock() };
     347
     348    auto& spaces = heapData.subspaces();
     349    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     350    if (!space) {
     351        Heap& heap = vm.heap;
     352        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLike> || !JSTestSetLike::needsDestruction);
     353        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLike>)
     354            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestSetLike);
     355        else
     356            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestSetLike);
     357        spaces.m_subspaceForTestSetLike = std::unique_ptr<IsoSubspace>(space);
    349358IGNORE_WARNINGS_BEGIN("unreachable-code")
    350359IGNORE_WARNINGS_BEGIN("tautological-compare")
    351     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestSetLike::visitOutputConstraints;
    352     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    353     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    354         clientData.outputConstraintSpaces().append(space);
     360        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestSetLike::visitOutputConstraints;
     361        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     362        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     363            heapData.outputConstraintSpaces().append(space);
    355364IGNORE_WARNINGS_END
    356365IGNORE_WARNINGS_END
    357     return space;
     366    }
     367
     368    clientSpaces.m_clientSubspaceForTestSetLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     369    return clientSpaces.m_clientSubspaceForTestSetLike.get();
    358370}
    359371
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLike.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    8384    DECLARE_INFO;
    8485    template<typename CellType, JSC::SubspaceAccess>
    85     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     86    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8687    {
    8788        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestSetLikeWithOverriddenOperationsPrototype, Base);
     
    347348}
    348349
    349 JSC::IsoSubspace* JSTestSetLikeWithOverriddenOperations::subspaceForImpl(JSC::VM& vm)
     350JSC::GCClient::IsoSubspace* JSTestSetLikeWithOverriddenOperations::subspaceForImpl(JSC::VM& vm)
    350351{
    351352    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    352     auto& spaces = clientData.subspaces();
    353     if (auto* space = spaces.m_subspaceForTestSetLikeWithOverriddenOperations.get())
    354         return space;
    355     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLikeWithOverriddenOperations> || !JSTestSetLikeWithOverriddenOperations::needsDestruction);
    356     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLikeWithOverriddenOperations>)
    357         spaces.m_subspaceForTestSetLikeWithOverriddenOperations = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestSetLikeWithOverriddenOperations);
    358     else
    359         spaces.m_subspaceForTestSetLikeWithOverriddenOperations = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestSetLikeWithOverriddenOperations);
    360     auto* space = spaces.m_subspaceForTestSetLikeWithOverriddenOperations.get();
     353    auto& clientSpaces = clientData.clientSubspaces();
     354    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestSetLikeWithOverriddenOperations.get())
     355        return clientSpace;
     356
     357    auto& heapData = clientData.heapData();
     358    Locker locker { heapData.lock() };
     359
     360    auto& spaces = heapData.subspaces();
     361    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     362    if (!space) {
     363        Heap& heap = vm.heap;
     364        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLikeWithOverriddenOperations> || !JSTestSetLikeWithOverriddenOperations::needsDestruction);
     365        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestSetLikeWithOverriddenOperations>)
     366            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestSetLikeWithOverriddenOperations);
     367        else
     368            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestSetLikeWithOverriddenOperations);
     369        spaces.m_subspaceForTestSetLikeWithOverriddenOperations = std::unique_ptr<IsoSubspace>(space);
    361370IGNORE_WARNINGS_BEGIN("unreachable-code")
    362371IGNORE_WARNINGS_BEGIN("tautological-compare")
    363     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestSetLikeWithOverriddenOperations::visitOutputConstraints;
    364     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    365     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    366         clientData.outputConstraintSpaces().append(space);
     372        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestSetLikeWithOverriddenOperations::visitOutputConstraints;
     373        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     374        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     375            heapData.outputConstraintSpaces().append(space);
    367376IGNORE_WARNINGS_END
    368377IGNORE_WARNINGS_END
    369     return space;
     378    }
     379
     380    clientSpaces.m_clientSubspaceForTestSetLikeWithOverriddenOperations = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     381    return clientSpaces.m_clientSubspaceForTestSetLikeWithOverriddenOperations.get();
    370382}
    371383
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6768    DECLARE_INFO;
    6869    template<typename CellType, JSC::SubspaceAccess>
    69     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     70    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7071    {
    7172        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestStringifierPrototype, Base);
     
    185186}
    186187
    187 JSC::IsoSubspace* JSTestStringifier::subspaceForImpl(JSC::VM& vm)
     188JSC::GCClient::IsoSubspace* JSTestStringifier::subspaceForImpl(JSC::VM& vm)
    188189{
    189190    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    190     auto& spaces = clientData.subspaces();
    191     if (auto* space = spaces.m_subspaceForTestStringifier.get())
    192         return space;
    193     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifier> || !JSTestStringifier::needsDestruction);
    194     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifier>)
    195         spaces.m_subspaceForTestStringifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestStringifier);
    196     else
    197         spaces.m_subspaceForTestStringifier = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestStringifier);
    198     auto* space = spaces.m_subspaceForTestStringifier.get();
     191    auto& clientSpaces = clientData.clientSubspaces();
     192    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestStringifier.get())
     193        return clientSpace;
     194
     195    auto& heapData = clientData.heapData();
     196    Locker locker { heapData.lock() };
     197
     198    auto& spaces = heapData.subspaces();
     199    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     200    if (!space) {
     201        Heap& heap = vm.heap;
     202        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifier> || !JSTestStringifier::needsDestruction);
     203        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifier>)
     204            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestStringifier);
     205        else
     206            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestStringifier);
     207        spaces.m_subspaceForTestStringifier = std::unique_ptr<IsoSubspace>(space);
    199208IGNORE_WARNINGS_BEGIN("unreachable-code")
    200209IGNORE_WARNINGS_BEGIN("tautological-compare")
    201     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifier::visitOutputConstraints;
    202     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    203     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    204         clientData.outputConstraintSpaces().append(space);
     210        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifier::visitOutputConstraints;
     211        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     212        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     213            heapData.outputConstraintSpaces().append(space);
    205214IGNORE_WARNINGS_END
    206215IGNORE_WARNINGS_END
    207     return space;
     216    }
     217
     218    clientSpaces.m_clientSubspaceForTestStringifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     219    return clientSpaces.m_clientSubspaceForTestStringifier.get();
    208220}
    209221
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6768    DECLARE_INFO;
    6869    template<typename CellType, JSC::SubspaceAccess>
    69     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     70    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7071    {
    7172        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestStringifierAnonymousOperationPrototype, Base);
     
    185186}
    186187
    187 JSC::IsoSubspace* JSTestStringifierAnonymousOperation::subspaceForImpl(JSC::VM& vm)
     188JSC::GCClient::IsoSubspace* JSTestStringifierAnonymousOperation::subspaceForImpl(JSC::VM& vm)
    188189{
    189190    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    190     auto& spaces = clientData.subspaces();
    191     if (auto* space = spaces.m_subspaceForTestStringifierAnonymousOperation.get())
    192         return space;
    193     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierAnonymousOperation> || !JSTestStringifierAnonymousOperation::needsDestruction);
    194     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierAnonymousOperation>)
    195         spaces.m_subspaceForTestStringifierAnonymousOperation = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestStringifierAnonymousOperation);
    196     else
    197         spaces.m_subspaceForTestStringifierAnonymousOperation = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestStringifierAnonymousOperation);
    198     auto* space = spaces.m_subspaceForTestStringifierAnonymousOperation.get();
     191    auto& clientSpaces = clientData.clientSubspaces();
     192    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestStringifierAnonymousOperation.get())
     193        return clientSpace;
     194
     195    auto& heapData = clientData.heapData();
     196    Locker locker { heapData.lock() };
     197
     198    auto& spaces = heapData.subspaces();
     199    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     200    if (!space) {
     201        Heap& heap = vm.heap;
     202        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierAnonymousOperation> || !JSTestStringifierAnonymousOperation::needsDestruction);
     203        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierAnonymousOperation>)
     204            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestStringifierAnonymousOperation);
     205        else
     206            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestStringifierAnonymousOperation);
     207        spaces.m_subspaceForTestStringifierAnonymousOperation = std::unique_ptr<IsoSubspace>(space);
    199208IGNORE_WARNINGS_BEGIN("unreachable-code")
    200209IGNORE_WARNINGS_BEGIN("tautological-compare")
    201     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierAnonymousOperation::visitOutputConstraints;
    202     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    203     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    204         clientData.outputConstraintSpaces().append(space);
     210        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierAnonymousOperation::visitOutputConstraints;
     211        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     212        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     213            heapData.outputConstraintSpaces().append(space);
    205214IGNORE_WARNINGS_END
    206215IGNORE_WARNINGS_END
    207     return space;
     216    }
     217
     218    clientSpaces.m_clientSubspaceForTestStringifierAnonymousOperation = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     219    return clientSpaces.m_clientSubspaceForTestStringifierAnonymousOperation.get();
    208220}
    209221
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6869    DECLARE_INFO;
    6970    template<typename CellType, JSC::SubspaceAccess>
    70     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     71    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7172    {
    7273        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestStringifierNamedOperationPrototype, Base);
     
    202203}
    203204
    204 JSC::IsoSubspace* JSTestStringifierNamedOperation::subspaceForImpl(JSC::VM& vm)
     205JSC::GCClient::IsoSubspace* JSTestStringifierNamedOperation::subspaceForImpl(JSC::VM& vm)
    205206{
    206207    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    207     auto& spaces = clientData.subspaces();
    208     if (auto* space = spaces.m_subspaceForTestStringifierNamedOperation.get())
    209         return space;
    210     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierNamedOperation> || !JSTestStringifierNamedOperation::needsDestruction);
    211     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierNamedOperation>)
    212         spaces.m_subspaceForTestStringifierNamedOperation = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestStringifierNamedOperation);
    213     else
    214         spaces.m_subspaceForTestStringifierNamedOperation = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestStringifierNamedOperation);
    215     auto* space = spaces.m_subspaceForTestStringifierNamedOperation.get();
     208    auto& clientSpaces = clientData.clientSubspaces();
     209    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestStringifierNamedOperation.get())
     210        return clientSpace;
     211
     212    auto& heapData = clientData.heapData();
     213    Locker locker { heapData.lock() };
     214
     215    auto& spaces = heapData.subspaces();
     216    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     217    if (!space) {
     218        Heap& heap = vm.heap;
     219        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierNamedOperation> || !JSTestStringifierNamedOperation::needsDestruction);
     220        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierNamedOperation>)
     221            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestStringifierNamedOperation);
     222        else
     223            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestStringifierNamedOperation);
     224        spaces.m_subspaceForTestStringifierNamedOperation = std::unique_ptr<IsoSubspace>(space);
    216225IGNORE_WARNINGS_BEGIN("unreachable-code")
    217226IGNORE_WARNINGS_BEGIN("tautological-compare")
    218     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierNamedOperation::visitOutputConstraints;
    219     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    220     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    221         clientData.outputConstraintSpaces().append(space);
     227        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierNamedOperation::visitOutputConstraints;
     228        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     229        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     230            heapData.outputConstraintSpaces().append(space);
    222231IGNORE_WARNINGS_END
    223232IGNORE_WARNINGS_END
    224     return space;
     233    }
     234
     235    clientSpaces.m_clientSubspaceForTestStringifierNamedOperation = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     236    return clientSpaces.m_clientSubspaceForTestStringifierNamedOperation.get();
    225237}
    226238
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6869    DECLARE_INFO;
    6970    template<typename CellType, JSC::SubspaceAccess>
    70     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     71    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7172    {
    7273        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestStringifierOperationImplementedAsPrototype, Base);
     
    202203}
    203204
    204 JSC::IsoSubspace* JSTestStringifierOperationImplementedAs::subspaceForImpl(JSC::VM& vm)
     205JSC::GCClient::IsoSubspace* JSTestStringifierOperationImplementedAs::subspaceForImpl(JSC::VM& vm)
    205206{
    206207    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    207     auto& spaces = clientData.subspaces();
    208     if (auto* space = spaces.m_subspaceForTestStringifierOperationImplementedAs.get())
    209         return space;
    210     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationImplementedAs> || !JSTestStringifierOperationImplementedAs::needsDestruction);
    211     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationImplementedAs>)
    212         spaces.m_subspaceForTestStringifierOperationImplementedAs = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestStringifierOperationImplementedAs);
    213     else
    214         spaces.m_subspaceForTestStringifierOperationImplementedAs = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestStringifierOperationImplementedAs);
    215     auto* space = spaces.m_subspaceForTestStringifierOperationImplementedAs.get();
     208    auto& clientSpaces = clientData.clientSubspaces();
     209    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestStringifierOperationImplementedAs.get())
     210        return clientSpace;
     211
     212    auto& heapData = clientData.heapData();
     213    Locker locker { heapData.lock() };
     214
     215    auto& spaces = heapData.subspaces();
     216    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     217    if (!space) {
     218        Heap& heap = vm.heap;
     219        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationImplementedAs> || !JSTestStringifierOperationImplementedAs::needsDestruction);
     220        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationImplementedAs>)
     221            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestStringifierOperationImplementedAs);
     222        else
     223            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestStringifierOperationImplementedAs);
     224        spaces.m_subspaceForTestStringifierOperationImplementedAs = std::unique_ptr<IsoSubspace>(space);
    216225IGNORE_WARNINGS_BEGIN("unreachable-code")
    217226IGNORE_WARNINGS_BEGIN("tautological-compare")
    218     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierOperationImplementedAs::visitOutputConstraints;
    219     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    220     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    221         clientData.outputConstraintSpaces().append(space);
     227        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierOperationImplementedAs::visitOutputConstraints;
     228        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     229        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     230            heapData.outputConstraintSpaces().append(space);
    222231IGNORE_WARNINGS_END
    223232IGNORE_WARNINGS_END
    224     return space;
     233    }
     234
     235    clientSpaces.m_clientSubspaceForTestStringifierOperationImplementedAs = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     236    return clientSpaces.m_clientSubspaceForTestStringifierOperationImplementedAs.get();
    225237}
    226238
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6768    DECLARE_INFO;
    6869    template<typename CellType, JSC::SubspaceAccess>
    69     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     70    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7071    {
    7172        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestStringifierOperationNamedToStringPrototype, Base);
     
    185186}
    186187
    187 JSC::IsoSubspace* JSTestStringifierOperationNamedToString::subspaceForImpl(JSC::VM& vm)
     188JSC::GCClient::IsoSubspace* JSTestStringifierOperationNamedToString::subspaceForImpl(JSC::VM& vm)
    188189{
    189190    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    190     auto& spaces = clientData.subspaces();
    191     if (auto* space = spaces.m_subspaceForTestStringifierOperationNamedToString.get())
    192         return space;
    193     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationNamedToString> || !JSTestStringifierOperationNamedToString::needsDestruction);
    194     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationNamedToString>)
    195         spaces.m_subspaceForTestStringifierOperationNamedToString = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestStringifierOperationNamedToString);
    196     else
    197         spaces.m_subspaceForTestStringifierOperationNamedToString = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestStringifierOperationNamedToString);
    198     auto* space = spaces.m_subspaceForTestStringifierOperationNamedToString.get();
     191    auto& clientSpaces = clientData.clientSubspaces();
     192    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestStringifierOperationNamedToString.get())
     193        return clientSpace;
     194
     195    auto& heapData = clientData.heapData();
     196    Locker locker { heapData.lock() };
     197
     198    auto& spaces = heapData.subspaces();
     199    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     200    if (!space) {
     201        Heap& heap = vm.heap;
     202        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationNamedToString> || !JSTestStringifierOperationNamedToString::needsDestruction);
     203        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierOperationNamedToString>)
     204            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestStringifierOperationNamedToString);
     205        else
     206            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestStringifierOperationNamedToString);
     207        spaces.m_subspaceForTestStringifierOperationNamedToString = std::unique_ptr<IsoSubspace>(space);
    199208IGNORE_WARNINGS_BEGIN("unreachable-code")
    200209IGNORE_WARNINGS_BEGIN("tautological-compare")
    201     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierOperationNamedToString::visitOutputConstraints;
    202     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    203     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    204         clientData.outputConstraintSpaces().append(space);
     210        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierOperationNamedToString::visitOutputConstraints;
     211        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     212        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     213            heapData.outputConstraintSpaces().append(space);
    205214IGNORE_WARNINGS_END
    206215IGNORE_WARNINGS_END
    207     return space;
     216    }
     217
     218    clientSpaces.m_clientSubspaceForTestStringifierOperationNamedToString = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     219    return clientSpaces.m_clientSubspaceForTestStringifierOperationNamedToString.get();
    208220}
    209221
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    6970    DECLARE_INFO;
    7071    template<typename CellType, JSC::SubspaceAccess>
    71     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     72    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7273    {
    7374        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestStringifierReadOnlyAttributePrototype, Base);
     
    201202}
    202203
    203 JSC::IsoSubspace* JSTestStringifierReadOnlyAttribute::subspaceForImpl(JSC::VM& vm)
     204JSC::GCClient::IsoSubspace* JSTestStringifierReadOnlyAttribute::subspaceForImpl(JSC::VM& vm)
    204205{
    205206    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    206     auto& spaces = clientData.subspaces();
    207     if (auto* space = spaces.m_subspaceForTestStringifierReadOnlyAttribute.get())
    208         return space;
    209     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadOnlyAttribute> || !JSTestStringifierReadOnlyAttribute::needsDestruction);
    210     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadOnlyAttribute>)
    211         spaces.m_subspaceForTestStringifierReadOnlyAttribute = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestStringifierReadOnlyAttribute);
    212     else
    213         spaces.m_subspaceForTestStringifierReadOnlyAttribute = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestStringifierReadOnlyAttribute);
    214     auto* space = spaces.m_subspaceForTestStringifierReadOnlyAttribute.get();
     207    auto& clientSpaces = clientData.clientSubspaces();
     208    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestStringifierReadOnlyAttribute.get())
     209        return clientSpace;
     210
     211    auto& heapData = clientData.heapData();
     212    Locker locker { heapData.lock() };
     213
     214    auto& spaces = heapData.subspaces();
     215    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     216    if (!space) {
     217        Heap& heap = vm.heap;
     218        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadOnlyAttribute> || !JSTestStringifierReadOnlyAttribute::needsDestruction);
     219        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadOnlyAttribute>)
     220            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestStringifierReadOnlyAttribute);
     221        else
     222            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestStringifierReadOnlyAttribute);
     223        spaces.m_subspaceForTestStringifierReadOnlyAttribute = std::unique_ptr<IsoSubspace>(space);
    215224IGNORE_WARNINGS_BEGIN("unreachable-code")
    216225IGNORE_WARNINGS_BEGIN("tautological-compare")
    217     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierReadOnlyAttribute::visitOutputConstraints;
    218     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    219     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    220         clientData.outputConstraintSpaces().append(space);
     226        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierReadOnlyAttribute::visitOutputConstraints;
     227        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     228        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     229            heapData.outputConstraintSpaces().append(space);
    221230IGNORE_WARNINGS_END
    222231IGNORE_WARNINGS_END
    223     return space;
     232    }
     233
     234    clientSpaces.m_clientSubspaceForTestStringifierReadOnlyAttribute = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     235    return clientSpaces.m_clientSubspaceForTestStringifierReadOnlyAttribute.get();
    224236}
    225237
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp

    r288118 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    7071    DECLARE_INFO;
    7172    template<typename CellType, JSC::SubspaceAccess>
    72     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     73    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    7374    {
    7475        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestStringifierReadWriteAttributePrototype, Base);
     
    220221}
    221222
    222 JSC::IsoSubspace* JSTestStringifierReadWriteAttribute::subspaceForImpl(JSC::VM& vm)
     223JSC::GCClient::IsoSubspace* JSTestStringifierReadWriteAttribute::subspaceForImpl(JSC::VM& vm)
    223224{
    224225    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    225     auto& spaces = clientData.subspaces();
    226     if (auto* space = spaces.m_subspaceForTestStringifierReadWriteAttribute.get())
    227         return space;
    228     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadWriteAttribute> || !JSTestStringifierReadWriteAttribute::needsDestruction);
    229     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadWriteAttribute>)
    230         spaces.m_subspaceForTestStringifierReadWriteAttribute = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestStringifierReadWriteAttribute);
    231     else
    232         spaces.m_subspaceForTestStringifierReadWriteAttribute = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestStringifierReadWriteAttribute);
    233     auto* space = spaces.m_subspaceForTestStringifierReadWriteAttribute.get();
     226    auto& clientSpaces = clientData.clientSubspaces();
     227    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestStringifierReadWriteAttribute.get())
     228        return clientSpace;
     229
     230    auto& heapData = clientData.heapData();
     231    Locker locker { heapData.lock() };
     232
     233    auto& spaces = heapData.subspaces();
     234    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     235    if (!space) {
     236        Heap& heap = vm.heap;
     237        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadWriteAttribute> || !JSTestStringifierReadWriteAttribute::needsDestruction);
     238        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestStringifierReadWriteAttribute>)
     239            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestStringifierReadWriteAttribute);
     240        else
     241            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestStringifierReadWriteAttribute);
     242        spaces.m_subspaceForTestStringifierReadWriteAttribute = std::unique_ptr<IsoSubspace>(space);
    234243IGNORE_WARNINGS_BEGIN("unreachable-code")
    235244IGNORE_WARNINGS_BEGIN("tautological-compare")
    236     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierReadWriteAttribute::visitOutputConstraints;
    237     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    238     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    239         clientData.outputConstraintSpaces().append(space);
     245        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestStringifierReadWriteAttribute::visitOutputConstraints;
     246        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     247        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     248            heapData.outputConstraintSpaces().append(space);
    240249IGNORE_WARNINGS_END
    241250IGNORE_WARNINGS_END
    242     return space;
     251    }
     252
     253    clientSpaces.m_clientSubspaceForTestStringifierReadWriteAttribute = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     254    return clientSpaces.m_clientSubspaceForTestStringifierReadWriteAttribute.get();
    243255}
    244256
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTaggedWrapper.cpp

    r289531 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMBinding.h"
     
    6162    DECLARE_INFO;
    6263    template<typename CellType, JSC::SubspaceAccess>
    63     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     64    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    6465    {
    6566        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestTaggedWrapperPrototype, Base);
     
    163164}
    164165
    165 JSC::IsoSubspace* JSTestTaggedWrapper::subspaceForImpl(JSC::VM& vm)
     166JSC::GCClient::IsoSubspace* JSTestTaggedWrapper::subspaceForImpl(JSC::VM& vm)
    166167{
    167168    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    168     auto& spaces = clientData.subspaces();
    169     if (auto* space = spaces.m_subspaceForTestTaggedWrapper.get())
    170         return space;
    171     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestTaggedWrapper> || !JSTestTaggedWrapper::needsDestruction);
    172     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestTaggedWrapper>)
    173         spaces.m_subspaceForTestTaggedWrapper = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestTaggedWrapper);
    174     else
    175         spaces.m_subspaceForTestTaggedWrapper = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestTaggedWrapper);
    176     auto* space = spaces.m_subspaceForTestTaggedWrapper.get();
     169    auto& clientSpaces = clientData.clientSubspaces();
     170    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestTaggedWrapper.get())
     171        return clientSpace;
     172
     173    auto& heapData = clientData.heapData();
     174    Locker locker { heapData.lock() };
     175
     176    auto& spaces = heapData.subspaces();
     177    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     178    if (!space) {
     179        Heap& heap = vm.heap;
     180        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestTaggedWrapper> || !JSTestTaggedWrapper::needsDestruction);
     181        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestTaggedWrapper>)
     182            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestTaggedWrapper);
     183        else
     184            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestTaggedWrapper);
     185        spaces.m_subspaceForTestTaggedWrapper = std::unique_ptr<IsoSubspace>(space);
    177186IGNORE_WARNINGS_BEGIN("unreachable-code")
    178187IGNORE_WARNINGS_BEGIN("tautological-compare")
    179     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestTaggedWrapper::visitOutputConstraints;
    180     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    181     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    182         clientData.outputConstraintSpaces().append(space);
     188        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestTaggedWrapper::visitOutputConstraints;
     189        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     190        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     191            heapData.outputConstraintSpaces().append(space);
    183192IGNORE_WARNINGS_END
    184193IGNORE_WARNINGS_END
    185     return space;
     194    }
     195
     196    clientSpaces.m_clientSubspaceForTestTaggedWrapper = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     197    return clientSpaces.m_clientSubspaceForTestTaggedWrapper.get();
    186198}
    187199
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTaggedWrapper.h

    r289531 r290129  
    5151
    5252    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161protected:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp

    r288307 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "IDLTypes.h"
     
    114115    DECLARE_INFO;
    115116    template<typename CellType, JSC::SubspaceAccess>
    116     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     117    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    117118    {
    118119        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSTestTypedefsPrototype, Base);
     
    773774}
    774775
    775 JSC::IsoSubspace* JSTestTypedefs::subspaceForImpl(JSC::VM& vm)
     776JSC::GCClient::IsoSubspace* JSTestTypedefs::subspaceForImpl(JSC::VM& vm)
    776777{
    777778    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    778     auto& spaces = clientData.subspaces();
    779     if (auto* space = spaces.m_subspaceForTestTypedefs.get())
    780         return space;
    781     static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestTypedefs> || !JSTestTypedefs::needsDestruction);
    782     if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestTypedefs>)
    783         spaces.m_subspaceForTestTypedefs = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.destructibleObjectHeapCellType(), JSTestTypedefs);
    784     else
    785         spaces.m_subspaceForTestTypedefs = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, vm.cellHeapCellType(), JSTestTypedefs);
    786     auto* space = spaces.m_subspaceForTestTypedefs.get();
     779    auto& clientSpaces = clientData.clientSubspaces();
     780    if (auto* clientSpace = clientSpaces.m_clientSubspaceForTestTypedefs.get())
     781        return clientSpace;
     782
     783    auto& heapData = clientData.heapData();
     784    Locker locker { heapData.lock() };
     785
     786    auto& spaces = heapData.subspaces();
     787    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     788    if (!space) {
     789        Heap& heap = vm.heap;
     790        static_assert(std::is_base_of_v<JSC::JSDestructibleObject, JSTestTypedefs> || !JSTestTypedefs::needsDestruction);
     791        if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, JSTestTypedefs>)
     792            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, JSTestTypedefs);
     793        else
     794            space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSTestTypedefs);
     795        spaces.m_subspaceForTestTypedefs = std::unique_ptr<IsoSubspace>(space);
    787796IGNORE_WARNINGS_BEGIN("unreachable-code")
    788797IGNORE_WARNINGS_BEGIN("tautological-compare")
    789     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestTypedefs::visitOutputConstraints;
    790     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    791     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    792         clientData.outputConstraintSpaces().append(space);
     798        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSTestTypedefs::visitOutputConstraints;
     799        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     800        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     801            heapData.outputConstraintSpaces().append(space);
    793802IGNORE_WARNINGS_END
    794803IGNORE_WARNINGS_END
    795     return space;
     804    }
     805
     806    clientSpaces.m_clientSubspaceForTestTypedefs = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     807    return clientSpaces.m_clientSubspaceForTestTypedefs.get();
    796808}
    797809
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h

    r285730 r290129  
    5050
    5151    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    52     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     52    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5353    {
    5454        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5656        return subspaceForImpl(vm);
    5757    }
    58     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     58    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    5959    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6060public:
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    244245}
    245246
    246 JSC::IsoSubspace* JSWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
     247JSC::GCClient::IsoSubspace* JSWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    247248{
    248249    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    249     auto& spaces = clientData.subspaces();
    250     if (auto* space = spaces.m_subspaceForWorkerGlobalScope.get())
    251         return space;
    252     spaces.m_subspaceForWorkerGlobalScope = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSWorkerGlobalScope, JSWorkerGlobalScope);
    253     auto* space = spaces.m_subspaceForWorkerGlobalScope.get();
     250    auto& clientSpaces = clientData.clientSubspaces();
     251    if (auto* clientSpace = clientSpaces.m_clientSubspaceForWorkerGlobalScope.get())
     252        return clientSpace;
     253
     254    auto& heapData = clientData.heapData();
     255    Locker locker { heapData.lock() };
     256
     257    auto& spaces = heapData.subspaces();
     258    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     259    if (!space) {
     260        Heap& heap = vm.heap;
     261        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSWorkerGlobalScope, JSWorkerGlobalScope);
     262        spaces.m_subspaceForWorkerGlobalScope = std::unique_ptr<IsoSubspace>(space);
    254263IGNORE_WARNINGS_BEGIN("unreachable-code")
    255264IGNORE_WARNINGS_BEGIN("tautological-compare")
    256     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSWorkerGlobalScope::visitOutputConstraints;
    257     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    258     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    259         clientData.outputConstraintSpaces().append(space);
     265        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSWorkerGlobalScope::visitOutputConstraints;
     266        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     267        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     268            heapData.outputConstraintSpaces().append(space);
    260269IGNORE_WARNINGS_END
    261270IGNORE_WARNINGS_END
    262     return space;
     271    }
     272
     273    clientSpaces.m_clientSubspaceForWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     274    return clientSpaces.m_clientSubspaceForWorkerGlobalScope.get();
    263275}
    264276
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.h

    r286347 r290129  
    5151
    5252    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161    WorkerGlobalScope& wrapped() const
     
    8383    DECLARE_INFO;
    8484    template<typename CellType, JSC::SubspaceAccess>
    85     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     85    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8686    {
    8787        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSWorkerGlobalScopePrototype, Base);
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.cpp

    r286347 r290129  
    2323
    2424#include "ActiveDOMObject.h"
     25#include "DOMClientIsoSubspaces.h"
    2526#include "DOMIsoSubspaces.h"
    2627#include "JSDOMAttribute.h"
     
    158159}
    159160
    160 JSC::IsoSubspace* JSWorkletGlobalScope::subspaceForImpl(JSC::VM& vm)
     161JSC::GCClient::IsoSubspace* JSWorkletGlobalScope::subspaceForImpl(JSC::VM& vm)
    161162{
    162163    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    163     auto& spaces = clientData.subspaces();
    164     if (auto* space = spaces.m_subspaceForWorkletGlobalScope.get())
    165         return space;
    166     spaces.m_subspaceForWorkletGlobalScope = makeUnique<IsoSubspace> ISO_SUBSPACE_INIT(vm.heap, clientData.m_heapCellTypeForJSWorkletGlobalScope, JSWorkletGlobalScope);
    167     auto* space = spaces.m_subspaceForWorkletGlobalScope.get();
     164    auto& clientSpaces = clientData.clientSubspaces();
     165    if (auto* clientSpace = clientSpaces.m_clientSubspaceForWorkletGlobalScope.get())
     166        return clientSpace;
     167
     168    auto& heapData = clientData.heapData();
     169    Locker locker { heapData.lock() };
     170
     171    auto& spaces = heapData.subspaces();
     172    IsoSubspace* space = spaces.m_subspaceForGPUMapMode.get();
     173    if (!space) {
     174        Heap& heap = vm.heap;
     175        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeForJSWorkletGlobalScope, JSWorkletGlobalScope);
     176        spaces.m_subspaceForWorkletGlobalScope = std::unique_ptr<IsoSubspace>(space);
    168177IGNORE_WARNINGS_BEGIN("unreachable-code")
    169178IGNORE_WARNINGS_BEGIN("tautological-compare")
    170     void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSWorkletGlobalScope::visitOutputConstraints;
    171     void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
    172     if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
    173         clientData.outputConstraintSpaces().append(space);
     179        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSWorkletGlobalScope::visitOutputConstraints;
     180        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     181        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     182            heapData.outputConstraintSpaces().append(space);
    174183IGNORE_WARNINGS_END
    175184IGNORE_WARNINGS_END
    176     return space;
     185    }
     186
     187    clientSpaces.m_clientSubspaceForWorkletGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     188    return clientSpaces.m_clientSubspaceForWorkletGlobalScope.get();
    177189}
    178190
  • TabularUnified trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.h

    r286347 r290129  
    5151
    5252    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
    53     template<typename, JSC::SubspaceAccess mode> static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     53    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    5454    {
    5555        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
     
    5757        return subspaceForImpl(vm);
    5858    }
    59     static JSC::IsoSubspace* subspaceForImpl(JSC::VM& vm);
     59    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm);
    6060    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);
    6161    WorkletGlobalScope& wrapped() const
     
    8383    DECLARE_INFO;
    8484    template<typename CellType, JSC::SubspaceAccess>
    85     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     85    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    8686    {
    8787        STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSWorkletGlobalScopePrototype, Base);
  • TabularUnified trunk/Source/WebCore/bridge/objc/objc_runtime.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2004-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2004-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    9696
    9797    template<typename CellType, JSC::SubspaceAccess>
    98     static IsoSubspace* subspaceFor(JSC::VM& vm)
     98    static GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    9999    {
    100100        return subspaceForImpl(vm);
     
    139139    bool toBoolean(JSGlobalObject*) const; // FIXME: Currently this is broken because none of the superclasses are marked virtual. We need to solve this in the longer term.
    140140
    141     static IsoSubspace* subspaceForImpl(VM&);
     141    static GCClient::IsoSubspace* subspaceForImpl(VM&);
    142142
    143143    RefPtr<ObjcInstance> _instance;
  • TabularUnified trunk/Source/WebCore/bridge/objc/objc_runtime.mm

    r286347 r290129  
    11/*
    2  * Copyright (C) 2004-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2004-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    333333}
    334334
    335 JSC::IsoSubspace* ObjcFallbackObjectImp::subspaceForImpl(JSC::VM& vm)
    336 {
    337     static NeverDestroyed<JSC::IsoSubspacePerVM> perVM([] (JSC::VM& vm) {
    338         return ISO_SUBSPACE_PARAMETERS(vm.destructibleObjectHeapCellType(), ObjcFallbackObjectImp);
     335JSC::GCClient::IsoSubspace* ObjcFallbackObjectImp::subspaceForImpl(JSC::VM& vm)
     336{
     337    static NeverDestroyed<JSC::IsoSubspacePerVM> perVM([] (JSC::Heap& heap) {
     338        return ISO_SUBSPACE_PARAMETERS(heap.destructibleObjectHeapCellType, ObjcFallbackObjectImp);
    339339    });
    340     return &perVM.get().forVM(vm);
    341 }
    342 
    343 }
    344 }
     340    return &perVM.get().clientIsoSubspaceforVM(vm);
     341}
     342
     343} // namespace Bindings
     344} // namespace JSC
  • TabularUnified trunk/Source/WebCore/bridge/runtime_array.cpp

    r278253 r290129  
    11/*
    2  * Copyright (C) 2003-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    162162}
    163163
    164 JSC::IsoSubspace* RuntimeArray::subspaceForImpl(JSC::VM& vm)
     164JSC::GCClient::IsoSubspace* RuntimeArray::subspaceForImpl(JSC::VM& vm)
    165165{
    166166    return &static_cast<JSVMClientData*>(vm.clientData)->runtimeArraySpace();
  • TabularUnified trunk/Source/WebCore/bridge/runtime_array.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2003-2021 Apple Inc.  All rights reserved.
     2 * Copyright (C) 2003-2022 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4040
    4141    template<typename CellType, JSC::SubspaceAccess>
    42     static JSC::IsoSubspace* subspaceFor(JSC::VM& vm)
     42    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4343    {
    4444        return subspaceForImpl(vm);
     
    8989    void finishCreation(VM&, Bindings::Array*);
    9090
    91     static JSC::IsoSubspace* subspaceForImpl(JSC::VM&);
     91    static JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM&);
    9292
    9393    BindingsArray* m_array;
  • TabularUnified trunk/Source/WebCore/bridge/runtime_method.cpp

    r267727 r290129  
    11/*
    2  * Copyright (C) 2003-2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    8383}
    8484
    85 IsoSubspace* RuntimeMethod::subspaceForImpl(VM& vm)
     85GCClient::IsoSubspace* RuntimeMethod::subspaceForImpl(VM& vm)
    8686{
    8787    return &static_cast<JSVMClientData*>(vm.clientData)->runtimeMethodSpace();
  • TabularUnified trunk/Source/WebCore/bridge/runtime_method.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3939
    4040    template<typename CellType, JSC::SubspaceAccess>
    41     static IsoSubspace* subspaceFor(JSC::VM& vm)
     41    static GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4242    {
    4343        static_assert(sizeof(CellType) == sizeof(RuntimeMethod), "RuntimeMethod subclasses that add fields need to override subspaceFor<>()");
     
    7575
    7676private:
    77     static IsoSubspace* subspaceForImpl(VM&);
     77    static GCClient::IsoSubspace* subspaceForImpl(VM&);
    7878
    7979    Bindings::Method* m_method;
  • TabularUnified trunk/Source/WebCore/bridge/runtime_object.cpp

    r282784 r290129  
    11/*
    2  * Copyright (C) 2003, 2008-2009, 2016 Apple Inc. All rights reserved.
     2 * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    314314}
    315315
    316 JSC::IsoSubspace* RuntimeObject::subspaceForImpl(JSC::VM& vm)
     316JSC::GCClient::IsoSubspace* RuntimeObject::subspaceForImpl(JSC::VM& vm)
    317317{
    318318    return &static_cast<JSVMClientData*>(vm.clientData)->runtimeObjectSpace();
  • TabularUnified trunk/Source/WebCore/bridge/runtime_object.h

    r285730 r290129  
    11/*
    2  * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
     2 * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4242
    4343    template<typename CellType, JSC::SubspaceAccess>
    44     static IsoSubspace* subspaceFor(JSC::VM& vm)
     44    static GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)
    4545    {
    4646        static_assert(sizeof(CellType) == sizeof(RuntimeObject), "RuntimeObject subclasses that add fields need to override subspaceFor<>()");
     
    8787
    8888private:
    89     static IsoSubspace* subspaceForImpl(VM&);
     89    static GCClient::IsoSubspace* subspaceForImpl(VM&);
    9090
    9191    RefPtr<Instance> m_instance;
Note: See TracChangeset for help on using the changeset viewer.