|
@@ -1,747 +0,0 @@
|
|
|
-From 940af9f2c87b436559b97c53763aa9eaaf1254eb Mon Sep 17 00:00:00 2001
|
|
|
-From: Jeremy Roman <jbroman@chromium.org>
|
|
|
-Date: Wed, 15 Nov 2023 16:24:54 +0000
|
|
|
-Subject: [PATCH] Use C++20 features to simplify blink::NativeValueTraitsBase.
|
|
|
-
|
|
|
-These allow some of the metaprogramming bits to be simplified a little.
|
|
|
-
|
|
|
-Change-Id: I052b4397586d21348401616e1792afdb9662f975
|
|
|
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5030335
|
|
|
-Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
|
|
|
-Commit-Queue: Jeremy Roman <jbroman@chromium.org>
|
|
|
-Cr-Commit-Position: refs/heads/main@{#1224978}
|
|
|
----
|
|
|
- .../bindings/core/v8/native_value_traits.h | 54 ++----
|
|
|
- .../v8/native_value_traits_buffer_sources.cc | 166 ++++++++----------
|
|
|
- .../core/v8/native_value_traits_impl.h | 159 +++++++----------
|
|
|
- 3 files changed, 151 insertions(+), 228 deletions(-)
|
|
|
-
|
|
|
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
|
|
|
-index 7fc91d14acc71a2..1e5a0790df6da81 100644
|
|
|
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
|
|
|
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
|
|
|
-@@ -5,6 +5,7 @@
|
|
|
- #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
|
|
|
- #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
|
|
|
-
|
|
|
-+#include <concepts>
|
|
|
- #include <type_traits>
|
|
|
-
|
|
|
- #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h"
|
|
|
-@@ -30,7 +31,7 @@ class ExceptionState;
|
|
|
- // return toInt32(isolate, value, exceptionState, NormalConversion);
|
|
|
- // }
|
|
|
- // }
|
|
|
--template <typename T, typename SFINAEHelper = void>
|
|
|
-+template <typename T>
|
|
|
- struct NativeValueTraits;
|
|
|
-
|
|
|
- // This declaration serves only as a blueprint for specializations: the
|
|
|
-@@ -45,22 +46,15 @@ struct NativeValueTraits;
|
|
|
-
|
|
|
- namespace bindings {
|
|
|
-
|
|
|
--template <typename T, typename = void>
|
|
|
--struct NativeValueTraitsHasIsNull : std::false_type {};
|
|
|
--
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraitsHasIsNull<
|
|
|
-- T,
|
|
|
-- std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
|
|
|
-+struct ImplTypeFor {
|
|
|
-+ using type = T;
|
|
|
-+};
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraitsHasNullValue {
|
|
|
-- // true if |T| supports IDL null value.
|
|
|
-- static constexpr bool value =
|
|
|
-- // ScriptValue, String, and union types have IsNull member function.
|
|
|
-- bindings::NativeValueTraitsHasIsNull<T>::value ||
|
|
|
-- // Pointer types have nullptr as IDL null value.
|
|
|
-- std::is_pointer<T>::value;
|
|
|
-+ requires std::derived_from<T, IDLBase>
|
|
|
-+struct ImplTypeFor<T> {
|
|
|
-+ using type = typename T::ImplType;
|
|
|
- };
|
|
|
-
|
|
|
- } // namespace bindings
|
|
|
-@@ -78,37 +72,17 @@ struct NativeValueTraitsHasNullValue {
|
|
|
- // If present, |NullValue()| will be used when converting from the nullable type
|
|
|
- // T?, and should be used if the impl type has an existing "null" state. If not
|
|
|
- // present, WTF::Optional will be used to wrap the type.
|
|
|
--template <typename T, typename SFINAEHelper = void>
|
|
|
--struct NativeValueTraitsBase {
|
|
|
-- STATIC_ONLY(NativeValueTraitsBase);
|
|
|
--
|
|
|
-- using ImplType = T;
|
|
|
--
|
|
|
-- static constexpr bool has_null_value =
|
|
|
-- bindings::NativeValueTraitsHasNullValue<ImplType>::value;
|
|
|
--
|
|
|
-- template <typename... ExtraArgs>
|
|
|
-- static decltype(auto) ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state,
|
|
|
-- ExtraArgs... extra_args) {
|
|
|
-- return NativeValueTraits<std::remove_pointer_t<T>>::NativeValue(
|
|
|
-- isolate, value, exception_state,
|
|
|
-- std::forward<ExtraArgs>(extra_args)...);
|
|
|
-- }
|
|
|
--};
|
|
|
--
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraitsBase<
|
|
|
-- T,
|
|
|
-- std::enable_if_t<std::is_base_of<IDLBase, T>::value>> {
|
|
|
-+struct NativeValueTraitsBase {
|
|
|
- STATIC_ONLY(NativeValueTraitsBase);
|
|
|
-
|
|
|
-- using ImplType = typename T::ImplType;
|
|
|
-+ using ImplType = bindings::ImplTypeFor<T>::type;
|
|
|
-
|
|
|
-+ // Pointer types have nullptr as IDL null value.
|
|
|
-+ // ScriptValue, String, and union types have IsNull member function.
|
|
|
- static constexpr bool has_null_value =
|
|
|
-- bindings::NativeValueTraitsHasNullValue<ImplType>::value;
|
|
|
-+ std::is_pointer_v<ImplType> ||
|
|
|
-+ requires(ImplType value) { value.IsNull(); };
|
|
|
-
|
|
|
- template <typename... ExtraArgs>
|
|
|
- static decltype(auto) ArgumentValue(v8::Isolate* isolate,
|
|
|
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
|
|
|
-index 508ea6d8eea481e..18de71d84023f0c 100644
|
|
|
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
|
|
|
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
|
|
|
-@@ -7,6 +7,7 @@
|
|
|
- #include "third_party/blink/renderer/core/core_export.h"
|
|
|
- #include "third_party/blink/renderer/core/execution_context/execution_context.h"
|
|
|
- #include "third_party/blink/renderer/core/frame/web_feature.h"
|
|
|
-+#include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h"
|
|
|
- #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h"
|
|
|
-
|
|
|
- namespace blink {
|
|
|
-@@ -698,12 +699,11 @@ DOMArrayBufferBase* NativeValueTraits<
|
|
|
- // ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--NotShared<T> NativeValueTraits<
|
|
|
-- NotShared<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- NativeValue(v8::Isolate* isolate,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return NativeValueImpl<
|
|
|
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
|
|
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -712,13 +712,12 @@ NotShared<T> NativeValueTraits<
|
|
|
- }
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--NotShared<T> NativeValueTraits<
|
|
|
-- NotShared<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+NotShared<T> NativeValueTraits<NotShared<T>>::ArgumentValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<
|
|
|
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
|
|
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -729,12 +728,11 @@ NotShared<T> NativeValueTraits<
|
|
|
- // [AllowShared] ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--MaybeShared<T> NativeValueTraits<
|
|
|
-- MaybeShared<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- NativeValue(v8::Isolate* isolate,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
|
|
|
- ToDOMViewType<T, kMaybeShared>,
|
|
|
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -743,13 +741,12 @@ MaybeShared<T> NativeValueTraits<
|
|
|
- }
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--MaybeShared<T> NativeValueTraits<
|
|
|
-- MaybeShared<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+MaybeShared<T> NativeValueTraits<MaybeShared<T>>::ArgumentValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
|
|
|
- ToDOMViewType<T, kMaybeShared>,
|
|
|
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -760,12 +757,12 @@ MaybeShared<T> NativeValueTraits<
|
|
|
- // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--MaybeShared<T> NativeValueTraits<
|
|
|
-- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- NativeValue(v8::Isolate* isolate,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+MaybeShared<T>
|
|
|
-+NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return NativeValueImpl<
|
|
|
- RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
|
|
|
- Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
|
|
|
-@@ -774,13 +771,12 @@ MaybeShared<T> NativeValueTraits<
|
|
|
- }
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--MaybeShared<T> NativeValueTraits<
|
|
|
-- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+MaybeShared<T> NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<
|
|
|
-+ MaybeShared<T>>>::ArgumentValue(v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<
|
|
|
- RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
|
|
|
- Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
|
|
|
-@@ -791,12 +787,11 @@ MaybeShared<T> NativeValueTraits<
|
|
|
- // Nullable ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--NotShared<T> NativeValueTraits<
|
|
|
-- IDLNullable<NotShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- NativeValue(v8::Isolate* isolate,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return NativeValueImpl<
|
|
|
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
|
|
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -805,13 +800,12 @@ NotShared<T> NativeValueTraits<
|
|
|
- }
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--NotShared<T> NativeValueTraits<
|
|
|
-- IDLNullable<NotShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::ArgumentValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<
|
|
|
- RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
|
|
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -822,12 +816,11 @@ NotShared<T> NativeValueTraits<
|
|
|
- // Nullable [AllowShared] ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--MaybeShared<T> NativeValueTraits<
|
|
|
-- IDLNullable<MaybeShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- NativeValue(v8::Isolate* isolate,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
|
|
|
- ToDOMViewType<T, kMaybeShared>,
|
|
|
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -836,13 +829,12 @@ MaybeShared<T> NativeValueTraits<
|
|
|
- }
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--MaybeShared<T> NativeValueTraits<
|
|
|
-- IDLNullable<MaybeShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::ArgumentValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
|
|
|
- ToDOMViewType<T, kMaybeShared>,
|
|
|
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
|
|
-@@ -853,9 +845,9 @@ MaybeShared<T> NativeValueTraits<
|
|
|
- // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--MaybeShared<T> NativeValueTraits<
|
|
|
-- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+MaybeShared<T>
|
|
|
-+NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
|
|
|
- ArgumentValue(v8::Isolate* isolate,
|
|
|
- int argument_index,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -870,13 +862,11 @@ MaybeShared<T> NativeValueTraits<
|
|
|
- // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--T NativeValueTraits<T,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, FlexibleArrayBufferView>
|
|
|
-+T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
|
|
|
- Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
|
|
- ResizableAllowance::kDisallowResizable,
|
|
|
-@@ -888,13 +878,12 @@ T NativeValueTraits<T,
|
|
|
- // ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, FlexibleArrayBufferView>
|
|
|
-+T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>::ArgumentValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<
|
|
|
- RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
|
|
|
- BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
|
|
|
-@@ -905,13 +894,12 @@ T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
|
|
|
- // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--T NativeValueTraits<IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
|
|
|
-- ArgumentValue(v8::Isolate* isolate,
|
|
|
-- int argument_index,
|
|
|
-- v8::Local<v8::Value> value,
|
|
|
-- ExceptionState& exception_state) {
|
|
|
-+ requires std::derived_from<T, FlexibleArrayBufferView>
|
|
|
-+T NativeValueTraits<IDLNullable<T>>::ArgumentValue(
|
|
|
-+ v8::Isolate* isolate,
|
|
|
-+ int argument_index,
|
|
|
-+ v8::Local<v8::Value> value,
|
|
|
-+ ExceptionState& exception_state) {
|
|
|
- return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
|
|
|
- Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
|
|
- ResizableAllowance::kDisallowResizable,
|
|
|
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
|
|
|
-index 899929dcf49f90a..5011503dcf1c0c8 100644
|
|
|
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
|
|
|
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
|
|
|
-@@ -5,6 +5,9 @@
|
|
|
- #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
|
|
|
- #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
|
|
|
-
|
|
|
-+#include <concepts>
|
|
|
-+#include <type_traits>
|
|
|
-+
|
|
|
- #include "third_party/abseil-cpp/absl/types/optional.h"
|
|
|
- #include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
|
|
|
- #include "third_party/blink/renderer/bindings/core/v8/native_value_traits.h"
|
|
|
-@@ -715,9 +718,8 @@ struct CORE_EXPORT NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+struct NativeValueTraits<T> {
|
|
|
- // NotShared<T> or MaybeShared<T> should be used instead.
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -729,9 +731,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+struct NativeValueTraits<IDLNullable<T>> {
|
|
|
- // NotShared<T> or MaybeShared<T> should be used instead.
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -743,9 +744,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- NotShared<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+struct NativeValueTraits<NotShared<T>>
|
|
|
- : public NativeValueTraitsBase<NotShared<T>> {
|
|
|
- static NotShared<T> NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -758,9 +758,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<NotShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+struct NativeValueTraits<IDLNullable<NotShared<T>>>
|
|
|
- : public NativeValueTraitsBase<NotShared<T>> {
|
|
|
- static NotShared<T> NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -773,9 +772,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- MaybeShared<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+struct NativeValueTraits<MaybeShared<T>>
|
|
|
- : public NativeValueTraitsBase<MaybeShared<T>> {
|
|
|
- static MaybeShared<T> NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -788,9 +786,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
|
|
|
- : public NativeValueTraitsBase<MaybeShared<T>> {
|
|
|
- // FlexibleArrayBufferView uses this in its implementation, so we cannot
|
|
|
- // delete it.
|
|
|
-@@ -805,9 +802,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<MaybeShared<T>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
-+struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
|
|
|
- : public NativeValueTraitsBase<MaybeShared<T>> {
|
|
|
- static MaybeShared<T> NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -820,9 +816,9 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
-+ requires std::derived_from<T, DOMArrayBufferView>
|
|
|
- struct NativeValueTraits<
|
|
|
-- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
|
|
-+ IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
|
|
|
- : public NativeValueTraitsBase<MaybeShared<T>> {
|
|
|
- // BufferSourceTypeNoSizeLimit must be used only as arguments.
|
|
|
- static MaybeShared<T> NativeValue(v8::Isolate* isolate,
|
|
|
-@@ -836,11 +832,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T> {
|
|
|
-+ requires std::derived_from<T, FlexibleArrayBufferView>
|
|
|
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
|
|
|
- // FlexibleArrayBufferView must be used only as arguments.
|
|
|
- static T NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -853,10 +846,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLBufferSourceTypeNoSizeLimit<T>,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>
|
|
|
-+ requires std::derived_from<T, FlexibleArrayBufferView>
|
|
|
-+struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
|
|
|
- : public NativeValueTraitsBase<T> {
|
|
|
- // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
|
|
|
- // as arguments.
|
|
|
-@@ -871,11 +862,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<FlexibleArrayBufferView, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T> {
|
|
|
-+ requires std::derived_from<T, FlexibleArrayBufferView>
|
|
|
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
|
|
|
- // FlexibleArrayBufferView must be used only as arguments.
|
|
|
- static T NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -1134,9 +1122,8 @@ NativeValueTraits<IDLSequence<T>>::NativeValue(
|
|
|
- }
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- NativeValueTraits<IDLSequence<T>>::has_null_value>>
|
|
|
-+ requires NativeValueTraits<IDLSequence<T>>::has_null_value
|
|
|
-+struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
|
|
|
- : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
|
|
|
- using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
|
|
|
-
|
|
|
-@@ -1203,9 +1190,8 @@ struct NativeValueTraits<IDLArray<T>>
|
|
|
- : public NativeValueTraits<IDLSequence<T>> {};
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<IDLNullable<IDLArray<T>>,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- NativeValueTraits<IDLSequence<T>>::has_null_value>>
|
|
|
-+ requires NativeValueTraits<IDLSequence<T>>::has_null_value
|
|
|
-+struct NativeValueTraits<IDLNullable<IDLArray<T>>>
|
|
|
- : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
|
|
|
-
|
|
|
- // Record types
|
|
|
-@@ -1335,10 +1321,8 @@ struct NativeValueTraits<IDLRecord<K, V>>
|
|
|
-
|
|
|
- // Callback function types
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T*> {
|
|
|
-+ requires std::derived_from<T, CallbackFunctionBase>
|
|
|
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1361,9 +1345,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
|
|
|
-+ requires std::derived_from<T, CallbackFunctionBase>
|
|
|
-+struct NativeValueTraits<IDLNullable<T>>
|
|
|
- : public NativeValueTraitsBase<IDLNullable<T>> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -1392,10 +1375,8 @@ struct NativeValueTraits<
|
|
|
-
|
|
|
- // Callback interface types
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T*> {
|
|
|
-+ requires std::derived_from<T, CallbackInterfaceBase>
|
|
|
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1418,9 +1399,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
|
|
|
-+ requires std::derived_from<T, CallbackInterfaceBase>
|
|
|
-+struct NativeValueTraits<IDLNullable<T>>
|
|
|
- : public NativeValueTraitsBase<IDLNullable<T>> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -1449,11 +1429,8 @@ struct NativeValueTraits<
|
|
|
-
|
|
|
- // Dictionary types
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<bindings::DictionaryBase, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T*> {
|
|
|
-+ requires std::derived_from<T, bindings::DictionaryBase>
|
|
|
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1464,14 +1441,11 @@ struct NativeValueTraits<
|
|
|
- // We don't support nullable dictionary types in general since it's quite
|
|
|
- // confusing and often misused.
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<bindings::DictionaryBase, T>::value &&
|
|
|
-- (std::is_same<T, GPUColorTargetState>::value ||
|
|
|
-- std::is_same<T, GPURenderPassColorAttachment>::value ||
|
|
|
-- std::is_same<T, GPUVertexBufferLayout>::value)>>
|
|
|
-- : public NativeValueTraitsBase<T*> {
|
|
|
-+ requires std::derived_from<T, bindings::DictionaryBase> &&
|
|
|
-+ (std::same_as<T, GPUColorTargetState> ||
|
|
|
-+ std::same_as<T, GPURenderPassColorAttachment> ||
|
|
|
-+ std::same_as<T, GPUVertexBufferLayout>)
|
|
|
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1483,11 +1457,8 @@ struct NativeValueTraits<
|
|
|
-
|
|
|
- // Enumeration types
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<
|
|
|
-- std::is_base_of<bindings::EnumerationBase, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T> {
|
|
|
-+ requires std::derived_from<T, bindings::EnumerationBase>
|
|
|
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
|
|
|
- static T NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1497,10 +1468,8 @@ struct NativeValueTraits<
|
|
|
-
|
|
|
- // Interface types
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T*> {
|
|
|
-+ requires std::derived_from<T, ScriptWrappable>
|
|
|
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
|
|
- static inline T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1528,9 +1497,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
|
|
|
-+ requires std::derived_from<T, ScriptWrappable>
|
|
|
-+struct NativeValueTraits<IDLNullable<T>>
|
|
|
- : public NativeValueTraitsBase<IDLNullable<T>> {
|
|
|
- static inline T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
-@@ -1565,10 +1533,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- T,
|
|
|
-- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T*> {
|
|
|
-+ requires std::derived_from<T, bindings::UnionBase>
|
|
|
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1584,10 +1550,8 @@ struct NativeValueTraits<
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<T>,
|
|
|
-- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
|
|
|
-- : public NativeValueTraitsBase<T*> {
|
|
|
-+ requires std::derived_from<T, bindings::UnionBase>
|
|
|
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
|
|
|
- static T* NativeValue(v8::Isolate* isolate,
|
|
|
- v8::Local<v8::Value> value,
|
|
|
- ExceptionState& exception_state) {
|
|
|
-@@ -1608,9 +1572,8 @@ struct NativeValueTraits<
|
|
|
-
|
|
|
- // Nullable types
|
|
|
- template <typename InnerType>
|
|
|
--struct NativeValueTraits<
|
|
|
-- IDLNullable<InnerType>,
|
|
|
-- typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
|
|
|
-+ requires(!NativeValueTraits<InnerType>::has_null_value)
|
|
|
-+struct NativeValueTraits<IDLNullable<InnerType>>
|
|
|
- : public NativeValueTraitsBase<IDLNullable<InnerType>> {
|
|
|
- // https://webidl.spec.whatwg.org/#es-nullable-type
|
|
|
- using ImplType =
|
|
|
-@@ -1642,9 +1605,8 @@ struct NativeValueTraits<IDLNullable<IDLNullable<T>>>;
|
|
|
-
|
|
|
- // Optional types
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<IDLOptional<T>,
|
|
|
-- typename std::enable_if_t<std::is_arithmetic<
|
|
|
-- typename NativeValueTraits<T>::ImplType>::value>>
|
|
|
-+ requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
|
|
|
-+struct NativeValueTraits<IDLOptional<T>>
|
|
|
- : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
|
|
|
- using ImplType = typename NativeValueTraits<T>::ImplType;
|
|
|
-
|
|
|
-@@ -1666,9 +1628,8 @@ struct NativeValueTraits<IDLOptional<T>,
|
|
|
- };
|
|
|
-
|
|
|
- template <typename T>
|
|
|
--struct NativeValueTraits<IDLOptional<T>,
|
|
|
-- typename std::enable_if_t<std::is_pointer<
|
|
|
-- typename NativeValueTraits<T>::ImplType>::value>>
|
|
|
-+ requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
|
|
|
-+struct NativeValueTraits<IDLOptional<T>>
|
|
|
- : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
|
|
|
- using ImplType = typename NativeValueTraits<T>::ImplType;
|
|
|
-
|