Changeset 290188 in webkit


Ignore:
Timestamp:
Feb 18, 2022, 4:57:42 PM (3 years ago)
Author:
mark.lam@apple.com
Message:

Provide a WebCore subspaceImplFor template to make code more readable.
https://bugs.webkit.org/show_bug.cgi?id=236868
rdar://problem/89170090

Reviewed by Yusuke Suzuki.

The pre-existing code is difficult to follow, especially in CodeGeneratorJS.pm.
This change also consolidates the framework implementation of subspaceForImpl in
one place rather than scattered across 3 locations. This will make it easier to
change this code in the future.

Also introduced ExtendedDOMIsoSubspace and ExtendedDOMClientIsoSubspaces classes
and moved the FileSystemDirectoryHandleIterator subspaces in there. This makes
the code behave more consistently for FileSystemDirectoryHandleIterator's
IsoSubspace as for other IsoSubspaces.

Also rebased bindings test results.

  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/ExtendedDOMClientIsoSubspaces.h: Added.
  • bindings/js/ExtendedDOMIsoSubspaces.h: Added.
  • bindings/js/JSFileSystemDirectoryHandleIterator.cpp:

(WebCore::JSFileSystemDirectoryHandleIterator::subspaceForImpl):

  • bindings/js/WebCoreJSClientData.cpp:

(WebCore::JSHeapData::JSHeapData):
(WebCore::JSVMClientData::JSVMClientData):

  • bindings/js/WebCoreJSClientData.h:

(WebCore::JSHeapData::subspaces):
(WebCore::JSVMClientData::idbSerializationSpace):
(WebCore::JSVMClientData::clientSubspaces):
(WebCore::subspaceForImpl):
(WebCore::JSHeapData::fileSystemDirectoryHandleIteratorSpace): Deleted.
(WebCore::JSHeapData::setFileSystemDirectoryHandleIteratorSpace): Deleted.
(WebCore::JSVMClientData::fileSystemDirectoryHandleIteratorSpace): Deleted.
(WebCore::JSVMClientData::setFileSystemDirectoryHandleIteratorSpace): Deleted.

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateImplementation):
(GenerateIterableDefinition):

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

(WebCore::JSDOMWindow::subspaceForImpl):

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

(WebCore::JSDedicatedWorkerGlobalScope::subspaceForImpl):

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

(WebCore::JSExposedStar::subspaceForImpl):

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

(WebCore::JSExposedToWorkerAndWindow::subspaceForImpl):

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

(WebCore::JSPaintWorkletGlobalScope::subspaceForImpl):

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

(WebCore::JSServiceWorkerGlobalScope::subspaceForImpl):

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

(WebCore::JSShadowRealmGlobalScope::subspaceForImpl):

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

(WebCore::JSSharedWorkerGlobalScope::subspaceForImpl):

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

(WebCore::JSTestCEReactions::subspaceForImpl):

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

(WebCore::JSTestCEReactionsStringifier::subspaceForImpl):

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

(WebCore::JSTestCallTracer::subspaceForImpl):

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

(WebCore::JSTestClassWithJSBuiltinConstructor::subspaceForImpl):

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

(WebCore::JSTestConditionalIncludes::subspaceForImpl):

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

(WebCore::JSTestConditionallyReadWrite::subspaceForImpl):

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

(WebCore::JSTestDOMJIT::subspaceForImpl):

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

(WebCore::JSTestDefaultToJSON::subspaceForImpl):

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

(WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceForImpl):

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

(WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceForImpl):

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

(WebCore::JSTestDefaultToJSONInherit::subspaceForImpl):

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

(WebCore::JSTestDefaultToJSONInheritFinal::subspaceForImpl):

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

(WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl):

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

(WebCore::JSTestDomainSecurity::subspaceForImpl):

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

(WebCore::JSTestEnabledBySetting::subspaceForImpl):

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

(WebCore::JSTestEnabledForContext::subspaceForImpl):

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

(WebCore::JSTestEventConstructor::subspaceForImpl):

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

(WebCore::JSTestEventTarget::subspaceForImpl):

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

(WebCore::JSTestException::subspaceForImpl):

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

(WebCore::JSTestGenerateAddOpaqueRoot::subspaceForImpl):

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

(WebCore::JSTestGenerateIsReachable::subspaceForImpl):

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

(WebCore::JSTestGlobalObject::subspaceForImpl):

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

(WebCore::JSTestIndexedSetterNoIdentifier::subspaceForImpl):

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

(WebCore::JSTestIndexedSetterThrowingException::subspaceForImpl):

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

(WebCore::JSTestIndexedSetterWithIdentifier::subspaceForImpl):

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

(WebCore::jsTestInterfacePrototypeFunction_entriesCaller):
(WebCore::JSTestInterface::subspaceForImpl):

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

(WebCore::JSTestInterfaceLeadingUnderscore::subspaceForImpl):

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

(WebCore::jsTestIterablePrototypeFunction_entriesCaller):
(WebCore::JSTestIterable::subspaceForImpl):

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

(WebCore::JSTestJSBuiltinConstructor::subspaceForImpl):

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

(WebCore::JSTestLegacyFactoryFunction::subspaceForImpl):

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

(WebCore::JSTestLegacyNoInterfaceObject::subspaceForImpl):

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

(WebCore::JSTestLegacyOverrideBuiltIns::subspaceForImpl):

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

(WebCore::JSTestMapLike::subspaceForImpl):

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

(WebCore::JSTestMapLikeWithOverriddenOperations::subspaceForImpl):

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

(WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl):

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

(WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedDeleterNoIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedDeleterThrowingException::subspaceForImpl):

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

(WebCore::JSTestNamedDeleterWithIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceForImpl):

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

(WebCore::JSTestNamedGetterCallWith::subspaceForImpl):

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

(WebCore::JSTestNamedGetterNoIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedGetterWithIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedSetterNoIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedSetterThrowingException::subspaceForImpl):

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

(WebCore::JSTestNamedSetterWithIdentifier::subspaceForImpl):

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

(WebCore::JSTestNamedSetterWithIndexedGetter::subspaceForImpl):

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

(WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl):

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

(WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl):

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

(WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl):

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

(WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl):

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

(WebCore::JSTestNamespaceObject::subspaceForImpl):

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

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

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

(WebCore::JSTestObj::subspaceForImpl):

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

(WebCore::JSTestOperationConditional::subspaceForImpl):

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

(WebCore::JSTestOverloadedConstructors::subspaceForImpl):

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

(WebCore::JSTestOverloadedConstructorsWithSequence::subspaceForImpl):

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

(WebCore::JSTestPluginInterface::subspaceForImpl):

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

(WebCore::JSTestPromiseRejectionEvent::subspaceForImpl):

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

(WebCore::JSTestReadOnlyMapLike::subspaceForImpl):

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

(WebCore::JSTestReadOnlySetLike::subspaceForImpl):

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

(WebCore::JSTestReportExtraMemoryCost::subspaceForImpl):

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

(WebCore::JSTestSerializedScriptValueInterface::subspaceForImpl):

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

(WebCore::JSTestSetLike::subspaceForImpl):

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

(WebCore::JSTestSetLikeWithOverriddenOperations::subspaceForImpl):

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

(WebCore::JSTestStringifier::subspaceForImpl):

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

(WebCore::JSTestStringifierAnonymousOperation::subspaceForImpl):

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

(WebCore::JSTestStringifierNamedOperation::subspaceForImpl):

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

(WebCore::JSTestStringifierOperationImplementedAs::subspaceForImpl):

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

(WebCore::JSTestStringifierOperationNamedToString::subspaceForImpl):

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

(WebCore::JSTestStringifierReadOnlyAttribute::subspaceForImpl):

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

(WebCore::JSTestStringifierReadWriteAttribute::subspaceForImpl):

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

(WebCore::JSTestTaggedWrapper::subspaceForImpl):

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

(WebCore::JSTestTypedefs::subspaceForImpl):

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

(WebCore::JSWorkerGlobalScope::subspaceForImpl):

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

(WebCore::JSWorkletGlobalScope::subspaceForImpl):

