Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5ff0c08af8bfe29647b8ae2c25532b18bad58268
      
https://github.com/WebKit/WebKit/commit/5ff0c08af8bfe29647b8ae2c25532b18bad58268
  Author: Jer Noble <[email protected]>
  Date:   2026-04-17 (Fri, 17 Apr 2026)

  Changed paths:
    M Source/JavaScriptCore/API/APICallbackFunction.h
    M Source/JavaScriptCore/API/APICast.h
    M Source/JavaScriptCore/API/APIUtils.h
    M Source/JavaScriptCore/API/JSAPIGlobalObject.cpp
    M Source/JavaScriptCore/API/JSAPIValueWrapper.cpp
    M Source/JavaScriptCore/API/JSContextRef.cpp
    M Source/JavaScriptCore/API/tests/VMManagerStopTheWorldTest.cpp
    M Source/JavaScriptCore/CMakeLists.txt
    M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    M 
Source/JavaScriptCore/SaferCPPExpectations/MemoryUnsafeCastCheckerExpectations
    M Source/JavaScriptCore/b3/B3AbstractHeapRepository.cpp
    M Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp
    M Source/JavaScriptCore/bytecode/EvalCodeBlockInlines.h
    M Source/JavaScriptCore/bytecode/FunctionCodeBlock.cpp
    M Source/JavaScriptCore/bytecode/FunctionCodeBlockInlines.h
    M Source/JavaScriptCore/bytecode/InlineCacheHandler.cpp
    M Source/JavaScriptCore/bytecode/ModuleProgramCodeBlock.cpp
    M Source/JavaScriptCore/bytecode/ModuleProgramCodeBlockInlines.h
    M Source/JavaScriptCore/bytecode/ProgramCodeBlockInlines.h
    M Source/JavaScriptCore/bytecode/UnlinkedEvalCodeBlock.cpp
    M Source/JavaScriptCore/bytecode/UnlinkedEvalCodeBlockInlines.h
    M Source/JavaScriptCore/bytecode/UnlinkedFunctionCodeBlockInlines.h
    M Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutableInlines.h
    M Source/JavaScriptCore/bytecode/UnlinkedModuleProgramCodeBlockInlines.h
    M Source/JavaScriptCore/bytecode/UnlinkedProgramCodeBlockInlines.h
    M Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp
    M Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp
    M Source/JavaScriptCore/heap/CompleteSubspace.cpp
    M Source/JavaScriptCore/inspector/ConsoleMessage.cpp
    M Source/JavaScriptCore/inspector/InjectedScriptBase.h
    M Source/JavaScriptCore/inspector/InjectedScriptHost.cpp
    M Source/JavaScriptCore/inspector/InjectedScriptHost.h
    M Source/JavaScriptCore/inspector/InjectedScriptModule.cpp
    M Source/JavaScriptCore/inspector/InspectorAgentBase.h
    M Source/JavaScriptCore/inspector/JavaScriptCallFrame.h
    M Source/JavaScriptCore/inspector/PerGlobalObjectWrapperWorld.cpp
    M Source/JavaScriptCore/inspector/PerGlobalObjectWrapperWorld.h
    M Source/JavaScriptCore/inspector/ScriptFunctionCall.cpp
    M Source/JavaScriptCore/inspector/ScriptFunctionCall.h
    M Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.cpp
    M Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.h
    M Source/JavaScriptCore/interpreter/ShadowChicken.h
    M Source/JavaScriptCore/jit/JITPlan.cpp
    M Source/JavaScriptCore/jsc.cpp
    M Source/JavaScriptCore/runtime/ArrayStorageInlines.h
    M Source/JavaScriptCore/runtime/ButterflyInlines.h
    M Source/JavaScriptCore/runtime/ClonedArguments.cpp
    M Source/JavaScriptCore/runtime/ClonedArguments.h
    M Source/JavaScriptCore/runtime/CustomGetterSetterInlines.h
    M Source/JavaScriptCore/runtime/DOMAttributeGetterSetterInlines.h
    M Source/JavaScriptCore/runtime/DirectArguments.cpp
    M Source/JavaScriptCore/runtime/DirectArguments.h
    M Source/JavaScriptCore/runtime/Exception.cpp
    M Source/JavaScriptCore/runtime/ExceptionHelpers.h
    M Source/JavaScriptCore/runtime/HashMapHelper.h
    M Source/JavaScriptCore/runtime/ISO8601.h
    M Source/JavaScriptCore/runtime/IntlObject.h
    M Source/JavaScriptCore/runtime/IntlObjectInlines.h
    M Source/JavaScriptCore/runtime/JSArrayInlines.h
    M Source/JavaScriptCore/runtime/JSBigInt.cpp
    M Source/JavaScriptCore/runtime/JSBigInt.h
    M Source/JavaScriptCore/runtime/JSBigIntInlines.h
    M Source/JavaScriptCore/runtime/JSCInlines.h
    M Source/JavaScriptCore/runtime/JSCJSValue.cpp
    M Source/JavaScriptCore/runtime/JSCJSValue.h
    A Source/JavaScriptCore/runtime/JSCJSValueBigInt.h
    A Source/JavaScriptCore/runtime/JSCJSValueCell.h
    R Source/JavaScriptCore/runtime/JSCJSValueCellInlines.h
    M Source/JavaScriptCore/runtime/JSCJSValueInlines.h
    A Source/JavaScriptCore/runtime/JSCJSValuePropertyInlines.h
    A Source/JavaScriptCore/runtime/JSCJSValueStructure.h
    M Source/JavaScriptCore/runtime/JSCalleeInlines.h
    M Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h
    M Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeFunctions.h
    M Source/JavaScriptCore/runtime/JSGlobalObjectInlines.h
    M Source/JavaScriptCore/runtime/JSGlobalProxy.cpp
    M Source/JavaScriptCore/runtime/JSGlobalProxy.h
    M Source/JavaScriptCore/runtime/JSGlobalProxyInlines.h
    M Source/JavaScriptCore/runtime/JSHeapDouble.cpp
    M Source/JavaScriptCore/runtime/JSHeapInt32.cpp
    M Source/JavaScriptCore/runtime/JSObject.h
    M Source/JavaScriptCore/runtime/JSObjectInlines.h
    M Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.h
    M Source/JavaScriptCore/runtime/JSScriptFetchParametersInlines.h
    M Source/JavaScriptCore/runtime/JSScriptFetcherInlines.h
    M Source/JavaScriptCore/runtime/JSSourceCode.cpp
    M Source/JavaScriptCore/runtime/JSString.cpp
    M Source/JavaScriptCore/runtime/JSTypedArrayViewPrototype.cpp
    M Source/JavaScriptCore/runtime/Lookup.cpp
    M Source/JavaScriptCore/runtime/NativeErrorPrototypeInlines.h
    M Source/JavaScriptCore/runtime/NumberPrototype.cpp
    M Source/JavaScriptCore/runtime/Operations.h
    A Source/JavaScriptCore/runtime/OperationsInlines.h
    M Source/JavaScriptCore/runtime/PrototypeKey.h
    M Source/JavaScriptCore/runtime/ScopedArguments.cpp
    M Source/JavaScriptCore/runtime/ScopedArguments.h
    M Source/JavaScriptCore/runtime/ScopedArgumentsTable.cpp
    M Source/JavaScriptCore/runtime/ShadowRealmObject.cpp
    M Source/JavaScriptCore/runtime/ShadowRealmObject.h
    M Source/JavaScriptCore/runtime/ShadowRealmPrototype.cpp
    M Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp
    M Source/JavaScriptCore/runtime/Structure.cpp
    M Source/JavaScriptCore/runtime/Structure.h
    M Source/JavaScriptCore/runtime/StructureCreateInlines.h
    M Source/JavaScriptCore/runtime/StructureInlines.h
    M Source/JavaScriptCore/runtime/TemporalCalendar.cpp
    M Source/JavaScriptCore/runtime/TemporalInstant.cpp
    M Source/JavaScriptCore/runtime/WeakMapImpl.cpp
    M Source/JavaScriptCore/runtime/WeakMapImpl.h
    M Source/JavaScriptCore/runtime/WriteBarrierInlines.h
    M Source/JavaScriptCore/wasm/debugger/tests/ExecutionHandlerIdleStopTest.cpp
    M Source/JavaScriptCore/wasm/debugger/tests/ExecutionHandlerTestSupport.cpp
    M 
