[webkit-changes] [WebKit/WebKit] 9a160f: Introduce a concrete result type for JSValue -> Im...
Sam Weinig
noreply at github.com
Sat May 25 12:45:38 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 9a160ff054ee88d4ec12d8410a54e5ad42c9270c
https://github.com/WebKit/WebKit/commit/9a160ff054ee88d4ec12d8410a54e5ad42c9270c
Author: Sam Weinig <weinig at apple.com>
Date: 2024-05-25 (Sat, 25 May 2024)
Changed paths:
M Source/WTF/wtf/TrailingArray.h
M Source/WebCore/Headers.cmake
M Source/WebCore/Modules/applepay-ams-ui/ApplePayAMSUIPaymentHandler.cpp
M Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp
M Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp
M Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.cpp
M Source/WebCore/Modules/mediastream/RTCRtpScriptTransformer.cpp
M Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp
M Source/WebCore/Modules/permissions/Permissions.cpp
M Source/WebCore/Modules/streams/TransformStream.cpp
M Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.cpp
M Source/WebCore/Modules/webtransport/DatagramSink.cpp
M Source/WebCore/Modules/webxr/WebXRInputSource.h
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/animation/KeyframeEffect.cpp
M Source/WebCore/bindings/IDLTypes.h
M Source/WebCore/bindings/js/InternalReadableStream.cpp
M Source/WebCore/bindings/js/JSCallbackData.h
M Source/WebCore/bindings/js/JSCustomElementRegistryCustom.cpp
M Source/WebCore/bindings/js/JSDOMConvertAny.h
M Source/WebCore/bindings/js/JSDOMConvertBase.h
M Source/WebCore/bindings/js/JSDOMConvertBoolean.h
M Source/WebCore/bindings/js/JSDOMConvertBufferSource.h
M Source/WebCore/bindings/js/JSDOMConvertCallbacks.h
M Source/WebCore/bindings/js/JSDOMConvertDate.h
M Source/WebCore/bindings/js/JSDOMConvertDictionary.h
M Source/WebCore/bindings/js/JSDOMConvertEnumeration.h
M Source/WebCore/bindings/js/JSDOMConvertEventListener.h
M Source/WebCore/bindings/js/JSDOMConvertInterface.h
M Source/WebCore/bindings/js/JSDOMConvertJSON.h
M Source/WebCore/bindings/js/JSDOMConvertNull.h
M Source/WebCore/bindings/js/JSDOMConvertNullable.h
M Source/WebCore/bindings/js/JSDOMConvertNumbers.cpp
M Source/WebCore/bindings/js/JSDOMConvertNumbers.h
M Source/WebCore/bindings/js/JSDOMConvertObject.h
A Source/WebCore/bindings/js/JSDOMConvertOptional.h
M Source/WebCore/bindings/js/JSDOMConvertPromise.h
M Source/WebCore/bindings/js/JSDOMConvertRecord.h
A Source/WebCore/bindings/js/JSDOMConvertResult.h
M Source/WebCore/bindings/js/JSDOMConvertScheduledAction.h
M Source/WebCore/bindings/js/JSDOMConvertSequences.h
M Source/WebCore/bindings/js/JSDOMConvertSerializedScriptValue.h
M Source/WebCore/bindings/js/JSDOMConvertStrings.cpp
M Source/WebCore/bindings/js/JSDOMConvertStrings.h
M Source/WebCore/bindings/js/JSDOMConvertUnion.h
M Source/WebCore/bindings/js/JSDOMConvertVariadic.h
M Source/WebCore/bindings/js/JSDOMConvertXPathNSResolver.h
M Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
M Source/WebCore/bindings/js/JSDocumentCustom.cpp
M Source/WebCore/bindings/js/JSElementCustom.cpp
M Source/WebCore/bindings/js/JSElementInternalsCustom.cpp
M Source/WebCore/bindings/js/JSEventListener.cpp
M Source/WebCore/bindings/js/JSExtendableMessageEventCustom.cpp
M Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp
M Source/WebCore/bindings/js/JSRTCRtpSFrameTransformCustom.cpp
M Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp
M Source/WebCore/bindings/js/JSWebAnimationCustom.cpp
M Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
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/JSTestCEReactions.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestCallTracer.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunction.h
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.h
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.h
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.h
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunctionWithVariadic.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackFunctionWithVariadic.h
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.h
M Source/WebCore/bindings/scripts/test/JS/JSTestConditionalIncludes.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestConditionallyReadWrite.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSON.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInherit.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDefaultToJSONInheritFinal.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDelegateToSharedSyntheticAttribute.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDerivedDictionary.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDerivedDictionary.h
M Source/WebCore/bindings/scripts/test/JS/JSTestDerivedDictionary2.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDerivedDictionary2.h
M Source/WebCore/bindings/scripts/test/JS/JSTestDictionary.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDictionary.h
M Source/WebCore/bindings/scripts/test/JS/JSTestDictionaryWithOnlyConditionalMembers.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestDictionaryWithOnlyConditionalMembers.h
M Source/WebCore/bindings/scripts/test/JS/JSTestDomainSecurity.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestEmptyDictionary.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestEmptyDictionary.h
M Source/WebCore/bindings/scripts/test/JS/JSTestEnabledBySetting.cpp
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/JSTestGlobalObject.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestInheritedDictionary.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestInheritedDictionary.h
M Source/WebCore/bindings/scripts/test/JS/JSTestInheritedDictionary2.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestInheritedDictionary2.h
M Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyFactoryFunction.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyNoInterfaceObject.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestLegacyOverrideBuiltIns.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestMapLike.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestMapLikeWithOverriddenOperations.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyOverrideBuiltIns.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeableProperties.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithLegacyUnforgeablePropertiesAndLegacyOverrideBuiltIns.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNamespaceObject.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp
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/JSTestOverloadedConstructors.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp
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/JSTestReadOnlySetLike.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestScheduledAction.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestSetLike.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestSetLikeWithOverriddenOperations.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestStandaloneDictionary.h
M Source/WebCore/bindings/scripts/test/JS/JSTestStringContext.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestVoidCallbackFunction.h
M Source/WebCore/crypto/SubtleCrypto.cpp
M Source/WebCore/css/CSSStyleSheetObservableArray.cpp
M Source/WebCore/html/HTMLCanvasElement.cpp
M Source/WebCore/html/OffscreenCanvas.cpp
M Source/WebCore/inspector/InspectorCanvas.cpp
M Source/WebCore/inspector/InspectorCanvasCallTracer.h
M Source/WebCore/worklets/PaintWorkletGlobalScope.cpp
M Source/WebKit/WebProcess/Network/WebTransportSendStreamSink.cpp
Log Message:
-----------
Introduce a concrete result type for JSValue -> Implementation conversions
https://bugs.webkit.org/show_bug.cgi?id=274682
Reviewed by Ryosuke Niwa.
Introduces "ConversionResult" a template type that serves as the return value
for all the JSValue -> Implementation conversion functions. It acts much like
ExceptionOr, is even implemented similarly on top of Expected, but instead of
storing either a result or the exception information, it stores the result or
a token indicating an exception exists on the JS stack.
The goal of this type is to allow conversions to non-default initializable
types, crucially, dictionaries and unions with Ref members. This introductory
change does not utilize that, but rather has deferred that to a follow up.
This change is mostly comprised of:
- Updating the code generator to handle the new return type.
- Updating JSDOM* converters to return the new type.
- Update non-generated uses of the convert<...> family of functions to handle
the new result type.
* Source/WTF/wtf/TrailingArray.h:
(WTF::TrailingArray::TrailingArray):
- Ensure the destructors don't run on the uninitialized elements when
initializing trailing array's from a generator.
* Source/WebCore/Headers.cmake:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
- Add new files
* Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:
- Update code generation to handle new conversion result type.
* Source/WebCore/bindings/IDLTypes.h:
- Add new trait types ConversionResultType and NullableConversionResultType
to allow customization of the storage in ConversionResult for that type.
- Also adds a new IDLOptional type that the generator uses to streamline
optional arguments and optional dictionary members.
* Source/WebCore/bindings/js/JSDOMConvertResult.h: Added.
- New result type.
* Source/WebCore/bindings/js/JSCallbackData.h:
- Callback functions and interfaces now generate a JSDOMCallbackConverterTraits
instance to allow generic mapping from the JS callback type to the implementation
callback type.
* Source/WebCore/bindings/js/JSDOMConvertAny.h:
* Source/WebCore/bindings/js/JSDOMConvertBase.h:
* Source/WebCore/bindings/js/JSDOMConvertBoolean.h:
* Source/WebCore/bindings/js/JSDOMConvertBufferSource.h:
* Source/WebCore/bindings/js/JSDOMConvertCallbacks.h:
* Source/WebCore/bindings/js/JSDOMConvertDate.h:
* Source/WebCore/bindings/js/JSDOMConvertDictionary.h:
* Source/WebCore/bindings/js/JSDOMConvertEnumeration.h:
* Source/WebCore/bindings/js/JSDOMConvertEventListener.h:
* Source/WebCore/bindings/js/JSDOMConvertInterface.h:
* Source/WebCore/bindings/js/JSDOMConvertJSON.h:
* Source/WebCore/bindings/js/JSDOMConvertNull.h:
* Source/WebCore/bindings/js/JSDOMConvertNullable.h:
* Source/WebCore/bindings/js/JSDOMConvertNumbers.cpp:
* Source/WebCore/bindings/js/JSDOMConvertNumbers.h:
* Source/WebCore/bindings/js/JSDOMConvertObject.h:
* Source/WebCore/bindings/js/JSDOMConvertOptional.h:
* Source/WebCore/bindings/js/JSDOMConvertPromise.h:
* Source/WebCore/bindings/js/JSDOMConvertRecord.h:
* Source/WebCore/bindings/js/JSDOMConvertScheduledAction.h:
* Source/WebCore/bindings/js/JSDOMConvertSequences.h:
* Source/WebCore/bindings/js/JSDOMConvertSerializedScriptValue.h:
* Source/WebCore/bindings/js/JSDOMConvertXPathNSResolver.h:
* Source/WebCore/bindings/js/JSDOMConvertStrings.cpp:
* Source/WebCore/bindings/js/JSDOMConvertStrings.h:
- Update to return new ConversionResult type.
- Where there was a lot of unnecessary repetition, such as typed arrays,
strings and numbers, intermediary converters were added to help reduce
the overhead.
* Source/WebCore/bindings/js/JSDOMConvertUnion.h:
- In addition to updating to the new result type, some simplification was
done using constexpr to replace "Conditional*" meta-functions.
* Source/WebCore/bindings/js/JSDOMConvertVariadic.h:
- Updated to use the recently introduced FixedVector::createWithSizeFromGenerator,
which allows creation with non-default constructible arguments that can fail.
* Source/WebCore/Modules/applepay-ams-ui/ApplePayAMSUIPaymentHandler.cpp:
* Source/WebCore/Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
* Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp:
* Source/WebCore/Modules/mediastream/RTCRtpSFrameTransform.cpp:
* Source/WebCore/Modules/mediastream/RTCRtpScriptTransformer.cpp:
* Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:
* Source/WebCore/Modules/permissions/Permissions.cpp:
* Source/WebCore/Modules/streams/TransformStream.cpp:
* Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.cpp:
* Source/WebCore/Modules/webtransport/DatagramSink.cpp:
* Source/WebCore/animation/KeyframeEffect.cpp:
* Source/WebCore/bindings/js/InternalReadableStream.cpp:
* Source/WebCore/bindings/js/JSCustomElementRegistryCustom.cpp:
* Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:
* Source/WebCore/bindings/js/JSDocumentCustom.cpp:
* Source/WebCore/bindings/js/JSElementCustom.cpp:
* Source/WebCore/bindings/js/JSElementInternalsCustom.cpp:
* Source/WebCore/bindings/js/JSEventListener.cpp:
* Source/WebCore/bindings/js/JSExtendableMessageEventCustom.cpp:
* Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp:
* Source/WebCore/bindings/js/JSRTCRtpSFrameTransformCustom.cpp:
* Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp:
* Source/WebCore/bindings/js/JSWebAnimationCustom.cpp:
* Source/WebCore/crypto/SubtleCrypto.cpp:
* Source/WebCore/css/CSSStyleSheetObservableArray.cpp:
* Source/WebCore/html/HTMLCanvasElement.cpp:
* Source/WebCore/html/OffscreenCanvas.cpp:
* Source/WebCore/inspector/InspectorCanvas.cpp:
* Source/WebCore/inspector/InspectorCanvasCallTracer.h:
* Source/WebCore/worklets/PaintWorkletGlobalScope.cpp:
* Source/WebKit/WebProcess/Network/WebTransportSendStreamSink.cpp:
- Update account for new result types.
Canonical link: https://commits.webkit.org/279321@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list