Location:
trunk/Source/WebCore
Files:
2 added
91 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r290184 r290188  
     12022-02-18  Mark Lam  <mark.lam@apple.com>
     2
     3        Provide a WebCore subspaceImplFor template to make code more readable.
     4        https://bugs.webkit.org/show_bug.cgi?id=236868
     5        rdar://problem/89170090
     6
     7        Reviewed by Yusuke Suzuki.
     8
     9        The pre-existing code is difficult to follow, especially in CodeGeneratorJS.pm.
     10        This change also consolidates the framework implementation of subspaceForImpl in
     11        one place rather than scattered across 3 locations.  This will make it easier to
     12        change this code in the future.
     13
     14        Also introduced ExtendedDOMIsoSubspace and ExtendedDOMClientIsoSubspaces classes
     15        and moved the FileSystemDirectoryHandleIterator subspaces in there.  This makes
     16        the code behave more consistently for FileSystemDirectoryHandleIterator's
     17        IsoSubspace as for other IsoSubspaces.
     18
     19        Also rebased bindings test results.
     20
     21        * WebCore.xcodeproj/project.pbxproj:
     22        * bindings/js/ExtendedDOMClientIsoSubspaces.h: Added.
     23        * bindings/js/ExtendedDOMIsoSubspaces.h: Added.
     24        * bindings/js/JSFileSystemDirectoryHandleIterator.cpp:
     25        (WebCore::JSFileSystemDirectoryHandleIterator::subspaceForImpl):
     26        * bindings/js/WebCoreJSClientData.cpp:
     27        (WebCore::JSHeapData::JSHeapData):
     28        (WebCore::JSVMClientData::JSVMClientData):
     29        * bindings/js/WebCoreJSClientData.h:
     30        (WebCore::JSHeapData::subspaces):
     31        (WebCore::JSVMClientData::idbSerializationSpace):
     32        (WebCore::JSVMClientData::clientSubspaces):
     33        (WebCore::subspaceForImpl):
     34        (WebCore::JSHeapData::fileSystemDirectoryHandleIteratorSpace): Deleted.
     35        (WebCore::JSHeapData::setFileSystemDirectoryHandleIteratorSpace): Deleted.
     36        (WebCore::JSVMClientData::fileSystemDirectoryHandleIteratorSpace): Deleted.
     37        (WebCore::JSVMClientData::setFileSystemDirectoryHandleIteratorSpace): Deleted.
     38        * bindings/scripts/CodeGeneratorJS.pm:
     39        (GenerateImplementation):
     40        (GenerateIterableDefinition):
     41        * bindings/scripts/test/JS/JSDOMWindow.cpp:
     42        (WebCore::JSDOMWindow::subspaceForImpl):
     43        * bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp:
     44        (WebCore::JSDedicatedWorkerGlobalScope::subspaceForImpl):
     45        * bindings/scripts/test/JS/JSExposedStar.cpp:
     46        (WebCore::JSExposedStar::subspaceForImpl):
     47        * bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp:
     48        (WebCore::JSExposedToWorkerAndWindow::subspaceForImpl):
     49        * bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp:
     50        (WebCore::JSPaintWorkletGlobalScope::subspaceForImpl):
     51        * bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp:
     52        (WebCore::JSServiceWorkerGlobalScope::subspaceForImpl):
     53        * bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp:
     54        (WebCore::JSShadowRealmGlobalScope::subspaceForImpl):
     55        * bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp:
     56        (WebCore::JSSharedWorkerGlobalScope::subspaceForImpl):
     57        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
     58        (WebCore::JSTestCEReactions::subspaceForImpl):
     59        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
     60        (WebCore::JSTestCEReactionsStringifier::subspaceForImpl):
     61        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
     62        (WebCore::JSTestCallTracer::subspaceForImpl):
     63        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
     64        (WebCore::JSTestClassWithJSBuiltinConstructor::subspaceForImpl):
     65        * bindings/scripts/test/JS/JSTestConditionalIncludes.cpp:
     66        (WebCore::JSTestConditionalIncludes::subspaceForImpl):
     67        * bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp:
     68        (WebCore::JSTestConditionallyReadWrite::subspaceForImpl):
     69        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
     70        (WebCore::JSTestDOMJIT::subspaceForImpl):
     71        * bindings/scripts/test/JS/JSTestDefaultToJSON.cpp:
     72        (WebCore::JSTestDefaultToJSON::subspaceForImpl):
     73        * bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp:
     74        (WebCore::JSTestDefaultToJSONFilteredByExposed::subspaceForImpl):
     75        * bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp:
     76        (WebCore::JSTestDefaultToJSONIndirectInheritance::subspaceForImpl):
     77        * bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp:
     78        (WebCore::JSTestDefaultToJSONInherit::subspaceForImpl):
     79        * bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp:
     80        (WebCore::JSTestDefaultToJSONInheritFinal::subspaceForImpl):
     81        * bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp:
     82        (WebCore::JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl):
     83        * bindings/scripts/test/JS/JSTestDomainSecurity.cpp:
     84        (WebCore::JSTestDomainSecurity::subspaceForImpl):
     85        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
     86        (WebCore::JSTestEnabledBySetting::subspaceForImpl):
     87        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
     88        (WebCore::JSTestEnabledForContext::subspaceForImpl):
     89        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
     90        (WebCore::JSTestEventConstructor::subspaceForImpl):
     91        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
     92        (WebCore::JSTestEventTarget::subspaceForImpl):
     93        * bindings/scripts/test/JS/JSTestException.cpp:
     94        (WebCore::JSTestException::subspaceForImpl):
     95        * bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp:
     96        (WebCore::JSTestGenerateAddOpaqueRoot::subspaceForImpl):
     97        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
     98        (WebCore::JSTestGenerateIsReachable::subspaceForImpl):
     99        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
     100        (WebCore::JSTestGlobalObject::subspaceForImpl):
     101        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
     102        (WebCore::JSTestIndexedSetterNoIdentifier::subspaceForImpl):
     103        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
     104        (WebCore::JSTestIndexedSetterThrowingException::subspaceForImpl):
     105        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
     106        (WebCore::JSTestIndexedSetterWithIdentifier::subspaceForImpl):
     107        * bindings/scripts/test/JS/JSTestInterface.cpp:
     108        (WebCore::jsTestInterfacePrototypeFunction_entriesCaller):
     109        (WebCore::JSTestInterface::subspaceForImpl):
     110        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
     111        (WebCore::JSTestInterfaceLeadingUnderscore::subspaceForImpl):
     112        * bindings/scripts/test/JS/JSTestIterable.cpp:
     113        (WebCore::jsTestIterablePrototypeFunction_entriesCaller):
     114        (WebCore::JSTestIterable::subspaceForImpl):
     115        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
     116        (WebCore::JSTestJSBuiltinConstructor::subspaceForImpl):
     117        * bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp:
     118        (WebCore::JSTestLegacyFactoryFunction::subspaceForImpl):
     119        * bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp:
     120        (WebCore::JSTestLegacyNoInterfaceObject::subspaceForImpl):
     121        * bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp:
     122        (WebCore::JSTestLegacyOverrideBuiltIns::subspaceForImpl):
     123        * bindings/scripts/test/JS/JSTestMapLike.cpp:
     124        (WebCore::JSTestMapLike::subspaceForImpl):
     125        * bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp:
     126        (WebCore::JSTestMapLikeWithOverriddenOperations::subspaceForImpl):
     127        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
     128        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl):
     129        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
     130        (WebCore::JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl):
     131        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
     132        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl):
     133        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
     134        (WebCore::JSTestNamedDeleterNoIdentifier::subspaceForImpl):
     135        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
     136        (WebCore::JSTestNamedDeleterThrowingException::subspaceForImpl):
     137        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
     138        (WebCore::JSTestNamedDeleterWithIdentifier::subspaceForImpl):
     139        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
     140        (WebCore::JSTestNamedDeleterWithIndexedGetter::subspaceForImpl):
     141        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
     142        (WebCore::JSTestNamedGetterCallWith::subspaceForImpl):
     143        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
     144        (WebCore::JSTestNamedGetterNoIdentifier::subspaceForImpl):
     145        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
     146        (WebCore::JSTestNamedGetterWithIdentifier::subspaceForImpl):
     147        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
     148        (WebCore::JSTestNamedSetterNoIdentifier::subspaceForImpl):
     149        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
     150        (WebCore::JSTestNamedSetterThrowingException::subspaceForImpl):
     151        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
     152        (WebCore::JSTestNamedSetterWithIdentifier::subspaceForImpl):
     153        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
     154        (WebCore::JSTestNamedSetterWithIndexedGetter::subspaceForImpl):
     155        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
     156        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl):
     157        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp:
     158        (WebCore::JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl):
     159        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp:
     160        (WebCore::JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl):
     161        * bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp:
     162        (WebCore::JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl):
     163        * bindings/scripts/test/JS/JSTestNamespaceObject.cpp:
     164        (WebCore::JSTestNamespaceObject::subspaceForImpl):
     165        * bindings/scripts/test/JS/JSTestNode.cpp:
     166        (WebCore::jsTestNodePrototypeFunction_entriesCaller):
     167        (WebCore::JSTestNode::subspaceForImpl):
     168        * bindings/scripts/test/JS/JSTestObj.cpp:
     169        (WebCore::JSTestObj::subspaceForImpl):
     170        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
     171        (WebCore::JSTestOperationConditional::subspaceForImpl):
     172        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
     173        (WebCore::JSTestOverloadedConstructors::subspaceForImpl):
     174        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
     175        (WebCore::JSTestOverloadedConstructorsWithSequence::subspaceForImpl):
     176        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
     177        (WebCore::JSTestPluginInterface::subspaceForImpl):
     178        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
     179        (WebCore::JSTestPromiseRejectionEvent::subspaceForImpl):
     180        * bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp:
     181        (WebCore::JSTestReadOnlyMapLike::subspaceForImpl):
     182        * bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp:
     183        (WebCore::JSTestReadOnlySetLike::subspaceForImpl):
     184        * bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp:
     185        (WebCore::JSTestReportExtraMemoryCost::subspaceForImpl):
     186        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
     187        (WebCore::JSTestSerializedScriptValueInterface::subspaceForImpl):
     188        * bindings/scripts/test/JS/JSTestSetLike.cpp:
     189        (WebCore::JSTestSetLike::subspaceForImpl):
     190        * bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp:
     191        (WebCore::JSTestSetLikeWithOverriddenOperations::subspaceForImpl):
     192        * bindings/scripts/test/JS/JSTestStringifier.cpp:
     193        (WebCore::JSTestStringifier::subspaceForImpl):
     194        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
     195        (WebCore::JSTestStringifierAnonymousOperation::subspaceForImpl):
     196        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
     197        (WebCore::JSTestStringifierNamedOperation::subspaceForImpl):
     198        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
     199        (WebCore::JSTestStringifierOperationImplementedAs::subspaceForImpl):
     200        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
     201        (WebCore::JSTestStringifierOperationNamedToString::subspaceForImpl):
     202        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
     203        (WebCore::JSTestStringifierReadOnlyAttribute::subspaceForImpl):
     204        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
     205        (WebCore::JSTestStringifierReadWriteAttribute::subspaceForImpl):
     206        * bindings/scripts/test/JS/JSTestTaggedWrapper.cpp:
     207        (WebCore::JSTestTaggedWrapper::subspaceForImpl):
     208        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
     209        (WebCore::JSTestTypedefs::subspaceForImpl):
     210        * bindings/scripts/test/JS/JSWorkerGlobalScope.cpp:
     211        (WebCore::JSWorkerGlobalScope::subspaceForImpl):
     212        * bindings/scripts/test/JS/JSWorkletGlobalScope.cpp:
     213        (WebCore::JSWorkletGlobalScope::subspaceForImpl):
     214
    12152022-02-18  J Pascoe  <j_pascoe@apple.com>
    2216
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r290184 r290188  
    24212421                7BDDA31F274FA0210038659E /* GraphicsContextGLCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BDDA31D274F9DA50038659E /* GraphicsContextGLCocoa.h */; settings = {ATTRIBUTES = (Private, ); }; };
    24222422                7BDDA34C275A01310038659E /* ProcessIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BDDA349275A01300038659E /* ProcessIdentity.h */; settings = {ATTRIBUTES = (Private, ); }; };
    2423                 7BE37F8727BBB708007A6CD3 /* VideoFrameCV.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE37F8627BBB6FF007A6CD3 /* VideoFrameCV.h */; settings = {ATTRIBUTES = (Private, ); }; };
    24242423                7BE37F7A27BB86AB007A6CD3 /* GraphicsContextGLCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7BDDA31C274F9DA40038659E /* GraphicsContextGLCocoa.mm */; };
    24252424                7BE37F7C27BB86B8007A6CD3 /* ANGLEUtilitiesCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7BCD42DA2705C94900EB2127 /* ANGLEUtilitiesCocoa.cpp */; };
    24262425                7BE37F7D27BB86CD007A6CD3 /* ANGLEUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7BCD42D8270599EF00EB2127 /* ANGLEUtilities.cpp */; };
    24272426                7BE37F7E27BB86DB007A6CD3 /* GraphicsContextGLCVCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B10339A2549720000C8C1AC /* GraphicsContextGLCVCocoa.cpp */; };
     2427                7BE37F8727BBB708007A6CD3 /* VideoFrameCV.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE37F8627BBB6FF007A6CD3 /* VideoFrameCV.h */; settings = {ATTRIBUTES = (Private, ); }; };
    24282428                7BE7427381FA906FBB4F0F2C /* JSSVGGraphicsElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 950C4C02BED8936F818E2F99 /* JSSVGGraphicsElement.h */; };
    24292429                7BFF59F42757726700773D39 /* DisplayConfigurationMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BFF59EF275771E800773D39 /* DisplayConfigurationMonitor.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    57455745                FDF6BAF9134A4C9800822920 /* JSOfflineAudioCompletionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF6BAF7134A4C9800822920 /* JSOfflineAudioCompletionEvent.h */; };
    57465746                FDF7E9C413AC21DB00A51EAC /* JSAudioBufferCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF7E9C213AC21DB00A51EAC /* JSAudioBufferCallback.h */; };
     5747                FE0BCF3427C0661000BFB2DB /* ExtendedDOMIsoSubspaces.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0BCF3127C0660F00BFB2DB /* ExtendedDOMIsoSubspaces.h */; };
     5748                FE0BCF3527C0661000BFB2DB /* ExtendedDOMClientIsoSubspaces.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0BCF3327C0661000BFB2DB /* ExtendedDOMClientIsoSubspaces.h */; };
    57475749                FE0D84E910484348001A179E /* WebEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0D84E810484348001A179E /* WebEvent.h */; settings = {ATTRIBUTES = (Private, ); }; };
    57485750                FE36FD1516C7826500F887C1 /* ChangeVersionData.h in Headers */ = {isa = PBXBuildFile; fileRef = FE36FD1116C7826400F887C1 /* ChangeVersionData.h */; };
     
    1829218294                FDF7E9C113AC21DB00A51EAC /* JSAudioBufferCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAudioBufferCallback.cpp; sourceTree = "<group>"; };
    1829318295                FDF7E9C213AC21DB00A51EAC /* JSAudioBufferCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAudioBufferCallback.h; sourceTree = "<group>"; };
     18296                FE0BCF3127C0660F00BFB2DB /* ExtendedDOMIsoSubspaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtendedDOMIsoSubspaces.h; sourceTree = "<group>"; };
     18297                FE0BCF3327C0661000BFB2DB /* ExtendedDOMClientIsoSubspaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtendedDOMClientIsoSubspaces.h; sourceTree = "<group>"; };
    1829418298                FE0D84E810484348001A179E /* WebEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebEvent.h; sourceTree = "<group>"; };
    1829518299                FE0D84EA1048436E001A179E /* WebEvent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebEvent.mm; sourceTree = "<group>"; };
     
    2933729341                                BC53DA2D1143121E000D817E /* DOMWrapperWorld.h */,
    2933829342                                2D293869235F6B6800C7F3B2 /* ExceptionDetails.h */,
     29343                                FE0BCF3327C0661000BFB2DB /* ExtendedDOMClientIsoSubspaces.h */,
     29344                                FE0BCF3127C0660F00BFB2DB /* ExtendedDOMIsoSubspaces.h */,
    2933929345                                1432E8480C51493F00B1500F /* GCController.cpp */,
    2934029346                                1432E8460C51493800B1500F /* GCController.h */,
     
    3518335189                                71025EDE1F99F1EC004A250C /* JSAnimationTimeline.h in Headers */,
    3518435190                                A1956F1C2331A6770057E9D2 /* JSApplePayCancelEvent.h in Headers */,
     35191                                FE0BCF3527C0661000BFB2DB /* ExtendedDOMClientIsoSubspaces.h in Headers */,
    3518535192                                A1DF5A991F7EC8C00058A477 /* JSApplePayContactField.h in Headers */,
    3518635193                                9596B93825DEEF0300ED2CFA /* JSApplePayCouponCodeChangedEvent.h in Headers */,
     
    3710537112                                3135910B1E7DDC7300F30630 /* RTCSignalingState.h in Headers */,
    3710637113                                078E092A17D14D1C00420AA1 /* RTCStatsReport.h in Headers */,
     37114                                FE0BCF3427C0661000BFB2DB /* ExtendedDOMIsoSubspaces.h in Headers */,
    3710737115                                5E2C43681BCEE3770001E2BC /* RTCTrackEvent.h in Headers */,
    3710837116                                078E094717D16E1C00420AA1 /* RTCVoidRequest.h in Headers */,
  • trunk/Source/WebCore/bindings/js/JSFileSystemDirectoryHandleIterator.cpp

    r290129 r290188  
    2727#include "JSFileSystemDirectoryHandleIterator.h"
    2828
     29#include "ExtendedDOMClientIsoSubspaces.h"
     30#include "ExtendedDOMIsoSubspaces.h"
    2931#include "JSDOMOperation.h"
    3032#include "WebCoreJSClientData.h"
     
    5153{
    5254    JSLockHolder apiLocker(vm);
    53     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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 
    70 IGNORE_WARNINGS_BEGIN("unreachable-code")
    71 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    76 IGNORE_WARNINGS_END
    77 IGNORE_WARNINGS_END
    78     }
    79 
    80     auto* clientSpace = new GCClient::IsoSubspace(*space);
    81     clientData.setFileSystemDirectoryHandleIteratorSpace(std::unique_ptr<GCClient::IsoSubspace>(clientSpace));
    82     return clientSpace;
     55    return subspaceForImpl<JSFileSystemDirectoryHandleIterator, UseCustomHeapCellType::No>(vm,
     56        [] (auto& spaces) { return spaces.m_clientSubspaceForFileSystemDirectoryHandleIterator.get(); },
     57        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForFileSystemDirectoryHandleIterator = WTFMove(space); },
     58        [] (auto& spaces) { return spaces.m_subspaceForFileSystemDirectoryHandleIterator.get(); },
     59        [] (auto& spaces, auto&& space) { spaces.m_subspaceForFileSystemDirectoryHandleIterator = WTFMove(space); }
     60    );
    8361}
    8462
  • trunk/Source/WebCore/bindings/js/WebCoreJSClientData.cpp

    r290129 r290188  
    2727#include "WebCoreJSClientData.h"
    2828
    29 #include "DOMClientIsoSubspaces.h"
    3029#include "DOMGCOutputConstraint.h"
    31 #include "DOMIsoSubspaces.h"
     30#include "ExtendedDOMClientIsoSubspaces.h"
     31#include "ExtendedDOMIsoSubspaces.h"
    3232#include "JSAudioWorkletGlobalScope.h"
    3333#include "JSDOMBinding.h"
     
    9191    , m_windowProxySpace ISO_SUBSPACE_INIT(heap, m_windowProxyHeapCellType, JSWindowProxy)
    9292    , m_idbSerializationSpace ISO_SUBSPACE_INIT(heap, m_heapCellTypeForJSIDBSerializationGlobalObject, JSIDBSerializationGlobalObject)
    93     , m_subspaces(makeUnique<DOMIsoSubspaces>())
     93    , m_subspaces(makeUnique<ExtendedDOMIsoSubspaces>())
    9494{
    9595}
     
    123123    , CLIENT_ISO_SUBSPACE_INIT(m_windowProxySpace)
    124124    , CLIENT_ISO_SUBSPACE_INIT(m_idbSerializationSpace)
    125     , m_clientSubspaces(makeUnique<DOMClientIsoSubspaces>())
     125    , m_clientSubspaces(makeUnique<ExtendedDOMClientIsoSubspaces>())
    126126{
    127127}
  • trunk/Source/WebCore/bindings/js/WebCoreJSClientData.h

    r290129 r290188  
    3232namespace WebCore {
    3333
    34 class DOMClientIsoSubspaces;
    35 class DOMIsoSubspaces;
     34class ExtendedDOMClientIsoSubspaces;
     35class ExtendedDOMIsoSubspaces;
    3636
    3737class JSHeapData {
     
    4545
    4646    Lock& lock() { return m_lock; }
    47     DOMIsoSubspaces& subspaces() { return *m_subspaces.get(); }
     47    ExtendedDOMIsoSubspaces& subspaces() { return *m_subspaces.get(); }
    4848
    4949    Vector<JSC::IsoSubspace*>& outputConstraintSpaces() { return m_outputConstraintSpaces; }
     
    5555            func(*space);
    5656    }
    57 
    58     JSC::IsoSubspace* fileSystemDirectoryHandleIteratorSpace() { return m_fileSystemDirectoryHandleIteratorSpace.get(); }
    59     void setFileSystemDirectoryHandleIteratorSpace(std::unique_ptr<JSC::IsoSubspace> space) { m_fileSystemDirectoryHandleIteratorSpace = std::exchange(space, nullptr); }
    6057
    6158private:
     
    9491    JSC::IsoSubspace m_windowProxySpace;
    9592    JSC::IsoSubspace m_idbSerializationSpace;
    96     std::unique_ptr<JSC::IsoSubspace> m_fileSystemDirectoryHandleIteratorSpace;
    97 
    98     std::unique_ptr<DOMIsoSubspaces> m_subspaces;
     93
     94    std::unique_ptr<ExtendedDOMIsoSubspaces> m_subspaces;
    9995    Vector<JSC::IsoSubspace*> m_outputConstraintSpaces;
    10096};
     
    142138    JSC::GCClient::IsoSubspace& windowProxySpace() { return m_windowProxySpace; }
    143139    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(); }
     140
     141    ExtendedDOMClientIsoSubspaces& clientSubspaces() { return *m_clientSubspaces.get(); }
    148142
    149143private:
     
    165159    JSC::GCClient::IsoSubspace m_idbSerializationSpace;
    166160
    167     std::unique_ptr<JSC::GCClient::IsoSubspace> m_fileSystemDirectoryHandleIteratorSpace;
    168     std::unique_ptr<DOMClientIsoSubspaces> m_clientSubspaces;
     161    std::unique_ptr<ExtendedDOMClientIsoSubspaces> m_clientSubspaces;
    169162};
    170163
     164
     165enum class UseCustomHeapCellType { Yes, No };
     166
     167template<typename T, UseCustomHeapCellType useCustomHeapCellType, typename GetClient, typename SetClient, typename GetServer, typename SetServer>
     168ALWAYS_INLINE JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm, GetClient getClient, SetClient setClient, GetServer getServer, SetServer setServer, JSC::HeapCellType& (*getCustomHeapCellType)(JSHeapData&) = nullptr)
     169{
     170    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
     171    auto& clientSubspaces = clientData.clientSubspaces();
     172    if (auto* clientSpace = getClient(clientSubspaces))
     173        return clientSpace;
     174
     175    auto& heapData = clientData.heapData();
     176    Locker locker { heapData.lock() };
     177
     178    auto& subspaces = heapData.subspaces();
     179    JSC::IsoSubspace* space = getServer(subspaces);
     180    if (!space) {
     181        JSC::Heap& heap = vm.heap;
     182        std::unique_ptr<JSC::IsoSubspace> uniqueSubspace;
     183        static_assert(useCustomHeapCellType == UseCustomHeapCellType::Yes || std::is_base_of_v<JSC::JSDestructibleObject, T> || !T::needsDestruction);
     184        if constexpr (useCustomHeapCellType == UseCustomHeapCellType::Yes)
     185            uniqueSubspace = makeUnique<JSC::IsoSubspace> ISO_SUBSPACE_INIT(heap, getCustomHeapCellType(heapData), T);
     186        else {
     187            if constexpr (std::is_base_of_v<JSC::JSDestructibleObject, T>)
     188                uniqueSubspace = makeUnique<JSC::IsoSubspace> ISO_SUBSPACE_INIT(heap, heap.destructibleObjectHeapCellType, T);
     189            else
     190                uniqueSubspace = makeUnique<JSC::IsoSubspace> ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, T);
     191        }
     192        space = uniqueSubspace.get();
     193        setServer(subspaces, uniqueSubspace);
     194
     195IGNORE_WARNINGS_BEGIN("unreachable-code")
     196IGNORE_WARNINGS_BEGIN("tautological-compare")
     197        void (*myVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = T::visitOutputConstraints;
     198        void (*jsCellVisitOutputConstraint)(JSC::JSCell*, JSC::SlotVisitor&) = JSC::JSCell::visitOutputConstraints;
     199        if (myVisitOutputConstraint != jsCellVisitOutputConstraint)
     200            heapData.outputConstraintSpaces().append(space);
     201IGNORE_WARNINGS_END
     202IGNORE_WARNINGS_END
     203    }
     204
     205    auto uniqueClientSubspace = makeUnique<JSC::GCClient::IsoSubspace>(*space);
     206    auto* clientSpace = uniqueClientSubspace.get();
     207    setClient(clientSubspaces, uniqueClientSubspace);
     208    return clientSpace;
     209}
     210
    171211} // namespace WebCore
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r290155 r290188  
    48724872    GenerateIterableDefinition($interface) if $interface->iterable;
    48734873
    4874     AddToImplIncludes("DOMClientIsoSubspaces.h");
    4875     AddToImplIncludes("DOMIsoSubspaces.h");
     4874    AddToImplIncludes("ExtendedDOMClientIsoSubspaces.h");
     4875    AddToImplIncludes("ExtendedDOMIsoSubspaces.h");
    48764876    AddToImplIncludes("WebCoreJSClientData.h");
    48774877    AddToImplIncludes("<JavaScriptCore/JSDestructibleObjectHeapCellType.h>");
     
    48804880    push(@implContent, "JSC::GCClient::IsoSubspace* ${className}::subspaceForImpl(JSC::VM& vm)\n");
    48814881    push(@implContent, "{\n");
    4882     push(@implContent, "    auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);\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_subspaceFor${interfaceName}.get();\n");
    4892     push(@implContent, "    if (!space) {\n");
    4893     push(@implContent, "        Heap& heap = vm.heap;\n");
    4894 
     4882
     4883    my $useCustomHeapCell;
     4884    my $customHeapCellTypeGetter;
    48954885    if (IsDOMGlobalObject($interface)) {
    4896         push(@implContent, "        space = new IsoSubspace ISO_SUBSPACE_INIT(heap, heapData.m_heapCellTypeFor${className}, ${className});\n");
     4886        $useCustomHeapCell = "Yes";
     4887        $customHeapCellTypeGetter = "[] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeFor${className}; }";
    48974888    } else {
    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");
    4905     push(@implContent, "IGNORE_WARNINGS_BEGIN(\"unreachable-code\")\n");
    4906     push(@implContent, "IGNORE_WARNINGS_BEGIN(\"tautological-compare\")\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");
    4911     push(@implContent, "IGNORE_WARNINGS_END\n");
    4912     push(@implContent, "IGNORE_WARNINGS_END\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");
     4889        $useCustomHeapCell = "No";
     4890        $customHeapCellTypeGetter = "nullptr";
     4891    }
     4892
     4893    push(@implContent, "    return subspaceForImpl<${className}, UseCustomHeapCellType::$useCustomHeapCell>(vm,\n");
     4894    push(@implContent, "        [] (auto& spaces) { return spaces.m_clientSubspaceFor${interfaceName}.get(); },\n");
     4895    push(@implContent, "        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceFor${interfaceName} = WTFMove(space); },\n");
     4896    push(@implContent, "        [] (auto& spaces) { return spaces.m_subspaceFor${interfaceName}.get(); },\n");
     4897    push(@implContent, "        [] (auto& spaces, auto&& space) { spaces.m_subspaceFor${interfaceName} = WTFMove(space); },\n");
     4898    push(@implContent, "        $customHeapCellTypeGetter\n");
     4899    push(@implContent, "    );\n");
    49184900    push(@implContent, "}\n\n");
    49194901
     
    68036785        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    68046786            return nullptr;
    6805         auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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);
    6823 IGNORE_WARNINGS_BEGIN(\"unreachable-code\")
    6824 IGNORE_WARNINGS_BEGIN(\"tautological-compare\")
    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);
    6829 IGNORE_WARNINGS_END
    6830 IGNORE_WARNINGS_END
    6831         }
    6832 
    6833         clientSpaces.m_clientSubspaceFor${iteratorName} = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    6834         return clientSpaces.m_clientSubspaceFor${iteratorName}.get();
     6787        return subspaceForImpl<${iteratorName}, UseCustomHeapCellType::No>(vm,
     6788            [] (auto& spaces) { return spaces.m_clientSubspaceFor${iteratorName}.get(); },
     6789            [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceFor${iteratorName} = WTFMove(space); },
     6790            [] (auto& spaces) { return spaces.m_subspaceFor${iteratorName}.get(); },
     6791            [] (auto& spaces, auto&& space) { spaces.m_subspaceFor${iteratorName} = WTFMove(space); }
     6792        );
    68356793    }
    68366794
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    367367JSC::GCClient::IsoSubspace* JSDOMWindow::subspaceForImpl(JSC::VM& vm)
    368368{
    369     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForDOMWindow.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);
    383 IGNORE_WARNINGS_BEGIN("unreachable-code")
    384 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    389 IGNORE_WARNINGS_END
    390 IGNORE_WARNINGS_END
    391     }
    392 
    393     clientSpaces.m_clientSubspaceForDOMWindow = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    394     return clientSpaces.m_clientSubspaceForDOMWindow.get();
     369    return subspaceForImpl<JSDOMWindow, UseCustomHeapCellType::Yes>(vm,
     370        [] (auto& spaces) { return spaces.m_clientSubspaceForDOMWindow.get(); },
     371        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForDOMWindow = WTFMove(space); },
     372        [] (auto& spaces) { return spaces.m_subspaceForDOMWindow.get(); },
     373        [] (auto& spaces, auto&& space) { spaces.m_subspaceForDOMWindow = WTFMove(space); },
     374        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSDOMWindow; }
     375    );
    395376}
    396377
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "DedicatedWorkerGlobalScope.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "JSDOMAttribute.h"
    2929#include "JSDOMBinding.h"
     
    168168JSC::GCClient::IsoSubspace* JSDedicatedWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    169169{
    170     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForDedicatedWorkerGlobalScope.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);
    184 IGNORE_WARNINGS_BEGIN("unreachable-code")
    185 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    190 IGNORE_WARNINGS_END
    191 IGNORE_WARNINGS_END
    192     }
    193 
    194     clientSpaces.m_clientSubspaceForDedicatedWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    195     return clientSpaces.m_clientSubspaceForDedicatedWorkerGlobalScope.get();
     170    return subspaceForImpl<JSDedicatedWorkerGlobalScope, UseCustomHeapCellType::Yes>(vm,
     171        [] (auto& spaces) { return spaces.m_clientSubspaceForDedicatedWorkerGlobalScope.get(); },
     172        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForDedicatedWorkerGlobalScope = WTFMove(space); },
     173        [] (auto& spaces) { return spaces.m_subspaceForDedicatedWorkerGlobalScope.get(); },
     174        [] (auto& spaces, auto&& space) { spaces.m_subspaceForDedicatedWorkerGlobalScope = WTFMove(space); },
     175        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSDedicatedWorkerGlobalScope; }
     176    );
    196177}
    197178
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedStar.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMBinding.h"
     
    232232JSC::GCClient::IsoSubspace* JSExposedStar::subspaceForImpl(JSC::VM& vm)
    233233{
    234     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForExposedStar.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);
    252 IGNORE_WARNINGS_BEGIN("unreachable-code")
    253 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    258 IGNORE_WARNINGS_END
    259 IGNORE_WARNINGS_END
    260     }
    261 
    262     clientSpaces.m_clientSubspaceForExposedStar = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    263     return clientSpaces.m_clientSubspaceForExposedStar.get();
     234    return subspaceForImpl<JSExposedStar, UseCustomHeapCellType::No>(vm,
     235        [] (auto& spaces) { return spaces.m_clientSubspaceForExposedStar.get(); },
     236        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForExposedStar = WTFMove(space); },
     237        [] (auto& spaces) { return spaces.m_subspaceForExposedStar.get(); },
     238        [] (auto& spaces, auto&& space) { spaces.m_subspaceForExposedStar = WTFMove(space); },
     239        nullptr
     240    );
    264241}
    265242
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructor.h"
     
    250250JSC::GCClient::IsoSubspace* JSExposedToWorkerAndWindow::subspaceForImpl(JSC::VM& vm)
    251251{
    252     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForExposedToWorkerAndWindow.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);
    270 IGNORE_WARNINGS_BEGIN("unreachable-code")
    271 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    276 IGNORE_WARNINGS_END
    277 IGNORE_WARNINGS_END
    278     }
    279 
    280     clientSpaces.m_clientSubspaceForExposedToWorkerAndWindow = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    281     return clientSpaces.m_clientSubspaceForExposedToWorkerAndWindow.get();
     252    return subspaceForImpl<JSExposedToWorkerAndWindow, UseCustomHeapCellType::No>(vm,
     253        [] (auto& spaces) { return spaces.m_clientSubspaceForExposedToWorkerAndWindow.get(); },
     254        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForExposedToWorkerAndWindow = WTFMove(space); },
     255        [] (auto& spaces) { return spaces.m_subspaceForExposedToWorkerAndWindow.get(); },
     256        [] (auto& spaces, auto&& space) { spaces.m_subspaceForExposedToWorkerAndWindow = WTFMove(space); },
     257        nullptr
     258    );
    282259}
    283260
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    167167JSC::GCClient::IsoSubspace* JSPaintWorkletGlobalScope::subspaceForImpl(JSC::VM& vm)
    168168{
    169     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForPaintWorkletGlobalScope.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);
    183 IGNORE_WARNINGS_BEGIN("unreachable-code")
    184 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    189 IGNORE_WARNINGS_END
    190 IGNORE_WARNINGS_END
    191     }
    192 
    193     clientSpaces.m_clientSubspaceForPaintWorkletGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    194     return clientSpaces.m_clientSubspaceForPaintWorkletGlobalScope.get();
     169    return subspaceForImpl<JSPaintWorkletGlobalScope, UseCustomHeapCellType::Yes>(vm,
     170        [] (auto& spaces) { return spaces.m_clientSubspaceForPaintWorkletGlobalScope.get(); },
     171        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForPaintWorkletGlobalScope = WTFMove(space); },
     172        [] (auto& spaces) { return spaces.m_subspaceForPaintWorkletGlobalScope.get(); },
     173        [] (auto& spaces, auto&& space) { spaces.m_subspaceForPaintWorkletGlobalScope = WTFMove(space); },
     174        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSPaintWorkletGlobalScope; }
     175    );
    195176}
    196177
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    167167JSC::GCClient::IsoSubspace* JSServiceWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    168168{
    169     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForServiceWorkerGlobalScope.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);
    183 IGNORE_WARNINGS_BEGIN("unreachable-code")
    184 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    189 IGNORE_WARNINGS_END
    190 IGNORE_WARNINGS_END
    191     }
    192 
    193     clientSpaces.m_clientSubspaceForServiceWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    194     return clientSpaces.m_clientSubspaceForServiceWorkerGlobalScope.get();
     169    return subspaceForImpl<JSServiceWorkerGlobalScope, UseCustomHeapCellType::Yes>(vm,
     170        [] (auto& spaces) { return spaces.m_clientSubspaceForServiceWorkerGlobalScope.get(); },
     171        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForServiceWorkerGlobalScope = WTFMove(space); },
     172        [] (auto& spaces) { return spaces.m_subspaceForServiceWorkerGlobalScope.get(); },
     173        [] (auto& spaces, auto&& space) { spaces.m_subspaceForServiceWorkerGlobalScope = WTFMove(space); },
     174        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSServiceWorkerGlobalScope; }
     175    );
    195176}
    196177
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    153153JSC::GCClient::IsoSubspace* JSShadowRealmGlobalScope::subspaceForImpl(JSC::VM& vm)
    154154{
    155     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForShadowRealmGlobalScope.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);
    169 IGNORE_WARNINGS_BEGIN("unreachable-code")
    170 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    175 IGNORE_WARNINGS_END
    176 IGNORE_WARNINGS_END
    177     }
    178 
    179     clientSpaces.m_clientSubspaceForShadowRealmGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    180     return clientSpaces.m_clientSubspaceForShadowRealmGlobalScope.get();
     155    return subspaceForImpl<JSShadowRealmGlobalScope, UseCustomHeapCellType::Yes>(vm,
     156        [] (auto& spaces) { return spaces.m_clientSubspaceForShadowRealmGlobalScope.get(); },
     157        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForShadowRealmGlobalScope = WTFMove(space); },
     158        [] (auto& spaces) { return spaces.m_subspaceForShadowRealmGlobalScope.get(); },
     159        [] (auto& spaces, auto&& space) { spaces.m_subspaceForShadowRealmGlobalScope = WTFMove(space); },
     160        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSShadowRealmGlobalScope; }
     161    );
    181162}
    182163
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    151151JSC::GCClient::IsoSubspace* JSSharedWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    152152{
    153     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForSharedWorkerGlobalScope.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);
    167 IGNORE_WARNINGS_BEGIN("unreachable-code")
    168 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    173 IGNORE_WARNINGS_END
    174 IGNORE_WARNINGS_END
    175     }
    176 
    177     clientSpaces.m_clientSubspaceForSharedWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    178     return clientSpaces.m_clientSubspaceForSharedWorkerGlobalScope.get();
     153    return subspaceForImpl<JSSharedWorkerGlobalScope, UseCustomHeapCellType::Yes>(vm,
     154        [] (auto& spaces) { return spaces.m_clientSubspaceForSharedWorkerGlobalScope.get(); },
     155        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForSharedWorkerGlobalScope = WTFMove(space); },
     156        [] (auto& spaces) { return spaces.m_subspaceForSharedWorkerGlobalScope.get(); },
     157        [] (auto& spaces, auto&& space) { spaces.m_subspaceForSharedWorkerGlobalScope = WTFMove(space); },
     158        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSSharedWorkerGlobalScope; }
     159    );
    179160}
    180161
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp

    r290155 r290188  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
    26 #include "DOMClientIsoSubspaces.h"
    27 #include "DOMIsoSubspaces.h"
    2826#include "ElementInlines.h"
     27#include "ExtendedDOMClientIsoSubspaces.h"
     28#include "ExtendedDOMIsoSubspaces.h"
    2929#include "HTMLNames.h"
    3030#include "IDLTypes.h"
     
    434434JSC::GCClient::IsoSubspace* JSTestCEReactions::subspaceForImpl(JSC::VM& vm)
    435435{
    436     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestCEReactions.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);
    454 IGNORE_WARNINGS_BEGIN("unreachable-code")
    455 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    460 IGNORE_WARNINGS_END
    461 IGNORE_WARNINGS_END
    462     }
    463 
    464     clientSpaces.m_clientSubspaceForTestCEReactions = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    465     return clientSpaces.m_clientSubspaceForTestCEReactions.get();
     436    return subspaceForImpl<JSTestCEReactions, UseCustomHeapCellType::No>(vm,
     437        [] (auto& spaces) { return spaces.m_clientSubspaceForTestCEReactions.get(); },
     438        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestCEReactions = WTFMove(space); },
     439        [] (auto& spaces) { return spaces.m_subspaceForTestCEReactions.get(); },
     440        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestCEReactions = WTFMove(space); },
     441        nullptr
     442    );
    466443}
    467444
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp

    r290155 r290188  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
    26 #include "DOMClientIsoSubspaces.h"
    27 #include "DOMIsoSubspaces.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "JSDOMAttribute.h"
    2929#include "JSDOMBinding.h"
     
    260260JSC::GCClient::IsoSubspace* JSTestCEReactionsStringifier::subspaceForImpl(JSC::VM& vm)
    261261{
    262     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestCEReactionsStringifier.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);
    280 IGNORE_WARNINGS_BEGIN("unreachable-code")
    281 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    286 IGNORE_WARNINGS_END
    287 IGNORE_WARNINGS_END
    288     }
    289 
    290     clientSpaces.m_clientSubspaceForTestCEReactionsStringifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    291     return clientSpaces.m_clientSubspaceForTestCEReactionsStringifier.get();
     262    return subspaceForImpl<JSTestCEReactionsStringifier, UseCustomHeapCellType::No>(vm,
     263        [] (auto& spaces) { return spaces.m_clientSubspaceForTestCEReactionsStringifier.get(); },
     264        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestCEReactionsStringifier = WTFMove(space); },
     265        [] (auto& spaces) { return spaces.m_subspaceForTestCEReactionsStringifier.get(); },
     266        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestCEReactionsStringifier = WTFMove(space); },
     267        nullptr
     268    );
    292269}
    293270
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAttribute.h"
     
    509509JSC::GCClient::IsoSubspace* JSTestCallTracer::subspaceForImpl(JSC::VM& vm)
    510510{
    511     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestCallTracer.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);
    529 IGNORE_WARNINGS_BEGIN("unreachable-code")
    530 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    535 IGNORE_WARNINGS_END
    536 IGNORE_WARNINGS_END
    537     }
    538 
    539     clientSpaces.m_clientSubspaceForTestCallTracer = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    540     return clientSpaces.m_clientSubspaceForTestCallTracer.get();
     511    return subspaceForImpl<JSTestCallTracer, UseCustomHeapCellType::No>(vm,
     512        [] (auto& spaces) { return spaces.m_clientSubspaceForTestCallTracer.get(); },
     513        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestCallTracer = WTFMove(space); },
     514        [] (auto& spaces) { return spaces.m_subspaceForTestCallTracer.get(); },
     515        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestCallTracer = WTFMove(space); },
     516        nullptr
     517    );
    541518}
    542519
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMBuiltinConstructor.h"
     
    172172JSC::GCClient::IsoSubspace* JSTestClassWithJSBuiltinConstructor::subspaceForImpl(JSC::VM& vm)
    173173{
    174     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestClassWithJSBuiltinConstructor.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);
    192 IGNORE_WARNINGS_BEGIN("unreachable-code")
    193 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    198 IGNORE_WARNINGS_END
    199 IGNORE_WARNINGS_END
    200     }
    201 
    202     clientSpaces.m_clientSubspaceForTestClassWithJSBuiltinConstructor = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    203     return clientSpaces.m_clientSubspaceForTestClassWithJSBuiltinConstructor.get();
     174    return subspaceForImpl<JSTestClassWithJSBuiltinConstructor, UseCustomHeapCellType::No>(vm,
     175        [] (auto& spaces) { return spaces.m_clientSubspaceForTestClassWithJSBuiltinConstructor.get(); },
     176        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestClassWithJSBuiltinConstructor = WTFMove(space); },
     177        [] (auto& spaces) { return spaces.m_subspaceForTestClassWithJSBuiltinConstructor.get(); },
     178        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestClassWithJSBuiltinConstructor = WTFMove(space); },
     179        nullptr
     180    );
    204181}
    205182
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    785785JSC::GCClient::IsoSubspace* JSTestConditionalIncludes::subspaceForImpl(JSC::VM& vm)
    786786{
    787     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestConditionalIncludes.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);
    805 IGNORE_WARNINGS_BEGIN("unreachable-code")
    806 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    811 IGNORE_WARNINGS_END
    812 IGNORE_WARNINGS_END
    813     }
    814 
    815     clientSpaces.m_clientSubspaceForTestConditionalIncludes = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    816     return clientSpaces.m_clientSubspaceForTestConditionalIncludes.get();
     787    return subspaceForImpl<JSTestConditionalIncludes, UseCustomHeapCellType::No>(vm,
     788        [] (auto& spaces) { return spaces.m_clientSubspaceForTestConditionalIncludes.get(); },
     789        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestConditionalIncludes = WTFMove(space); },
     790        [] (auto& spaces) { return spaces.m_subspaceForTestConditionalIncludes.get(); },
     791        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestConditionalIncludes = WTFMove(space); },
     792        nullptr
     793    );
    817794}
    818795
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "DOMPromiseProxy.h"
    2826#include "Document.h"
     27#include "ExtendedDOMClientIsoSubspaces.h"
     28#include "ExtendedDOMIsoSubspaces.h"
    2929#include "JSDOMAttribute.h"
    3030#include "JSDOMBinding.h"
     
    607607JSC::GCClient::IsoSubspace* JSTestConditionallyReadWrite::subspaceForImpl(JSC::VM& vm)
    608608{
    609     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestConditionallyReadWrite.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);
    627 IGNORE_WARNINGS_BEGIN("unreachable-code")
    628 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    633 IGNORE_WARNINGS_END
    634 IGNORE_WARNINGS_END
    635     }
    636 
    637     clientSpaces.m_clientSubspaceForTestConditionallyReadWrite = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    638     return clientSpaces.m_clientSubspaceForTestConditionallyReadWrite.get();
     609    return subspaceForImpl<JSTestConditionallyReadWrite, UseCustomHeapCellType::No>(vm,
     610        [] (auto& spaces) { return spaces.m_clientSubspaceForTestConditionallyReadWrite.get(); },
     611        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestConditionallyReadWrite = WTFMove(space); },
     612        [] (auto& spaces) { return spaces.m_subspaceForTestConditionallyReadWrite.get(); },
     613        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestConditionallyReadWrite = WTFMove(space); },
     614        nullptr
     615    );
    639616}
    640617
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "DOMJITAbstractHeapRepository.h"
    2826#include "DOMJITIDLConvert.h"
    2927#include "DOMJITIDLType.h"
    3028#include "DOMJITIDLTypeFilter.h"
     29#include "ExtendedDOMClientIsoSubspaces.h"
     30#include "ExtendedDOMIsoSubspaces.h"
    3131#include "JSDOMAttribute.h"
    3232#include "JSDOMBinding.h"
     
    12481248JSC::GCClient::IsoSubspace* JSTestDOMJIT::subspaceForImpl(JSC::VM& vm)
    12491249{
    1250     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDOMJIT.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);
    1268 IGNORE_WARNINGS_BEGIN("unreachable-code")
    1269 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    1274 IGNORE_WARNINGS_END
    1275 IGNORE_WARNINGS_END
    1276     }
    1277 
    1278     clientSpaces.m_clientSubspaceForTestDOMJIT = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    1279     return clientSpaces.m_clientSubspaceForTestDOMJIT.get();
     1250    return subspaceForImpl<JSTestDOMJIT, UseCustomHeapCellType::No>(vm,
     1251        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDOMJIT.get(); },
     1252        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDOMJIT = WTFMove(space); },
     1253        [] (auto& spaces) { return spaces.m_subspaceForTestDOMJIT.get(); },
     1254        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDOMJIT = WTFMove(space); },
     1255        nullptr
     1256    );
    12801257}
    12811258
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "EventNames.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "JSDOMAttribute.h"
    2929#include "JSDOMBinding.h"
     
    804804JSC::GCClient::IsoSubspace* JSTestDefaultToJSON::subspaceForImpl(JSC::VM& vm)
    805805{
    806     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDefaultToJSON.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);
    824 IGNORE_WARNINGS_BEGIN("unreachable-code")
    825 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    830 IGNORE_WARNINGS_END
    831 IGNORE_WARNINGS_END
    832     }
    833 
    834     clientSpaces.m_clientSubspaceForTestDefaultToJSON = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    835     return clientSpaces.m_clientSubspaceForTestDefaultToJSON.get();
     806    return subspaceForImpl<JSTestDefaultToJSON, UseCustomHeapCellType::No>(vm,
     807        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDefaultToJSON.get(); },
     808        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDefaultToJSON = WTFMove(space); },
     809        [] (auto& spaces) { return spaces.m_subspaceForTestDefaultToJSON.get(); },
     810        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDefaultToJSON = WTFMove(space); },
     811        nullptr
     812    );
    836813}
    837814
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    266266JSC::GCClient::IsoSubspace* JSTestDefaultToJSONFilteredByExposed::subspaceForImpl(JSC::VM& vm)
    267267{
    268     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDefaultToJSONFilteredByExposed.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);
    286 IGNORE_WARNINGS_BEGIN("unreachable-code")
    287 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    292 IGNORE_WARNINGS_END
    293 IGNORE_WARNINGS_END
    294     }
    295 
    296     clientSpaces.m_clientSubspaceForTestDefaultToJSONFilteredByExposed = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    297     return clientSpaces.m_clientSubspaceForTestDefaultToJSONFilteredByExposed.get();
     268    return subspaceForImpl<JSTestDefaultToJSONFilteredByExposed, UseCustomHeapCellType::No>(vm,
     269        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDefaultToJSONFilteredByExposed.get(); },
     270        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDefaultToJSONFilteredByExposed = WTFMove(space); },
     271        [] (auto& spaces) { return spaces.m_subspaceForTestDefaultToJSONFilteredByExposed.get(); },
     272        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDefaultToJSONFilteredByExposed = WTFMove(space); },
     273        nullptr
     274    );
    298275}
    299276
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    158158JSC::GCClient::IsoSubspace* JSTestDefaultToJSONIndirectInheritance::subspaceForImpl(JSC::VM& vm)
    159159{
    160     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDefaultToJSONIndirectInheritance.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);
    178 IGNORE_WARNINGS_BEGIN("unreachable-code")
    179 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    184 IGNORE_WARNINGS_END
    185 IGNORE_WARNINGS_END
    186     }
    187 
    188     clientSpaces.m_clientSubspaceForTestDefaultToJSONIndirectInheritance = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    189     return clientSpaces.m_clientSubspaceForTestDefaultToJSONIndirectInheritance.get();
     160    return subspaceForImpl<JSTestDefaultToJSONIndirectInheritance, UseCustomHeapCellType::No>(vm,
     161        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDefaultToJSONIndirectInheritance.get(); },
     162        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDefaultToJSONIndirectInheritance = WTFMove(space); },
     163        [] (auto& spaces) { return spaces.m_subspaceForTestDefaultToJSONIndirectInheritance.get(); },
     164        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDefaultToJSONIndirectInheritance = WTFMove(space); },
     165        nullptr
     166    );
    190167}
    191168
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    288288JSC::GCClient::IsoSubspace* JSTestDefaultToJSONInherit::subspaceForImpl(JSC::VM& vm)
    289289{
    290     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDefaultToJSONInherit.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);
    308 IGNORE_WARNINGS_BEGIN("unreachable-code")
    309 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    314 IGNORE_WARNINGS_END
    315 IGNORE_WARNINGS_END
    316     }
    317 
    318     clientSpaces.m_clientSubspaceForTestDefaultToJSONInherit = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    319     return clientSpaces.m_clientSubspaceForTestDefaultToJSONInherit.get();
     290    return subspaceForImpl<JSTestDefaultToJSONInherit, UseCustomHeapCellType::No>(vm,
     291        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDefaultToJSONInherit.get(); },
     292        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDefaultToJSONInherit = WTFMove(space); },
     293        [] (auto& spaces) { return spaces.m_subspaceForTestDefaultToJSONInherit.get(); },
     294        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDefaultToJSONInherit = WTFMove(space); },
     295        nullptr
     296    );
    320297}
    321298
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    328328JSC::GCClient::IsoSubspace* JSTestDefaultToJSONInheritFinal::subspaceForImpl(JSC::VM& vm)
    329329{
    330     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDefaultToJSONInheritFinal.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);
    348 IGNORE_WARNINGS_BEGIN("unreachable-code")
    349 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    354 IGNORE_WARNINGS_END
    355 IGNORE_WARNINGS_END
    356     }
    357 
    358     clientSpaces.m_clientSubspaceForTestDefaultToJSONInheritFinal = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    359     return clientSpaces.m_clientSubspaceForTestDefaultToJSONInheritFinal.get();
     330    return subspaceForImpl<JSTestDefaultToJSONInheritFinal, UseCustomHeapCellType::No>(vm,
     331        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDefaultToJSONInheritFinal.get(); },
     332        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDefaultToJSONInheritFinal = WTFMove(space); },
     333        [] (auto& spaces) { return spaces.m_subspaceForTestDefaultToJSONInheritFinal.get(); },
     334        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDefaultToJSONInheritFinal = WTFMove(space); },
     335        nullptr
     336    );
    360337}
    361338
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp

    r290155 r290188  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
    26 #include "DOMClientIsoSubspaces.h"
    27 #include "DOMIsoSubspaces.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "JSDOMAttribute.h"
    2929#include "JSDOMBinding.h"
     
    242242JSC::GCClient::IsoSubspace* JSTestDelegateToSharedSyntheticAttribute::subspaceForImpl(JSC::VM& vm)
    243243{
    244     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDelegateToSharedSyntheticAttribute.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);
    262 IGNORE_WARNINGS_BEGIN("unreachable-code")
    263 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    268 IGNORE_WARNINGS_END
    269 IGNORE_WARNINGS_END
    270     }
    271 
    272     clientSpaces.m_clientSubspaceForTestDelegateToSharedSyntheticAttribute = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    273     return clientSpaces.m_clientSubspaceForTestDelegateToSharedSyntheticAttribute.get();
     244    return subspaceForImpl<JSTestDelegateToSharedSyntheticAttribute, UseCustomHeapCellType::No>(vm,
     245        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDelegateToSharedSyntheticAttribute.get(); },
     246        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDelegateToSharedSyntheticAttribute = WTFMove(space); },
     247        [] (auto& spaces) { return spaces.m_subspaceForTestDelegateToSharedSyntheticAttribute.get(); },
     248        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDelegateToSharedSyntheticAttribute = WTFMove(space); },
     249        nullptr
     250    );
    274251}
    275252
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp

    r290155 r290188  
    2424#include "ActiveDOMObject.h"
    2525#include "CustomElementReactionQueue.h"
    26 #include "DOMClientIsoSubspaces.h"
    27 #include "DOMIsoSubspaces.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "IDLTypes.h"
    2929#include "JSDOMAttribute.h"
     
    316316JSC::GCClient::IsoSubspace* JSTestDomainSecurity::subspaceForImpl(JSC::VM& vm)
    317317{
    318     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestDomainSecurity.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);
    336 IGNORE_WARNINGS_BEGIN("unreachable-code")
    337 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    342 IGNORE_WARNINGS_END
    343 IGNORE_WARNINGS_END
    344     }
    345 
    346     clientSpaces.m_clientSubspaceForTestDomainSecurity = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    347     return clientSpaces.m_clientSubspaceForTestDomainSecurity.get();
     318    return subspaceForImpl<JSTestDomainSecurity, UseCustomHeapCellType::No>(vm,
     319        [] (auto& spaces) { return spaces.m_clientSubspaceForTestDomainSecurity.get(); },
     320        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestDomainSecurity = WTFMove(space); },
     321        [] (auto& spaces) { return spaces.m_subspaceForTestDomainSecurity.get(); },
     322        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestDomainSecurity = WTFMove(space); },
     323        nullptr
     324    );
    348325}
    349326
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    455455JSC::GCClient::IsoSubspace* JSTestEnabledBySetting::subspaceForImpl(JSC::VM& vm)
    456456{
    457     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestEnabledBySetting.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);
    475 IGNORE_WARNINGS_BEGIN("unreachable-code")
    476 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    481 IGNORE_WARNINGS_END
    482 IGNORE_WARNINGS_END
    483     }
    484 
    485     clientSpaces.m_clientSubspaceForTestEnabledBySetting = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    486     return clientSpaces.m_clientSubspaceForTestEnabledBySetting.get();
     457    return subspaceForImpl<JSTestEnabledBySetting, UseCustomHeapCellType::No>(vm,
     458        [] (auto& spaces) { return spaces.m_clientSubspaceForTestEnabledBySetting.get(); },
     459        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestEnabledBySetting = WTFMove(space); },
     460        [] (auto& spaces) { return spaces.m_subspaceForTestEnabledBySetting.get(); },
     461        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestEnabledBySetting = WTFMove(space); },
     462        nullptr
     463    );
    487464}
    488465
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    182182JSC::GCClient::IsoSubspace* JSTestEnabledForContext::subspaceForImpl(JSC::VM& vm)
    183183{
    184     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestEnabledForContext.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);
    202 IGNORE_WARNINGS_BEGIN("unreachable-code")
    203 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    208 IGNORE_WARNINGS_END
    209 IGNORE_WARNINGS_END
    210     }
    211 
    212     clientSpaces.m_clientSubspaceForTestEnabledForContext = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    213     return clientSpaces.m_clientSubspaceForTestEnabledForContext.get();
     184    return subspaceForImpl<JSTestEnabledForContext, UseCustomHeapCellType::No>(vm,
     185        [] (auto& spaces) { return spaces.m_clientSubspaceForTestEnabledForContext.get(); },
     186        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestEnabledForContext = WTFMove(space); },
     187        [] (auto& spaces) { return spaces.m_subspaceForTestEnabledForContext.get(); },
     188        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestEnabledForContext = WTFMove(space); },
     189        nullptr
     190    );
    214191}
    215192
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    319319JSC::GCClient::IsoSubspace* JSTestEventConstructor::subspaceForImpl(JSC::VM& vm)
    320320{
    321     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestEventConstructor.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);
    339 IGNORE_WARNINGS_BEGIN("unreachable-code")
    340 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    345 IGNORE_WARNINGS_END
    346 IGNORE_WARNINGS_END
    347     }
    348 
    349     clientSpaces.m_clientSubspaceForTestEventConstructor = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    350     return clientSpaces.m_clientSubspaceForTestEventConstructor.get();
     321    return subspaceForImpl<JSTestEventConstructor, UseCustomHeapCellType::No>(vm,
     322        [] (auto& spaces) { return spaces.m_clientSubspaceForTestEventConstructor.get(); },
     323        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestEventConstructor = WTFMove(space); },
     324        [] (auto& spaces) { return spaces.m_subspaceForTestEventConstructor.get(); },
     325        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestEventConstructor = WTFMove(space); },
     326        nullptr
     327    );
    351328}
    352329
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    258258JSC::GCClient::IsoSubspace* JSTestEventTarget::subspaceForImpl(JSC::VM& vm)
    259259{
    260     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestEventTarget.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);
    278 IGNORE_WARNINGS_BEGIN("unreachable-code")
    279 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    284 IGNORE_WARNINGS_END
    285 IGNORE_WARNINGS_END
    286     }
    287 
    288     clientSpaces.m_clientSubspaceForTestEventTarget = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    289     return clientSpaces.m_clientSubspaceForTestEventTarget.get();
     260    return subspaceForImpl<JSTestEventTarget, UseCustomHeapCellType::No>(vm,
     261        [] (auto& spaces) { return spaces.m_clientSubspaceForTestEventTarget.get(); },
     262        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestEventTarget = WTFMove(space); },
     263        [] (auto& spaces) { return spaces.m_subspaceForTestEventTarget.get(); },
     264        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestEventTarget = WTFMove(space); },
     265        nullptr
     266    );
    290267}
    291268
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    183183JSC::GCClient::IsoSubspace* JSTestException::subspaceForImpl(JSC::VM& vm)
    184184{
    185     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestException.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);
    203 IGNORE_WARNINGS_BEGIN("unreachable-code")
    204 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    209 IGNORE_WARNINGS_END
    210 IGNORE_WARNINGS_END
    211     }
    212 
    213     clientSpaces.m_clientSubspaceForTestException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    214     return clientSpaces.m_clientSubspaceForTestException.get();
     185    return subspaceForImpl<JSTestException, UseCustomHeapCellType::No>(vm,
     186        [] (auto& spaces) { return spaces.m_clientSubspaceForTestException.get(); },
     187        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestException = WTFMove(space); },
     188        [] (auto& spaces) { return spaces.m_subspaceForTestException.get(); },
     189        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestException = WTFMove(space); },
     190        nullptr
     191    );
    215192}
    216193
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    183183JSC::GCClient::IsoSubspace* JSTestGenerateAddOpaqueRoot::subspaceForImpl(JSC::VM& vm)
    184184{
    185     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestGenerateAddOpaqueRoot.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);
    203 IGNORE_WARNINGS_BEGIN("unreachable-code")
    204 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    209 IGNORE_WARNINGS_END
    210 IGNORE_WARNINGS_END
    211     }
    212 
    213     clientSpaces.m_clientSubspaceForTestGenerateAddOpaqueRoot = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    214     return clientSpaces.m_clientSubspaceForTestGenerateAddOpaqueRoot.get();
     185    return subspaceForImpl<JSTestGenerateAddOpaqueRoot, UseCustomHeapCellType::No>(vm,
     186        [] (auto& spaces) { return spaces.m_clientSubspaceForTestGenerateAddOpaqueRoot.get(); },
     187        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestGenerateAddOpaqueRoot = WTFMove(space); },
     188        [] (auto& spaces) { return spaces.m_subspaceForTestGenerateAddOpaqueRoot.get(); },
     189        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestGenerateAddOpaqueRoot = WTFMove(space); },
     190        nullptr
     191    );
    215192}
    216193
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    193193JSC::GCClient::IsoSubspace* JSTestGenerateIsReachable::subspaceForImpl(JSC::VM& vm)
    194194{
    195     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestGenerateIsReachable.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);
    213 IGNORE_WARNINGS_BEGIN("unreachable-code")
    214 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    219 IGNORE_WARNINGS_END
    220 IGNORE_WARNINGS_END
    221     }
    222 
    223     clientSpaces.m_clientSubspaceForTestGenerateIsReachable = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    224     return clientSpaces.m_clientSubspaceForTestGenerateIsReachable.get();
     195    return subspaceForImpl<JSTestGenerateIsReachable, UseCustomHeapCellType::No>(vm,
     196        [] (auto& spaces) { return spaces.m_clientSubspaceForTestGenerateIsReachable.get(); },
     197        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestGenerateIsReachable = WTFMove(space); },
     198        [] (auto& spaces) { return spaces.m_subspaceForTestGenerateIsReachable.get(); },
     199        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestGenerateIsReachable = WTFMove(space); },
     200        nullptr
     201    );
    225202}
    226203
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "DOMPromiseProxy.h"
    2826#include "DOMWrapperWorld.h"
     27#include "ExtendedDOMClientIsoSubspaces.h"
     28#include "ExtendedDOMIsoSubspaces.h"
    2929#include "IDLTypes.h"
    3030#include "JSDOMAttribute.h"
     
    18261826JSC::GCClient::IsoSubspace* JSTestGlobalObject::subspaceForImpl(JSC::VM& vm)
    18271827{
    1828     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestGlobalObject.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);
    1842 IGNORE_WARNINGS_BEGIN("unreachable-code")
    1843 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    1848 IGNORE_WARNINGS_END
    1849 IGNORE_WARNINGS_END
    1850     }
    1851 
    1852     clientSpaces.m_clientSubspaceForTestGlobalObject = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    1853     return clientSpaces.m_clientSubspaceForTestGlobalObject.get();
     1828    return subspaceForImpl<JSTestGlobalObject, UseCustomHeapCellType::Yes>(vm,
     1829        [] (auto& spaces) { return spaces.m_clientSubspaceForTestGlobalObject.get(); },
     1830        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestGlobalObject = WTFMove(space); },
     1831        [] (auto& spaces) { return spaces.m_subspaceForTestGlobalObject.get(); },
     1832        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestGlobalObject = WTFMove(space); },
     1833        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSTestGlobalObject; }
     1834    );
    18541835}
    18551836
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    272272JSC::GCClient::IsoSubspace* JSTestIndexedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    273273{
    274     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestIndexedSetterNoIdentifier.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);
    292 IGNORE_WARNINGS_BEGIN("unreachable-code")
    293 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    298 IGNORE_WARNINGS_END
    299 IGNORE_WARNINGS_END
    300     }
    301 
    302     clientSpaces.m_clientSubspaceForTestIndexedSetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    303     return clientSpaces.m_clientSubspaceForTestIndexedSetterNoIdentifier.get();
     274    return subspaceForImpl<JSTestIndexedSetterNoIdentifier, UseCustomHeapCellType::No>(vm,
     275        [] (auto& spaces) { return spaces.m_clientSubspaceForTestIndexedSetterNoIdentifier.get(); },
     276        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestIndexedSetterNoIdentifier = WTFMove(space); },
     277        [] (auto& spaces) { return spaces.m_subspaceForTestIndexedSetterNoIdentifier.get(); },
     278        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestIndexedSetterNoIdentifier = WTFMove(space); },
     279        nullptr
     280    );
    304281}
    305282
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    272272JSC::GCClient::IsoSubspace* JSTestIndexedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
    273273{
    274     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestIndexedSetterThrowingException.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);
    292 IGNORE_WARNINGS_BEGIN("unreachable-code")
    293 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    298 IGNORE_WARNINGS_END
    299 IGNORE_WARNINGS_END
    300     }
    301 
    302     clientSpaces.m_clientSubspaceForTestIndexedSetterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    303     return clientSpaces.m_clientSubspaceForTestIndexedSetterThrowingException.get();
     274    return subspaceForImpl<JSTestIndexedSetterThrowingException, UseCustomHeapCellType::No>(vm,
     275        [] (auto& spaces) { return spaces.m_clientSubspaceForTestIndexedSetterThrowingException.get(); },
     276        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestIndexedSetterThrowingException = WTFMove(space); },
     277        [] (auto& spaces) { return spaces.m_subspaceForTestIndexedSetterThrowingException.get(); },
     278        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestIndexedSetterThrowingException = WTFMove(space); },
     279        nullptr
     280    );
    304281}
    305282
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMBinding.h"
     
    304304JSC::GCClient::IsoSubspace* JSTestIndexedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    305305{
    306     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestIndexedSetterWithIdentifier.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);
    324 IGNORE_WARNINGS_BEGIN("unreachable-code")
    325 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    330 IGNORE_WARNINGS_END
    331 IGNORE_WARNINGS_END
    332     }
    333 
    334     clientSpaces.m_clientSubspaceForTestIndexedSetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    335     return clientSpaces.m_clientSubspaceForTestIndexedSetterWithIdentifier.get();
     306    return subspaceForImpl<JSTestIndexedSetterWithIdentifier, UseCustomHeapCellType::No>(vm,
     307        [] (auto& spaces) { return spaces.m_clientSubspaceForTestIndexedSetterWithIdentifier.get(); },
     308        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestIndexedSetterWithIdentifier = WTFMove(space); },
     309        [] (auto& spaces) { return spaces.m_subspaceForTestIndexedSetterWithIdentifier.get(); },
     310        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestIndexedSetterWithIdentifier = WTFMove(space); },
     311        nullptr
     312    );
    336313}
    337314
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp

    r290155 r290188  
    2626
    2727#include "ActiveDOMObject.h"
    28 #include "DOMClientIsoSubspaces.h"
    29 #include "DOMIsoSubspaces.h"
    3028#include "ElementInlines.h"
     29#include "ExtendedDOMClientIsoSubspaces.h"
     30#include "ExtendedDOMIsoSubspaces.h"
    3131#include "HTMLNames.h"
    3232#include "JSDOMAttribute.h"
     
    11021102        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    11031103            return nullptr;
    1104         auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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);
    1122 IGNORE_WARNINGS_BEGIN("unreachable-code")
    1123 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    1128 IGNORE_WARNINGS_END
    1129 IGNORE_WARNINGS_END
    1130         }
    1131 
    1132         clientSpaces.m_clientSubspaceForTestInterfaceIterator = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    1133         return clientSpaces.m_clientSubspaceForTestInterfaceIterator.get();
     1104        return subspaceForImpl<TestInterfaceIterator, UseCustomHeapCellType::No>(vm,
     1105            [] (auto& spaces) { return spaces.m_clientSubspaceForTestInterfaceIterator.get(); },
     1106            [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestInterfaceIterator = WTFMove(space); },
     1107            [] (auto& spaces) { return spaces.m_subspaceForTestInterfaceIterator.get(); },
     1108            [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestInterfaceIterator = WTFMove(space); }
     1109        );
    11341110    }
    11351111
     
    12051181JSC::GCClient::IsoSubspace* JSTestInterface::subspaceForImpl(JSC::VM& vm)
    12061182{
    1207     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestInterface.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);
    1225 IGNORE_WARNINGS_BEGIN("unreachable-code")
    1226 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    1231 IGNORE_WARNINGS_END
    1232 IGNORE_WARNINGS_END
    1233     }
    1234 
    1235     clientSpaces.m_clientSubspaceForTestInterface = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    1236     return clientSpaces.m_clientSubspaceForTestInterface.get();
     1183    return subspaceForImpl<JSTestInterface, UseCustomHeapCellType::No>(vm,
     1184        [] (auto& spaces) { return spaces.m_clientSubspaceForTestInterface.get(); },
     1185        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestInterface = WTFMove(space); },
     1186        [] (auto& spaces) { return spaces.m_subspaceForTestInterface.get(); },
     1187        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestInterface = WTFMove(space); },
     1188        nullptr
     1189    );
    12371190}
    12381191
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    183183JSC::GCClient::IsoSubspace* JSTestInterfaceLeadingUnderscore::subspaceForImpl(JSC::VM& vm)
    184184{
    185     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestInterfaceLeadingUnderscore.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);
    203 IGNORE_WARNINGS_BEGIN("unreachable-code")
    204 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    209 IGNORE_WARNINGS_END
    210 IGNORE_WARNINGS_END
    211     }
    212 
    213     clientSpaces.m_clientSubspaceForTestInterfaceLeadingUnderscore = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    214     return clientSpaces.m_clientSubspaceForTestInterfaceLeadingUnderscore.get();
     185    return subspaceForImpl<JSTestInterfaceLeadingUnderscore, UseCustomHeapCellType::No>(vm,
     186        [] (auto& spaces) { return spaces.m_clientSubspaceForTestInterfaceLeadingUnderscore.get(); },
     187        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestInterfaceLeadingUnderscore = WTFMove(space); },
     188        [] (auto& spaces) { return spaces.m_subspaceForTestInterfaceLeadingUnderscore.get(); },
     189        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestInterfaceLeadingUnderscore = WTFMove(space); },
     190        nullptr
     191    );
    215192}
    216193
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    197197        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    198198            return nullptr;
    199         auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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);
    217 IGNORE_WARNINGS_BEGIN("unreachable-code")
    218 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    223 IGNORE_WARNINGS_END
    224 IGNORE_WARNINGS_END
    225         }
    226 
    227         clientSpaces.m_clientSubspaceForTestIterableIterator = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    228         return clientSpaces.m_clientSubspaceForTestIterableIterator.get();
     199        return subspaceForImpl<TestIterableIterator, UseCustomHeapCellType::No>(vm,
     200            [] (auto& spaces) { return spaces.m_clientSubspaceForTestIterableIterator.get(); },
     201            [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestIterableIterator = WTFMove(space); },
     202            [] (auto& spaces) { return spaces.m_subspaceForTestIterableIterator.get(); },
     203            [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestIterableIterator = WTFMove(space); }
     204        );
    229205    }
    230206
     
    300276JSC::GCClient::IsoSubspace* JSTestIterable::subspaceForImpl(JSC::VM& vm)
    301277{
    302     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestIterable.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);
    320 IGNORE_WARNINGS_BEGIN("unreachable-code")
    321 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    326 IGNORE_WARNINGS_END
    327 IGNORE_WARNINGS_END
    328     }
    329 
    330     clientSpaces.m_clientSubspaceForTestIterable = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    331     return clientSpaces.m_clientSubspaceForTestIterable.get();
     278    return subspaceForImpl<JSTestIterable, UseCustomHeapCellType::No>(vm,
     279        [] (auto& spaces) { return spaces.m_clientSubspaceForTestIterable.get(); },
     280        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestIterable = WTFMove(space); },
     281        [] (auto& spaces) { return spaces.m_subspaceForTestIterable.get(); },
     282        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestIterable = WTFMove(space); },
     283        nullptr
     284    );
    332285}
    333286
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp

    r290155 r290188  
    2222#include "JSTestJSBuiltinConstructor.h"
    2323
    24 #include "DOMClientIsoSubspaces.h"
    25 #include "DOMIsoSubspaces.h"
     24#include "ExtendedDOMClientIsoSubspaces.h"
     25#include "ExtendedDOMIsoSubspaces.h"
    2626#include "JSDOMAttribute.h"
    2727#include "JSDOMBinding.h"
     
    226226JSC::GCClient::IsoSubspace* JSTestJSBuiltinConstructor::subspaceForImpl(JSC::VM& vm)
    227227{
    228     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestJSBuiltinConstructor.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);
    246 IGNORE_WARNINGS_BEGIN("unreachable-code")
    247 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    252 IGNORE_WARNINGS_END
    253 IGNORE_WARNINGS_END
    254     }
    255 
    256     clientSpaces.m_clientSubspaceForTestJSBuiltinConstructor = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    257     return clientSpaces.m_clientSubspaceForTestJSBuiltinConstructor.get();
    258 }
    259 
    260 
    261 }
     228    return subspaceForImpl<JSTestJSBuiltinConstructor, UseCustomHeapCellType::No>(vm,
     229        [] (auto& spaces) { return spaces.m_clientSubspaceForTestJSBuiltinConstructor.get(); },
     230        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestJSBuiltinConstructor = WTFMove(space); },
     231        [] (auto& spaces) { return spaces.m_subspaceForTestJSBuiltinConstructor.get(); },
     232        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestJSBuiltinConstructor = WTFMove(space); },
     233        nullptr
     234    );
     235}
     236
     237
     238}
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "Document.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "JSDOMBinding.h"
    2929#include "JSDOMConstructorNotConstructable.h"
     
    228228JSC::GCClient::IsoSubspace* JSTestLegacyFactoryFunction::subspaceForImpl(JSC::VM& vm)
    229229{
    230     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestLegacyFactoryFunction.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);
    248 IGNORE_WARNINGS_BEGIN("unreachable-code")
    249 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    254 IGNORE_WARNINGS_END
    255 IGNORE_WARNINGS_END
    256     }
    257 
    258     clientSpaces.m_clientSubspaceForTestLegacyFactoryFunction = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    259     return clientSpaces.m_clientSubspaceForTestLegacyFactoryFunction.get();
     230    return subspaceForImpl<JSTestLegacyFactoryFunction, UseCustomHeapCellType::No>(vm,
     231        [] (auto& spaces) { return spaces.m_clientSubspaceForTestLegacyFactoryFunction.get(); },
     232        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestLegacyFactoryFunction = WTFMove(space); },
     233        [] (auto& spaces) { return spaces.m_subspaceForTestLegacyFactoryFunction.get(); },
     234        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestLegacyFactoryFunction = WTFMove(space); },
     235        nullptr
     236    );
    260237}
    261238
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp

    r290155 r290188  
    2626
    2727#include "ActiveDOMObject.h"
    28 #include "DOMClientIsoSubspaces.h"
    29 #include "DOMIsoSubspaces.h"
     28#include "ExtendedDOMClientIsoSubspaces.h"
     29#include "ExtendedDOMIsoSubspaces.h"
    3030#include "IDLTypes.h"
    3131#include "JSDOMAttribute.h"
     
    331331JSC::GCClient::IsoSubspace* JSTestLegacyNoInterfaceObject::subspaceForImpl(JSC::VM& vm)
    332332{
    333     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestLegacyNoInterfaceObject.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);
    351 IGNORE_WARNINGS_BEGIN("unreachable-code")
    352 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    357 IGNORE_WARNINGS_END
    358 IGNORE_WARNINGS_END
    359     }
    360 
    361     clientSpaces.m_clientSubspaceForTestLegacyNoInterfaceObject = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    362     return clientSpaces.m_clientSubspaceForTestLegacyNoInterfaceObject.get();
     333    return subspaceForImpl<JSTestLegacyNoInterfaceObject, UseCustomHeapCellType::No>(vm,
     334        [] (auto& spaces) { return spaces.m_clientSubspaceForTestLegacyNoInterfaceObject.get(); },
     335        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestLegacyNoInterfaceObject = WTFMove(space); },
     336        [] (auto& spaces) { return spaces.m_subspaceForTestLegacyNoInterfaceObject.get(); },
     337        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestLegacyNoInterfaceObject = WTFMove(space); },
     338        nullptr
     339    );
    363340}
    364341
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    245245JSC::GCClient::IsoSubspace* JSTestLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
    246246{
    247     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestLegacyOverrideBuiltIns.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);
    265 IGNORE_WARNINGS_BEGIN("unreachable-code")
    266 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    271 IGNORE_WARNINGS_END
    272 IGNORE_WARNINGS_END
    273     }
    274 
    275     clientSpaces.m_clientSubspaceForTestLegacyOverrideBuiltIns = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    276     return clientSpaces.m_clientSubspaceForTestLegacyOverrideBuiltIns.get();
     247    return subspaceForImpl<JSTestLegacyOverrideBuiltIns, UseCustomHeapCellType::No>(vm,
     248        [] (auto& spaces) { return spaces.m_clientSubspaceForTestLegacyOverrideBuiltIns.get(); },
     249        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestLegacyOverrideBuiltIns = WTFMove(space); },
     250        [] (auto& spaces) { return spaces.m_subspaceForTestLegacyOverrideBuiltIns.get(); },
     251        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestLegacyOverrideBuiltIns = WTFMove(space); },
     252        nullptr
     253    );
    277254}
    278255
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    362362JSC::GCClient::IsoSubspace* JSTestMapLike::subspaceForImpl(JSC::VM& vm)
    363363{
    364     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestMapLike.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);
    382 IGNORE_WARNINGS_BEGIN("unreachable-code")
    383 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    388 IGNORE_WARNINGS_END
    389 IGNORE_WARNINGS_END
    390     }
    391 
    392     clientSpaces.m_clientSubspaceForTestMapLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    393     return clientSpaces.m_clientSubspaceForTestMapLike.get();
     364    return subspaceForImpl<JSTestMapLike, UseCustomHeapCellType::No>(vm,
     365        [] (auto& spaces) { return spaces.m_clientSubspaceForTestMapLike.get(); },
     366        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestMapLike = WTFMove(space); },
     367        [] (auto& spaces) { return spaces.m_subspaceForTestMapLike.get(); },
     368        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestMapLike = WTFMove(space); },
     369        nullptr
     370    );
    394371}
    395372
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAttribute.h"
     
    376376JSC::GCClient::IsoSubspace* JSTestMapLikeWithOverriddenOperations::subspaceForImpl(JSC::VM& vm)
    377377{
    378     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestMapLikeWithOverriddenOperations.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);
    396 IGNORE_WARNINGS_BEGIN("unreachable-code")
    397 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    402 IGNORE_WARNINGS_END
    403 IGNORE_WARNINGS_END
    404     }
    405 
    406     clientSpaces.m_clientSubspaceForTestMapLikeWithOverriddenOperations = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    407     return clientSpaces.m_clientSubspaceForTestMapLikeWithOverriddenOperations.get();
     378    return subspaceForImpl<JSTestMapLikeWithOverriddenOperations, UseCustomHeapCellType::No>(vm,
     379        [] (auto& spaces) { return spaces.m_clientSubspaceForTestMapLikeWithOverriddenOperations.get(); },
     380        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestMapLikeWithOverriddenOperations = WTFMove(space); },
     381        [] (auto& spaces) { return spaces.m_subspaceForTestMapLikeWithOverriddenOperations.get(); },
     382        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestMapLikeWithOverriddenOperations = WTFMove(space); },
     383        nullptr
     384    );
    408385}
    409386
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    340340JSC::GCClient::IsoSubspace* JSTestNamedAndIndexedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    341341{
    342     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedAndIndexedSetterNoIdentifier.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);
    360 IGNORE_WARNINGS_BEGIN("unreachable-code")
    361 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    366 IGNORE_WARNINGS_END
    367 IGNORE_WARNINGS_END
    368     }
    369 
    370     clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    371     return clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterNoIdentifier.get();
     342    return subspaceForImpl<JSTestNamedAndIndexedSetterNoIdentifier, UseCustomHeapCellType::No>(vm,
     343        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedAndIndexedSetterNoIdentifier.get(); },
     344        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedAndIndexedSetterNoIdentifier = WTFMove(space); },
     345        [] (auto& spaces) { return spaces.m_subspaceForTestNamedAndIndexedSetterNoIdentifier.get(); },
     346        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedAndIndexedSetterNoIdentifier = WTFMove(space); },
     347        nullptr
     348    );
    372349}
    373350
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    340340JSC::GCClient::IsoSubspace* JSTestNamedAndIndexedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
    341341{
    342     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedAndIndexedSetterThrowingException.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);
    360 IGNORE_WARNINGS_BEGIN("unreachable-code")
    361 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    366 IGNORE_WARNINGS_END
    367 IGNORE_WARNINGS_END
    368     }
    369 
    370     clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    371     return clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterThrowingException.get();
     342    return subspaceForImpl<JSTestNamedAndIndexedSetterThrowingException, UseCustomHeapCellType::No>(vm,
     343        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedAndIndexedSetterThrowingException.get(); },
     344        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedAndIndexedSetterThrowingException = WTFMove(space); },
     345        [] (auto& spaces) { return spaces.m_subspaceForTestNamedAndIndexedSetterThrowingException.get(); },
     346        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedAndIndexedSetterThrowingException = WTFMove(space); },
     347        nullptr
     348    );
    372349}
    373350
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAbstractOperations.h"
     
    397397JSC::GCClient::IsoSubspace* JSTestNamedAndIndexedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    398398{
    399     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedAndIndexedSetterWithIdentifier.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);
    417 IGNORE_WARNINGS_BEGIN("unreachable-code")
    418 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    423 IGNORE_WARNINGS_END
    424 IGNORE_WARNINGS_END
    425     }
    426 
    427     clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    428     return clientSpaces.m_clientSubspaceForTestNamedAndIndexedSetterWithIdentifier.get();
     399    return subspaceForImpl<JSTestNamedAndIndexedSetterWithIdentifier, UseCustomHeapCellType::No>(vm,
     400        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedAndIndexedSetterWithIdentifier.get(); },
     401        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedAndIndexedSetterWithIdentifier = WTFMove(space); },
     402        [] (auto& spaces) { return spaces.m_subspaceForTestNamedAndIndexedSetterWithIdentifier.get(); },
     403        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedAndIndexedSetterWithIdentifier = WTFMove(space); },
     404        nullptr
     405    );
    429406}
    430407
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    242242JSC::GCClient::IsoSubspace* JSTestNamedDeleterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    243243{
    244     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedDeleterNoIdentifier.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);
    262 IGNORE_WARNINGS_BEGIN("unreachable-code")
    263 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    268 IGNORE_WARNINGS_END
    269 IGNORE_WARNINGS_END
    270     }
    271 
    272     clientSpaces.m_clientSubspaceForTestNamedDeleterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    273     return clientSpaces.m_clientSubspaceForTestNamedDeleterNoIdentifier.get();
     244    return subspaceForImpl<JSTestNamedDeleterNoIdentifier, UseCustomHeapCellType::No>(vm,
     245        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedDeleterNoIdentifier.get(); },
     246        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedDeleterNoIdentifier = WTFMove(space); },
     247        [] (auto& spaces) { return spaces.m_subspaceForTestNamedDeleterNoIdentifier.get(); },
     248        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedDeleterNoIdentifier = WTFMove(space); },
     249        nullptr
     250    );
    274251}
    275252
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    242242JSC::GCClient::IsoSubspace* JSTestNamedDeleterThrowingException::subspaceForImpl(JSC::VM& vm)
    243243{
    244     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedDeleterThrowingException.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);
    262 IGNORE_WARNINGS_BEGIN("unreachable-code")
    263 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    268 IGNORE_WARNINGS_END
    269 IGNORE_WARNINGS_END
    270     }
    271 
    272     clientSpaces.m_clientSubspaceForTestNamedDeleterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    273     return clientSpaces.m_clientSubspaceForTestNamedDeleterThrowingException.get();
     244    return subspaceForImpl<JSTestNamedDeleterThrowingException, UseCustomHeapCellType::No>(vm,
     245        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedDeleterThrowingException.get(); },
     246        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedDeleterThrowingException = WTFMove(space); },
     247        [] (auto& spaces) { return spaces.m_subspaceForTestNamedDeleterThrowingException.get(); },
     248        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedDeleterThrowingException = WTFMove(space); },
     249        nullptr
     250    );
    274251}
    275252
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAbstractOperations.h"
     
    266266JSC::GCClient::IsoSubspace* JSTestNamedDeleterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    267267{
    268     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedDeleterWithIdentifier.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);
    286 IGNORE_WARNINGS_BEGIN("unreachable-code")
    287 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    292 IGNORE_WARNINGS_END
    293 IGNORE_WARNINGS_END
    294     }
    295 
    296     clientSpaces.m_clientSubspaceForTestNamedDeleterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    297     return clientSpaces.m_clientSubspaceForTestNamedDeleterWithIdentifier.get();
     268    return subspaceForImpl<JSTestNamedDeleterWithIdentifier, UseCustomHeapCellType::No>(vm,
     269        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedDeleterWithIdentifier.get(); },
     270        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedDeleterWithIdentifier = WTFMove(space); },
     271        [] (auto& spaces) { return spaces.m_subspaceForTestNamedDeleterWithIdentifier.get(); },
     272        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedDeleterWithIdentifier = WTFMove(space); },
     273        nullptr
     274    );
    298275}
    299276
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    258258JSC::GCClient::IsoSubspace* JSTestNamedDeleterWithIndexedGetter::subspaceForImpl(JSC::VM& vm)
    259259{
    260     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedDeleterWithIndexedGetter.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);
    278 IGNORE_WARNINGS_BEGIN("unreachable-code")
    279 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    284 IGNORE_WARNINGS_END
    285 IGNORE_WARNINGS_END
    286     }
    287 
    288     clientSpaces.m_clientSubspaceForTestNamedDeleterWithIndexedGetter = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    289     return clientSpaces.m_clientSubspaceForTestNamedDeleterWithIndexedGetter.get();
     260    return subspaceForImpl<JSTestNamedDeleterWithIndexedGetter, UseCustomHeapCellType::No>(vm,
     261        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedDeleterWithIndexedGetter.get(); },
     262        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedDeleterWithIndexedGetter = WTFMove(space); },
     263        [] (auto& spaces) { return spaces.m_subspaceForTestNamedDeleterWithIndexedGetter.get(); },
     264        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedDeleterWithIndexedGetter = WTFMove(space); },
     265        nullptr
     266    );
    290267}
    291268
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    216216JSC::GCClient::IsoSubspace* JSTestNamedGetterCallWith::subspaceForImpl(JSC::VM& vm)
    217217{
    218     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedGetterCallWith.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);
    236 IGNORE_WARNINGS_BEGIN("unreachable-code")
    237 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    242 IGNORE_WARNINGS_END
    243 IGNORE_WARNINGS_END
    244     }
    245 
    246     clientSpaces.m_clientSubspaceForTestNamedGetterCallWith = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    247     return clientSpaces.m_clientSubspaceForTestNamedGetterCallWith.get();
     218    return subspaceForImpl<JSTestNamedGetterCallWith, UseCustomHeapCellType::No>(vm,
     219        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedGetterCallWith.get(); },
     220        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedGetterCallWith = WTFMove(space); },
     221        [] (auto& spaces) { return spaces.m_subspaceForTestNamedGetterCallWith.get(); },
     222        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedGetterCallWith = WTFMove(space); },
     223        nullptr
     224    );
    248225}
    249226
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    216216JSC::GCClient::IsoSubspace* JSTestNamedGetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    217217{
    218     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedGetterNoIdentifier.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);
    236 IGNORE_WARNINGS_BEGIN("unreachable-code")
    237 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    242 IGNORE_WARNINGS_END
    243 IGNORE_WARNINGS_END
    244     }
    245 
    246     clientSpaces.m_clientSubspaceForTestNamedGetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    247     return clientSpaces.m_clientSubspaceForTestNamedGetterNoIdentifier.get();
     218    return subspaceForImpl<JSTestNamedGetterNoIdentifier, UseCustomHeapCellType::No>(vm,
     219        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedGetterNoIdentifier.get(); },
     220        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedGetterNoIdentifier = WTFMove(space); },
     221        [] (auto& spaces) { return spaces.m_subspaceForTestNamedGetterNoIdentifier.get(); },
     222        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedGetterNoIdentifier = WTFMove(space); },
     223        nullptr
     224    );
    248225}
    249226
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    242242JSC::GCClient::IsoSubspace* JSTestNamedGetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    243243{
    244     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedGetterWithIdentifier.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);
    262 IGNORE_WARNINGS_BEGIN("unreachable-code")
    263 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    268 IGNORE_WARNINGS_END
    269 IGNORE_WARNINGS_END
    270     }
    271 
    272     clientSpaces.m_clientSubspaceForTestNamedGetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    273     return clientSpaces.m_clientSubspaceForTestNamedGetterWithIdentifier.get();
     244    return subspaceForImpl<JSTestNamedGetterWithIdentifier, UseCustomHeapCellType::No>(vm,
     245        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedGetterWithIdentifier.get(); },
     246        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedGetterWithIdentifier = WTFMove(space); },
     247        [] (auto& spaces) { return spaces.m_subspaceForTestNamedGetterWithIdentifier.get(); },
     248        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedGetterWithIdentifier = WTFMove(space); },
     249        nullptr
     250    );
    274251}
    275252
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    296296JSC::GCClient::IsoSubspace* JSTestNamedSetterNoIdentifier::subspaceForImpl(JSC::VM& vm)
    297297{
    298     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterNoIdentifier.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);
    316 IGNORE_WARNINGS_BEGIN("unreachable-code")
    317 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    322 IGNORE_WARNINGS_END
    323 IGNORE_WARNINGS_END
    324     }
    325 
    326     clientSpaces.m_clientSubspaceForTestNamedSetterNoIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    327     return clientSpaces.m_clientSubspaceForTestNamedSetterNoIdentifier.get();
     298    return subspaceForImpl<JSTestNamedSetterNoIdentifier, UseCustomHeapCellType::No>(vm,
     299        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterNoIdentifier.get(); },
     300        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterNoIdentifier = WTFMove(space); },
     301        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterNoIdentifier.get(); },
     302        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterNoIdentifier = WTFMove(space); },
     303        nullptr
     304    );
    328305}
    329306
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    296296JSC::GCClient::IsoSubspace* JSTestNamedSetterThrowingException::subspaceForImpl(JSC::VM& vm)
    297297{
    298     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterThrowingException.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);
    316 IGNORE_WARNINGS_BEGIN("unreachable-code")
    317 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    322 IGNORE_WARNINGS_END
    323 IGNORE_WARNINGS_END
    324     }
    325 
    326     clientSpaces.m_clientSubspaceForTestNamedSetterThrowingException = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    327     return clientSpaces.m_clientSubspaceForTestNamedSetterThrowingException.get();
     298    return subspaceForImpl<JSTestNamedSetterThrowingException, UseCustomHeapCellType::No>(vm,
     299        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterThrowingException.get(); },
     300        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterThrowingException = WTFMove(space); },
     301        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterThrowingException.get(); },
     302        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterThrowingException = WTFMove(space); },
     303        nullptr
     304    );
    328305}
    329306
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAbstractOperations.h"
     
    327327JSC::GCClient::IsoSubspace* JSTestNamedSetterWithIdentifier::subspaceForImpl(JSC::VM& vm)
    328328{
    329     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterWithIdentifier.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);
    347 IGNORE_WARNINGS_BEGIN("unreachable-code")
    348 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    353 IGNORE_WARNINGS_END
    354 IGNORE_WARNINGS_END
    355     }
    356 
    357     clientSpaces.m_clientSubspaceForTestNamedSetterWithIdentifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    358     return clientSpaces.m_clientSubspaceForTestNamedSetterWithIdentifier.get();
     329    return subspaceForImpl<JSTestNamedSetterWithIdentifier, UseCustomHeapCellType::No>(vm,
     330        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterWithIdentifier.get(); },
     331        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterWithIdentifier = WTFMove(space); },
     332        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterWithIdentifier.get(); },
     333        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterWithIdentifier = WTFMove(space); },
     334        nullptr
     335    );
    359336}
    360337
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAbstractOperations.h"
     
    374374JSC::GCClient::IsoSubspace* JSTestNamedSetterWithIndexedGetter::subspaceForImpl(JSC::VM& vm)
    375375{
    376     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterWithIndexedGetter.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);
    394 IGNORE_WARNINGS_BEGIN("unreachable-code")
    395 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    400 IGNORE_WARNINGS_END
    401 IGNORE_WARNINGS_END
    402     }
    403 
    404     clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetter = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    405     return clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetter.get();
     376    return subspaceForImpl<JSTestNamedSetterWithIndexedGetter, UseCustomHeapCellType::No>(vm,
     377        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterWithIndexedGetter.get(); },
     378        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterWithIndexedGetter = WTFMove(space); },
     379        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterWithIndexedGetter.get(); },
     380        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterWithIndexedGetter = WTFMove(space); },
     381        nullptr
     382    );
    406383}
    407384
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAbstractOperations.h"
     
    424424JSC::GCClient::IsoSubspace* JSTestNamedSetterWithIndexedGetterAndSetter::subspaceForImpl(JSC::VM& vm)
    425425{
    426     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterWithIndexedGetterAndSetter.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);
    444 IGNORE_WARNINGS_BEGIN("unreachable-code")
    445 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    450 IGNORE_WARNINGS_END
    451 IGNORE_WARNINGS_END
    452     }
    453 
    454     clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetterAndSetter = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    455     return clientSpaces.m_clientSubspaceForTestNamedSetterWithIndexedGetterAndSetter.get();
     426    return subspaceForImpl<JSTestNamedSetterWithIndexedGetterAndSetter, UseCustomHeapCellType::No>(vm,
     427        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterWithIndexedGetterAndSetter.get(); },
     428        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterWithIndexedGetterAndSetter = WTFMove(space); },
     429        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterWithIndexedGetterAndSetter.get(); },
     430        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterWithIndexedGetterAndSetter = WTFMove(space); },
     431        nullptr
     432    );
    456433}
    457434
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAbstractOperations.h"
    2828#include "JSDOMBinding.h"
     
    273273JSC::GCClient::IsoSubspace* JSTestNamedSetterWithLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
    274274{
    275     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns.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);
    293 IGNORE_WARNINGS_BEGIN("unreachable-code")
    294 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    299 IGNORE_WARNINGS_END
    300 IGNORE_WARNINGS_END
    301     }
    302 
    303     clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyOverrideBuiltIns = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    304     return clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyOverrideBuiltIns.get();
     275    return subspaceForImpl<JSTestNamedSetterWithLegacyOverrideBuiltIns, UseCustomHeapCellType::No>(vm,
     276        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterWithLegacyOverrideBuiltIns.get(); },
     277        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterWithLegacyOverrideBuiltIns = WTFMove(space); },
     278        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns.get(); },
     279        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterWithLegacyOverrideBuiltIns = WTFMove(space); },
     280        nullptr
     281    );
    305282}
    306283
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAbstractOperations.h"
     
    357357JSC::GCClient::IsoSubspace* JSTestNamedSetterWithLegacyUnforgeableProperties::subspaceForImpl(JSC::VM& vm)
    358358{
    359     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterWithLegacyUnforgeableProperties.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);
    377 IGNORE_WARNINGS_BEGIN("unreachable-code")
    378 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    383 IGNORE_WARNINGS_END
    384 IGNORE_WARNINGS_END
    385     }
    386 
    387     clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeableProperties = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    388     return clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeableProperties.get();
     359    return subspaceForImpl<JSTestNamedSetterWithLegacyUnforgeableProperties, UseCustomHeapCellType::No>(vm,
     360        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeableProperties.get(); },
     361        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeableProperties = WTFMove(space); },
     362        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeableProperties.get(); },
     363        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeableProperties = WTFMove(space); },
     364        nullptr
     365    );
    389366}
    390367
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAbstractOperations.h"
     
    334334JSC::GCClient::IsoSubspace* JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns::subspaceForImpl(JSC::VM& vm)
    335335{
    336     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.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);
    354 IGNORE_WARNINGS_BEGIN("unreachable-code")
    355 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    360 IGNORE_WARNINGS_END
    361 IGNORE_WARNINGS_END
    362     }
    363 
    364     clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    365     return clientSpaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.get();
     336    return subspaceForImpl<JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns, UseCustomHeapCellType::No>(vm,
     337        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.get(); },
     338        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns = WTFMove(space); },
     339        [] (auto& spaces) { return spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.get(); },
     340        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns = WTFMove(space); },
     341        nullptr
     342    );
    366343}
    367344
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceObject.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    276276JSC::GCClient::IsoSubspace* JSTestNamespaceObject::subspaceForImpl(JSC::VM& vm)
    277277{
    278     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNamespaceObject.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);
    296 IGNORE_WARNINGS_BEGIN("unreachable-code")
    297 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    302 IGNORE_WARNINGS_END
    303 IGNORE_WARNINGS_END
    304     }
    305 
    306     clientSpaces.m_clientSubspaceForTestNamespaceObject = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    307     return clientSpaces.m_clientSubspaceForTestNamespaceObject.get();
    308 }
    309 
    310 
    311 }
     278    return subspaceForImpl<JSTestNamespaceObject, UseCustomHeapCellType::No>(vm,
     279        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNamespaceObject.get(); },
     280        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNamespaceObject = WTFMove(space); },
     281        [] (auto& spaces) { return spaces.m_subspaceForTestNamespaceObject.get(); },
     282        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNamespaceObject = WTFMove(space); },
     283        nullptr
     284    );
     285}
     286
     287
     288}
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "DOMPromiseProxy.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "IDLTypes.h"
    2929#include "JSDOMAttribute.h"
     
    403403        if constexpr (mode == JSC::SubspaceAccess::Concurrently)
    404404            return nullptr;
    405         auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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);
    423 IGNORE_WARNINGS_BEGIN("unreachable-code")
    424 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    429 IGNORE_WARNINGS_END
    430 IGNORE_WARNINGS_END
    431         }
    432 
    433         clientSpaces.m_clientSubspaceForTestNodeIterator = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    434         return clientSpaces.m_clientSubspaceForTestNodeIterator.get();
     405        return subspaceForImpl<TestNodeIterator, UseCustomHeapCellType::No>(vm,
     406            [] (auto& spaces) { return spaces.m_clientSubspaceForTestNodeIterator.get(); },
     407            [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNodeIterator = WTFMove(space); },
     408            [] (auto& spaces) { return spaces.m_subspaceForTestNodeIterator.get(); },
     409            [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNodeIterator = WTFMove(space); }
     410        );
    435411    }
    436412
     
    506482JSC::GCClient::IsoSubspace* JSTestNode::subspaceForImpl(JSC::VM& vm)
    507483{
    508     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestNode.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);
    526 IGNORE_WARNINGS_BEGIN("unreachable-code")
    527 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    532 IGNORE_WARNINGS_END
    533 IGNORE_WARNINGS_END
    534     }
    535 
    536     clientSpaces.m_clientSubspaceForTestNode = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    537     return clientSpaces.m_clientSubspaceForTestNode.get();
     484    return subspaceForImpl<JSTestNode, UseCustomHeapCellType::No>(vm,
     485        [] (auto& spaces) { return spaces.m_clientSubspaceForTestNode.get(); },
     486        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestNode = WTFMove(space); },
     487        [] (auto& spaces) { return spaces.m_subspaceForTestNode.get(); },
     488        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestNode = WTFMove(space); },
     489        nullptr
     490    );
    538491}
    539492
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "DOMPromiseProxy.h"
    2826#include "DOMWindow.h"
     
    3129#include "ElementInlines.h"
    3230#include "EventNames.h"
     31#include "ExtendedDOMClientIsoSubspaces.h"
     32#include "ExtendedDOMIsoSubspaces.h"
    3333#include "HTMLNames.h"
    3434#include "IDLTypes.h"
     
    90639063JSC::GCClient::IsoSubspace* JSTestObj::subspaceForImpl(JSC::VM& vm)
    90649064{
    9065     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestObj.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);
    9083 IGNORE_WARNINGS_BEGIN("unreachable-code")
    9084 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    9089 IGNORE_WARNINGS_END
    9090 IGNORE_WARNINGS_END
    9091     }
    9092 
    9093     clientSpaces.m_clientSubspaceForTestObj = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    9094     return clientSpaces.m_clientSubspaceForTestObj.get();
     9065    return subspaceForImpl<JSTestObj, UseCustomHeapCellType::No>(vm,
     9066        [] (auto& spaces) { return spaces.m_clientSubspaceForTestObj.get(); },
     9067        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestObj = WTFMove(space); },
     9068        [] (auto& spaces) { return spaces.m_subspaceForTestObj.get(); },
     9069        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestObj = WTFMove(space); },
     9070        nullptr
     9071    );
    90959072}
    90969073
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOperationConditional.cpp

    r290155 r290188  
    2626
    2727#include "ActiveDOMObject.h"
    28 #include "DOMClientIsoSubspaces.h"
    29 #include "DOMIsoSubspaces.h"
     28#include "ExtendedDOMClientIsoSubspaces.h"
     29#include "ExtendedDOMIsoSubspaces.h"
    3030#include "JSDOMBinding.h"
    3131#include "JSDOMConstructorNotConstructable.h"
     
    230230JSC::GCClient::IsoSubspace* JSTestOperationConditional::subspaceForImpl(JSC::VM& vm)
    231231{
    232     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestOperationConditional.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);
    250 IGNORE_WARNINGS_BEGIN("unreachable-code")
    251 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    256 IGNORE_WARNINGS_END
    257 IGNORE_WARNINGS_END
    258     }
    259 
    260     clientSpaces.m_clientSubspaceForTestOperationConditional = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    261     return clientSpaces.m_clientSubspaceForTestOperationConditional.get();
     232    return subspaceForImpl<JSTestOperationConditional, UseCustomHeapCellType::No>(vm,
     233        [] (auto& spaces) { return spaces.m_clientSubspaceForTestOperationConditional.get(); },
     234        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestOperationConditional = WTFMove(space); },
     235        [] (auto& spaces) { return spaces.m_subspaceForTestOperationConditional.get(); },
     236        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestOperationConditional = WTFMove(space); },
     237        nullptr
     238    );
    262239}
    263240
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSBlob.h"
    2828#include "JSDOMBinding.h"
     
    301301JSC::GCClient::IsoSubspace* JSTestOverloadedConstructors::subspaceForImpl(JSC::VM& vm)
    302302{
    303     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestOverloadedConstructors.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);
    321 IGNORE_WARNINGS_BEGIN("unreachable-code")
    322 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    327 IGNORE_WARNINGS_END
    328 IGNORE_WARNINGS_END
    329     }
    330 
    331     clientSpaces.m_clientSubspaceForTestOverloadedConstructors = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    332     return clientSpaces.m_clientSubspaceForTestOverloadedConstructors.get();
     303    return subspaceForImpl<JSTestOverloadedConstructors, UseCustomHeapCellType::No>(vm,
     304        [] (auto& spaces) { return spaces.m_clientSubspaceForTestOverloadedConstructors.get(); },
     305        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestOverloadedConstructors = WTFMove(space); },
     306        [] (auto& spaces) { return spaces.m_subspaceForTestOverloadedConstructors.get(); },
     307        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestOverloadedConstructors = WTFMove(space); },
     308        nullptr
     309    );
    333310}
    334311
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructor.h"
     
    238238JSC::GCClient::IsoSubspace* JSTestOverloadedConstructorsWithSequence::subspaceForImpl(JSC::VM& vm)
    239239{
    240     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestOverloadedConstructorsWithSequence.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);
    258 IGNORE_WARNINGS_BEGIN("unreachable-code")
    259 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    264 IGNORE_WARNINGS_END
    265 IGNORE_WARNINGS_END
    266     }
    267 
    268     clientSpaces.m_clientSubspaceForTestOverloadedConstructorsWithSequence = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    269     return clientSpaces.m_clientSubspaceForTestOverloadedConstructorsWithSequence.get();
     240    return subspaceForImpl<JSTestOverloadedConstructorsWithSequence, UseCustomHeapCellType::No>(vm,
     241        [] (auto& spaces) { return spaces.m_clientSubspaceForTestOverloadedConstructorsWithSequence.get(); },
     242        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestOverloadedConstructorsWithSequence = WTFMove(space); },
     243        [] (auto& spaces) { return spaces.m_subspaceForTestOverloadedConstructorsWithSequence.get(); },
     244        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestOverloadedConstructorsWithSequence = WTFMove(space); },
     245        nullptr
     246    );
    270247}
    271248
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    240240JSC::GCClient::IsoSubspace* JSTestPluginInterface::subspaceForImpl(JSC::VM& vm)
    241241{
    242     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestPluginInterface.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);
    260 IGNORE_WARNINGS_BEGIN("unreachable-code")
    261 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    266 IGNORE_WARNINGS_END
    267 IGNORE_WARNINGS_END
    268     }
    269 
    270     clientSpaces.m_clientSubspaceForTestPluginInterface = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    271     return clientSpaces.m_clientSubspaceForTestPluginInterface.get();
     242    return subspaceForImpl<JSTestPluginInterface, UseCustomHeapCellType::No>(vm,
     243        [] (auto& spaces) { return spaces.m_clientSubspaceForTestPluginInterface.get(); },
     244        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestPluginInterface = WTFMove(space); },
     245        [] (auto& spaces) { return spaces.m_subspaceForTestPluginInterface.get(); },
     246        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestPluginInterface = WTFMove(space); },
     247        nullptr
     248    );
    272249}
    273250
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
    2725#include "DOMPromiseProxy.h"
     26#include "ExtendedDOMClientIsoSubspaces.h"
     27#include "ExtendedDOMIsoSubspaces.h"
    2828#include "JSDOMAttribute.h"
    2929#include "JSDOMBinding.h"
     
    299299JSC::GCClient::IsoSubspace* JSTestPromiseRejectionEvent::subspaceForImpl(JSC::VM& vm)
    300300{
    301     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestPromiseRejectionEvent.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);
    319 IGNORE_WARNINGS_BEGIN("unreachable-code")
    320 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    325 IGNORE_WARNINGS_END
    326 IGNORE_WARNINGS_END
    327     }
    328 
    329     clientSpaces.m_clientSubspaceForTestPromiseRejectionEvent = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    330     return clientSpaces.m_clientSubspaceForTestPromiseRejectionEvent.get();
     301    return subspaceForImpl<JSTestPromiseRejectionEvent, UseCustomHeapCellType::No>(vm,
     302        [] (auto& spaces) { return spaces.m_clientSubspaceForTestPromiseRejectionEvent.get(); },
     303        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestPromiseRejectionEvent = WTFMove(space); },
     304        [] (auto& spaces) { return spaces.m_subspaceForTestPromiseRejectionEvent.get(); },
     305        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestPromiseRejectionEvent = WTFMove(space); },
     306        nullptr
     307    );
    331308}
    332309
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    301301JSC::GCClient::IsoSubspace* JSTestReadOnlyMapLike::subspaceForImpl(JSC::VM& vm)
    302302{
    303     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestReadOnlyMapLike.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);
    321 IGNORE_WARNINGS_BEGIN("unreachable-code")
    322 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    327 IGNORE_WARNINGS_END
    328 IGNORE_WARNINGS_END
    329     }
    330 
    331     clientSpaces.m_clientSubspaceForTestReadOnlyMapLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    332     return clientSpaces.m_clientSubspaceForTestReadOnlyMapLike.get();
     303    return subspaceForImpl<JSTestReadOnlyMapLike, UseCustomHeapCellType::No>(vm,
     304        [] (auto& spaces) { return spaces.m_clientSubspaceForTestReadOnlyMapLike.get(); },
     305        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestReadOnlyMapLike = WTFMove(space); },
     306        [] (auto& spaces) { return spaces.m_subspaceForTestReadOnlyMapLike.get(); },
     307        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestReadOnlyMapLike = WTFMove(space); },
     308        nullptr
     309    );
    333310}
    334311
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    280280JSC::GCClient::IsoSubspace* JSTestReadOnlySetLike::subspaceForImpl(JSC::VM& vm)
    281281{
    282     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestReadOnlySetLike.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);
    300 IGNORE_WARNINGS_BEGIN("unreachable-code")
    301 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    306 IGNORE_WARNINGS_END
    307 IGNORE_WARNINGS_END
    308     }
    309 
    310     clientSpaces.m_clientSubspaceForTestReadOnlySetLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    311     return clientSpaces.m_clientSubspaceForTestReadOnlySetLike.get();
     282    return subspaceForImpl<JSTestReadOnlySetLike, UseCustomHeapCellType::No>(vm,
     283        [] (auto& spaces) { return spaces.m_clientSubspaceForTestReadOnlySetLike.get(); },
     284        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestReadOnlySetLike = WTFMove(space); },
     285        [] (auto& spaces) { return spaces.m_subspaceForTestReadOnlySetLike.get(); },
     286        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestReadOnlySetLike = WTFMove(space); },
     287        nullptr
     288    );
    312289}
    313290
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    167167JSC::GCClient::IsoSubspace* JSTestReportExtraMemoryCost::subspaceForImpl(JSC::VM& vm)
    168168{
    169     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestReportExtraMemoryCost.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);
    187 IGNORE_WARNINGS_BEGIN("unreachable-code")
    188 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    193 IGNORE_WARNINGS_END
    194 IGNORE_WARNINGS_END
    195     }
    196 
    197     clientSpaces.m_clientSubspaceForTestReportExtraMemoryCost = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    198     return clientSpaces.m_clientSubspaceForTestReportExtraMemoryCost.get();
     169    return subspaceForImpl<JSTestReportExtraMemoryCost, UseCustomHeapCellType::No>(vm,
     170        [] (auto& spaces) { return spaces.m_clientSubspaceForTestReportExtraMemoryCost.get(); },
     171        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestReportExtraMemoryCost = WTFMove(space); },
     172        [] (auto& spaces) { return spaces.m_subspaceForTestReportExtraMemoryCost.get(); },
     173        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestReportExtraMemoryCost = WTFMove(space); },
     174        nullptr
     175    );
    199176}
    200177
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp

    r290155 r290188  
    2626
    2727#include "ActiveDOMObject.h"
    28 #include "DOMClientIsoSubspaces.h"
    29 #include "DOMIsoSubspaces.h"
     28#include "ExtendedDOMClientIsoSubspaces.h"
     29#include "ExtendedDOMIsoSubspaces.h"
    3030#include "IDLTypes.h"
    3131#include "JSDOMAttribute.h"
     
    345345JSC::GCClient::IsoSubspace* JSTestSerializedScriptValueInterface::subspaceForImpl(JSC::VM& vm)
    346346{
    347     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestSerializedScriptValueInterface.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);
    365 IGNORE_WARNINGS_BEGIN("unreachable-code")
    366 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    371 IGNORE_WARNINGS_END
    372 IGNORE_WARNINGS_END
    373     }
    374 
    375     clientSpaces.m_clientSubspaceForTestSerializedScriptValueInterface = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    376     return clientSpaces.m_clientSubspaceForTestSerializedScriptValueInterface.get();
     347    return subspaceForImpl<JSTestSerializedScriptValueInterface, UseCustomHeapCellType::No>(vm,
     348        [] (auto& spaces) { return spaces.m_clientSubspaceForTestSerializedScriptValueInterface.get(); },
     349        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestSerializedScriptValueInterface = WTFMove(space); },
     350        [] (auto& spaces) { return spaces.m_subspaceForTestSerializedScriptValueInterface.get(); },
     351        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestSerializedScriptValueInterface = WTFMove(space); },
     352        nullptr
     353    );
    377354}
    378355
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLike.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    338338JSC::GCClient::IsoSubspace* JSTestSetLike::subspaceForImpl(JSC::VM& vm)
    339339{
    340     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestSetLike.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);
    358 IGNORE_WARNINGS_BEGIN("unreachable-code")
    359 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    364 IGNORE_WARNINGS_END
    365 IGNORE_WARNINGS_END
    366     }
    367 
    368     clientSpaces.m_clientSubspaceForTestSetLike = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    369     return clientSpaces.m_clientSubspaceForTestSetLike.get();
     340    return subspaceForImpl<JSTestSetLike, UseCustomHeapCellType::No>(vm,
     341        [] (auto& spaces) { return spaces.m_clientSubspaceForTestSetLike.get(); },
     342        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestSetLike = WTFMove(space); },
     343        [] (auto& spaces) { return spaces.m_subspaceForTestSetLike.get(); },
     344        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestSetLike = WTFMove(space); },
     345        nullptr
     346    );
    370347}
    371348
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAttribute.h"
     
    350350JSC::GCClient::IsoSubspace* JSTestSetLikeWithOverriddenOperations::subspaceForImpl(JSC::VM& vm)
    351351{
    352     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestSetLikeWithOverriddenOperations.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);
    370 IGNORE_WARNINGS_BEGIN("unreachable-code")
    371 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    376 IGNORE_WARNINGS_END
    377 IGNORE_WARNINGS_END
    378     }
    379 
    380     clientSpaces.m_clientSubspaceForTestSetLikeWithOverriddenOperations = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    381     return clientSpaces.m_clientSubspaceForTestSetLikeWithOverriddenOperations.get();
     352    return subspaceForImpl<JSTestSetLikeWithOverriddenOperations, UseCustomHeapCellType::No>(vm,
     353        [] (auto& spaces) { return spaces.m_clientSubspaceForTestSetLikeWithOverriddenOperations.get(); },
     354        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestSetLikeWithOverriddenOperations = WTFMove(space); },
     355        [] (auto& spaces) { return spaces.m_subspaceForTestSetLikeWithOverriddenOperations.get(); },
     356        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestSetLikeWithOverriddenOperations = WTFMove(space); },
     357        nullptr
     358    );
    382359}
    383360
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    188188JSC::GCClient::IsoSubspace* JSTestStringifier::subspaceForImpl(JSC::VM& vm)
    189189{
    190     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestStringifier.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);
    208 IGNORE_WARNINGS_BEGIN("unreachable-code")
    209 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    214 IGNORE_WARNINGS_END
    215 IGNORE_WARNINGS_END
    216     }
    217 
    218     clientSpaces.m_clientSubspaceForTestStringifier = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    219     return clientSpaces.m_clientSubspaceForTestStringifier.get();
     190    return subspaceForImpl<JSTestStringifier, UseCustomHeapCellType::No>(vm,
     191        [] (auto& spaces) { return spaces.m_clientSubspaceForTestStringifier.get(); },
     192        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestStringifier = WTFMove(space); },
     193        [] (auto& spaces) { return spaces.m_subspaceForTestStringifier.get(); },
     194        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestStringifier = WTFMove(space); },
     195        nullptr
     196    );
    220197}
    221198
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    188188JSC::GCClient::IsoSubspace* JSTestStringifierAnonymousOperation::subspaceForImpl(JSC::VM& vm)
    189189{
    190     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestStringifierAnonymousOperation.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);
    208 IGNORE_WARNINGS_BEGIN("unreachable-code")
    209 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    214 IGNORE_WARNINGS_END
    215 IGNORE_WARNINGS_END
    216     }
    217 
    218     clientSpaces.m_clientSubspaceForTestStringifierAnonymousOperation = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    219     return clientSpaces.m_clientSubspaceForTestStringifierAnonymousOperation.get();
     190    return subspaceForImpl<JSTestStringifierAnonymousOperation, UseCustomHeapCellType::No>(vm,
     191        [] (auto& spaces) { return spaces.m_clientSubspaceForTestStringifierAnonymousOperation.get(); },
     192        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestStringifierAnonymousOperation = WTFMove(space); },
     193        [] (auto& spaces) { return spaces.m_subspaceForTestStringifierAnonymousOperation.get(); },
     194        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestStringifierAnonymousOperation = WTFMove(space); },
     195        nullptr
     196    );
    220197}
    221198
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    205205JSC::GCClient::IsoSubspace* JSTestStringifierNamedOperation::subspaceForImpl(JSC::VM& vm)
    206206{
    207     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestStringifierNamedOperation.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);
    225 IGNORE_WARNINGS_BEGIN("unreachable-code")
    226 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    231 IGNORE_WARNINGS_END
    232 IGNORE_WARNINGS_END
    233     }
    234 
    235     clientSpaces.m_clientSubspaceForTestStringifierNamedOperation = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    236     return clientSpaces.m_clientSubspaceForTestStringifierNamedOperation.get();
     207    return subspaceForImpl<JSTestStringifierNamedOperation, UseCustomHeapCellType::No>(vm,
     208        [] (auto& spaces) { return spaces.m_clientSubspaceForTestStringifierNamedOperation.get(); },
     209        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestStringifierNamedOperation = WTFMove(space); },
     210        [] (auto& spaces) { return spaces.m_subspaceForTestStringifierNamedOperation.get(); },
     211        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestStringifierNamedOperation = WTFMove(space); },
     212        nullptr
     213    );
    237214}
    238215
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    205205JSC::GCClient::IsoSubspace* JSTestStringifierOperationImplementedAs::subspaceForImpl(JSC::VM& vm)
    206206{
    207     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestStringifierOperationImplementedAs.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);
    225 IGNORE_WARNINGS_BEGIN("unreachable-code")
    226 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    231 IGNORE_WARNINGS_END
    232 IGNORE_WARNINGS_END
    233     }
    234 
    235     clientSpaces.m_clientSubspaceForTestStringifierOperationImplementedAs = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    236     return clientSpaces.m_clientSubspaceForTestStringifierOperationImplementedAs.get();
     207    return subspaceForImpl<JSTestStringifierOperationImplementedAs, UseCustomHeapCellType::No>(vm,
     208        [] (auto& spaces) { return spaces.m_clientSubspaceForTestStringifierOperationImplementedAs.get(); },
     209        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestStringifierOperationImplementedAs = WTFMove(space); },
     210        [] (auto& spaces) { return spaces.m_subspaceForTestStringifierOperationImplementedAs.get(); },
     211        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestStringifierOperationImplementedAs = WTFMove(space); },
     212        nullptr
     213    );
    237214}
    238215
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    188188JSC::GCClient::IsoSubspace* JSTestStringifierOperationNamedToString::subspaceForImpl(JSC::VM& vm)
    189189{
    190     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestStringifierOperationNamedToString.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);
    208 IGNORE_WARNINGS_BEGIN("unreachable-code")
    209 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    214 IGNORE_WARNINGS_END
    215 IGNORE_WARNINGS_END
    216     }
    217 
    218     clientSpaces.m_clientSubspaceForTestStringifierOperationNamedToString = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    219     return clientSpaces.m_clientSubspaceForTestStringifierOperationNamedToString.get();
     190    return subspaceForImpl<JSTestStringifierOperationNamedToString, UseCustomHeapCellType::No>(vm,
     191        [] (auto& spaces) { return spaces.m_clientSubspaceForTestStringifierOperationNamedToString.get(); },
     192        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestStringifierOperationNamedToString = WTFMove(space); },
     193        [] (auto& spaces) { return spaces.m_subspaceForTestStringifierOperationNamedToString.get(); },
     194        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestStringifierOperationNamedToString = WTFMove(space); },
     195        nullptr
     196    );
    220197}
    221198
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    204204JSC::GCClient::IsoSubspace* JSTestStringifierReadOnlyAttribute::subspaceForImpl(JSC::VM& vm)
    205205{
    206     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestStringifierReadOnlyAttribute.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);
    224 IGNORE_WARNINGS_BEGIN("unreachable-code")
    225 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    230 IGNORE_WARNINGS_END
    231 IGNORE_WARNINGS_END
    232     }
    233 
    234     clientSpaces.m_clientSubspaceForTestStringifierReadOnlyAttribute = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    235     return clientSpaces.m_clientSubspaceForTestStringifierReadOnlyAttribute.get();
     206    return subspaceForImpl<JSTestStringifierReadOnlyAttribute, UseCustomHeapCellType::No>(vm,
     207        [] (auto& spaces) { return spaces.m_clientSubspaceForTestStringifierReadOnlyAttribute.get(); },
     208        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestStringifierReadOnlyAttribute = WTFMove(space); },
     209        [] (auto& spaces) { return spaces.m_subspaceForTestStringifierReadOnlyAttribute.get(); },
     210        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestStringifierReadOnlyAttribute = WTFMove(space); },
     211        nullptr
     212    );
    236213}
    237214
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    223223JSC::GCClient::IsoSubspace* JSTestStringifierReadWriteAttribute::subspaceForImpl(JSC::VM& vm)
    224224{
    225     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestStringifierReadWriteAttribute.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);
    243 IGNORE_WARNINGS_BEGIN("unreachable-code")
    244 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    249 IGNORE_WARNINGS_END
    250 IGNORE_WARNINGS_END
    251     }
    252 
    253     clientSpaces.m_clientSubspaceForTestStringifierReadWriteAttribute = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    254     return clientSpaces.m_clientSubspaceForTestStringifierReadWriteAttribute.get();
     225    return subspaceForImpl<JSTestStringifierReadWriteAttribute, UseCustomHeapCellType::No>(vm,
     226        [] (auto& spaces) { return spaces.m_clientSubspaceForTestStringifierReadWriteAttribute.get(); },
     227        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestStringifierReadWriteAttribute = WTFMove(space); },
     228        [] (auto& spaces) { return spaces.m_subspaceForTestStringifierReadWriteAttribute.get(); },
     229        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestStringifierReadWriteAttribute = WTFMove(space); },
     230        nullptr
     231    );
    255232}
    256233
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTaggedWrapper.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMBinding.h"
    2828#include "JSDOMConstructorNotConstructable.h"
     
    166166JSC::GCClient::IsoSubspace* JSTestTaggedWrapper::subspaceForImpl(JSC::VM& vm)
    167167{
    168     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestTaggedWrapper.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);
    186 IGNORE_WARNINGS_BEGIN("unreachable-code")
    187 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    192 IGNORE_WARNINGS_END
    193 IGNORE_WARNINGS_END
    194     }
    195 
    196     clientSpaces.m_clientSubspaceForTestTaggedWrapper = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    197     return clientSpaces.m_clientSubspaceForTestTaggedWrapper.get();
     168    return subspaceForImpl<JSTestTaggedWrapper, UseCustomHeapCellType::No>(vm,
     169        [] (auto& spaces) { return spaces.m_clientSubspaceForTestTaggedWrapper.get(); },
     170        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestTaggedWrapper = WTFMove(space); },
     171        [] (auto& spaces) { return spaces.m_subspaceForTestTaggedWrapper.get(); },
     172        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestTaggedWrapper = WTFMove(space); },
     173        nullptr
     174    );
    198175}
    199176
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "IDLTypes.h"
    2828#include "JSDOMAttribute.h"
     
    776776JSC::GCClient::IsoSubspace* JSTestTypedefs::subspaceForImpl(JSC::VM& vm)
    777777{
    778     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForTestTypedefs.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);
    796 IGNORE_WARNINGS_BEGIN("unreachable-code")
    797 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    802 IGNORE_WARNINGS_END
    803 IGNORE_WARNINGS_END
    804     }
    805 
    806     clientSpaces.m_clientSubspaceForTestTypedefs = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    807     return clientSpaces.m_clientSubspaceForTestTypedefs.get();
     778    return subspaceForImpl<JSTestTypedefs, UseCustomHeapCellType::No>(vm,
     779        [] (auto& spaces) { return spaces.m_clientSubspaceForTestTypedefs.get(); },
     780        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForTestTypedefs = WTFMove(space); },
     781        [] (auto& spaces) { return spaces.m_subspaceForTestTypedefs.get(); },
     782        [] (auto& spaces, auto&& space) { spaces.m_subspaceForTestTypedefs = WTFMove(space); },
     783        nullptr
     784    );
    808785}
    809786
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    247247JSC::GCClient::IsoSubspace* JSWorkerGlobalScope::subspaceForImpl(JSC::VM& vm)
    248248{
    249     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForWorkerGlobalScope.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);
    263 IGNORE_WARNINGS_BEGIN("unreachable-code")
    264 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    269 IGNORE_WARNINGS_END
    270 IGNORE_WARNINGS_END
    271     }
    272 
    273     clientSpaces.m_clientSubspaceForWorkerGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    274     return clientSpaces.m_clientSubspaceForWorkerGlobalScope.get();
     249    return subspaceForImpl<JSWorkerGlobalScope, UseCustomHeapCellType::Yes>(vm,
     250        [] (auto& spaces) { return spaces.m_clientSubspaceForWorkerGlobalScope.get(); },
     251        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForWorkerGlobalScope = WTFMove(space); },
     252        [] (auto& spaces) { return spaces.m_subspaceForWorkerGlobalScope.get(); },
     253        [] (auto& spaces, auto&& space) { spaces.m_subspaceForWorkerGlobalScope = WTFMove(space); },
     254        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSWorkerGlobalScope; }
     255    );
    275256}
    276257
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.cpp

    r290155 r290188  
    2323
    2424#include "ActiveDOMObject.h"
    25 #include "DOMClientIsoSubspaces.h"
    26 #include "DOMIsoSubspaces.h"
     25#include "ExtendedDOMClientIsoSubspaces.h"
     26#include "ExtendedDOMIsoSubspaces.h"
    2727#include "JSDOMAttribute.h"
    2828#include "JSDOMBinding.h"
     
    161161JSC::GCClient::IsoSubspace* JSWorkletGlobalScope::subspaceForImpl(JSC::VM& vm)
    162162{
    163     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
    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_subspaceForWorkletGlobalScope.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);
    177 IGNORE_WARNINGS_BEGIN("unreachable-code")
    178 IGNORE_WARNINGS_BEGIN("tautological-compare")
    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);
    183 IGNORE_WARNINGS_END
    184 IGNORE_WARNINGS_END
    185     }
    186 
    187     clientSpaces.m_clientSubspaceForWorkletGlobalScope = makeUnique<JSC::GCClient::IsoSubspace>(*space);
    188     return clientSpaces.m_clientSubspaceForWorkletGlobalScope.get();
     163    return subspaceForImpl<JSWorkletGlobalScope, UseCustomHeapCellType::Yes>(vm,
     164        [] (auto& spaces) { return spaces.m_clientSubspaceForWorkletGlobalScope.get(); },
     165        [] (auto& spaces, auto&& space) { spaces.m_clientSubspaceForWorkletGlobalScope = WTFMove(space); },
     166        [] (auto& spaces) { return spaces.m_subspaceForWorkletGlobalScope.get(); },
     167        [] (auto& spaces, auto&& space) { spaces.m_subspaceForWorkletGlobalScope = WTFMove(space); },
     168        [] (auto& server) -> JSC::HeapCellType& { return server.m_heapCellTypeForJSWorkletGlobalScope; }
     169    );
    189170}
    190171
Note: See TracChangeset for help on using the changeset viewer.