Source/JavaScriptCore/wasm/debugger/tests/ExecutionHandlerVMLifecycleTest.cpp
    M Source/JavaScriptCore/wasm/js/JSWebAssembly.cpp
    M Source/JavaScriptCore/wasm/js/JSWebAssemblyException.cpp
    M Source/JavaScriptCore/wasm/js/JSWebAssemblyTag.cpp
    M Source/JavaScriptCore/wasm/js/WebAssemblyArrayPrototype.cpp
    M Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp
    M Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp
    M Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.cpp
    M Source/JavaScriptCore/wasm/js/WebAssemblyTableConstructor.cpp
    M Source/JavaScriptCore/wasm/js/WebAssemblyTablePrototype.cpp
    M Source/WebCore/Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp
    M Source/WebCore/Modules/streams/WritableStreamSink.cpp
    M Source/WebCore/bindings/js/CommonVM.cpp
    M Source/WebCore/bindings/js/InternalWritableStream.cpp
    M Source/WebCore/bindings/js/JSDOMAsyncIterator.h
    M Source/WebCore/bindings/js/JSDOMBuiltinConstructor.h
    M Source/WebCore/bindings/js/JSDOMBuiltinConstructorBase.cpp
    M Source/WebCore/bindings/js/JSDOMConstructor.h
    M Source/WebCore/bindings/js/JSDOMConstructorBase.cpp
    M Source/WebCore/bindings/js/JSDOMConstructorNotCallable.h
    M Source/WebCore/bindings/js/JSDOMConstructorNotConstructable.h
    M Source/WebCore/bindings/js/JSDOMConvertBoolean.cpp
    M Source/WebCore/bindings/js/JSDOMConvertStrings.h
    M Source/WebCore/bindings/js/JSDOMGlobalObjectInlines.h
    M Source/WebCore/bindings/js/JSDOMIterator.h
    M Source/WebCore/bindings/js/JSDOMLegacyFactoryFunction.h
    M Source/WebCore/bindings/js/JSDOMPromiseDeferred.cpp
    M Source/WebCore/bindings/js/JSDOMPromiseDeferred.h
    M Source/WebCore/bindings/js/JSDOMWindowBase.cpp
    M Source/WebCore/bindings/js/JSDOMWindowBase.h
    M Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
    M Source/WebCore/bindings/js/JSDOMWindowProperties.cpp
    M Source/WebCore/bindings/js/JSDOMWindowProperties.h
    M Source/WebCore/bindings/js/JSIDBSerializationGlobalObject.cpp
    M Source/WebCore/bindings/js/JSIDBSerializationGlobalObject.h
    M Source/WebCore/bindings/js/JSNavigatorCustom.cpp
    M Source/WebCore/bindings/js/JSValueInWrappedObjectInlines.h
    M Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp
    M Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.h
    M Source/WebCore/bindings/js/JSWorkletGlobalScopeBase.cpp
    M Source/WebCore/bindings/js/JSWorkletGlobalScopeBase.h
    M Source/WebCore/bindings/js/ReadableStreamDefaultController.cpp
    M Source/WebCore/bindings/js/ScriptController.cpp
    M Source/WebCore/bindings/js/ScriptModuleLoader.cpp
    M Source/WebCore/bindings/js/SerializedScriptValue.cpp
    M Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
    M Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSDOMWindow.h
    M Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSDedicatedWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSExposedStar.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSExposedStar.h
    M Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSExposedToWorkerAndWindow.h
    M Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSPaintWorkletGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSServiceWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSShadowRealmGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSSharedWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestAsyncIterable.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestAsyncIterable.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestAsyncIterableWithoutFlags.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestAsyncIterableWithoutFlags.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestAsyncKeyValueIterable.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestAsyncKeyValueIterable.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestConditional.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestConditional.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONFilteredByExposed.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONIndirectInheritance.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestException.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestIterable.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterCallWith.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceConst.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceConst.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceObject.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceObject.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestNode.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestObj.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestOperationConditional.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestOperationConditional.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlyMapLike.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlyMapLike.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlySetLike.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestReadOnlySetLike.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestReportExtraMemoryCost.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestReportExtraMemoryCost.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestScheduledAction.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestScheduledAction.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestSetLike.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestSetLike.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestStringifier.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestStringifierNamedOperation.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp
    M 
Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestTaggedWrapper.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestTaggedWrapper.h
    M Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h
    M Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSWorkerGlobalScope.h
    M Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.cpp
    M Source/WebCore/bindings/scripts/test/JS/JSWorkletGlobalScope.h
    M Source/WebCore/dom/EventTarget.cpp
    M Source/WebCore/fileapi/Blob.cpp
    M Source/WebCore/inspector/WebInjectedScriptHost.cpp
    M Source/WebCore/inspector/agents/page/PageHeapAgent.cpp
    M Source/WebCore/platform/mac/SerializedPlatformDataCueMac.mm
    M Source/WebCore/testing/Internals.cpp
    M Source/WebCore/testing/js/WebCoreTestSupport.cpp
    M Source/WebCore/workers/WorkerOrWorkletScriptController.cpp
    M Source/WebKit/Shared/JavaScriptEvaluationResult.cpp
    M Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp
    M Source/WebKit/WebProcess/Extensions/Bindings/JSWebExtensionWrapper.cpp
    M 
Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/DOM/WebKitDOMNode.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebFormManager.cpp
    M 
Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.cpp
    M Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp
    M Source/WebKit/WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp
    M Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp
    M Source/WebKitLegacy/mac/DOM/DOM.mm

  Log Message:
  -----------
  [Build Speed] Reduce the cost of StructureInlines.h
rdar://174363603
https://bugs.webkit.org/show_bug.cgi?id=311778

Reviewed by Geoffrey Garen.

StructureInlines.h was the 4th most expensive header in the JSC build
(included 180 times, avg 866ms) and 2nd most expensive in the WebCore build
(included 225 times, avg 1096ms). JSCJSValueInlines.h was the 7th most
expensive in WebCore (included 221 times, avg 871ms). The high cost comes
from heavy transitive includes and circular dependencies between core JSC
headers.

This patch reduces these costs through several strategies:

1. Split StructureInlines.h into lighter headers:

   - StructureCreateInlines.h: Contains Structure::create(),
     createStructure(), subspaceFor(), finishCreation(), and
     JSObject::didBecomePrototype(). For code that only defines
     createStructure() methods.

   - StructureArrayStorageInlines.h: Contains
     mayInterceptIndexedAccesses() and holesMustForwardToPrototype(),
     breaking the circular dependency between StructureInlines.h,
     JSObjectInlines.h, and JSArrayInlines.h.

2. Create JSCJSValueCell.h to break the JSCJSValue/JSCell circular
   dependency. This is a regular header (not Inlines) that any header can
   include. It provides JSValue type-checking functions (isString, isObject,
   isBigInt, toPrimitive, toBoolean, etc.) that previously required
   JSCJSValueCellInlines.h. Structure.h includes it so all downstream
   headers get these functions.

3. Rename JSCJSValueCellInlines.h to JSCJSValueStructure.h since it is no
   longer an Inlines header — it just breaks the circular dependency on
   Structure.h, providing JSValue::inherits, classInfoOrNull, and
   structureOrNull.

4. Decompose JSCJSValueInlines.h by moving functions to headers that
   already have the needed types:

   - JSCJSValue.h: getUInt32, equal
   - JSBigInt.h: asHeapBigInt, isZeroBigInt, isNegativeBigInt
   - JSObject.h: put, putInline, putByIndex, getPrototype
   - ExceptionHelpers.h: toIndex, requireObjectCoercible
   - JSGlobalProxy.h: isThisValueAltered
   - New JSCJSValuePropertyInlines.h: all get/getPropertySlot/
     getOwnPropertySlot/getAs overloads (lightweight alternative to
     JSCJSValueInlines.h for property access)

   This removes 7 includes from JSCJSValueInlines.h: Error.h,
   ExceptionHelpers.h, InternalFunction.h, JSGlobalProxy.h, MathCommon.h,
   MakeString.h, JSCJSValueCellInlines.h.

5. Split Operations.h into Operations.h (declarations only) and
   OperationsInlines.h (definitions). Operations.h is reduced from 6 heavy
   includes to just JSExportMacros.h and Forward.h with forward
   declarations. The JSBigInt ComparisonMode and ComparisonResult enums are
   moved to namespace scope (as JSBigIntComparisonMode and
   JSBigIntComparisonResult) to avoid requiring JSBigInt.h.

6. Move JSCell::classInfo() and JSCell::inherits() definitions to
   Structure.h (where Structure is complete). Extract the sweeping
   validation ASSERT to an out-of-line validateIsNotSweeping() in
   JSCell.cpp to avoid pulling vm() into the header.

7. Mark HeapCell::heap() and HeapCell::vm() declarations as inline to catch
   missing HeapCellInlines.h at compile time rather than link time. Remove
   vm() calls from headers by passing VM& parameters
   (FunctionRareData::clearInternalFunctionAllocationProfile,
   JSBoundFunction::name/nameString) or using getVM(globalObject)
   (JSString.h verifyCanGC). Change reportZappedCellAndCrash signature to
   take just const JSCell* to avoid heap() call in JSCast.h.

8. Move Structure::checkOffsetConsistency and checkConsistency to
   Structure.cpp since they are only used in debug builds and only called
   from within Structure.cpp itself.

ClonedArguments::length(), DirectArguments::length(), and
ScopedArguments::length() are moved out-of-line to their respective .cpp
files since their inline definitions called JSObject::get() which was
previously visible through the transitive include chain being broken.

Long (>4 line) inline function definitions in Structure.h are moved to the
bottom of the file to improve API readability, with declarations marked
inline and annotated with "// Defined below".

After this change, StructureInlines.h drops from the top 5 most expensive
headers to #54 in WebCore, with average cost per include reduced from
~1096ms to ~294ms. In JSC it drops off the top expensive headers list
entirely.

Canonical link: https://commits.webkit.org/311458@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to