diff options
Diffstat (limited to 'REVERT-simplify-blink-NativeValueTraitsBase.patch')
-rw-r--r-- | REVERT-simplify-blink-NativeValueTraitsBase.patch | 747 |
1 files changed, 0 insertions, 747 deletions
diff --git a/REVERT-simplify-blink-NativeValueTraitsBase.patch b/REVERT-simplify-blink-NativeValueTraitsBase.patch deleted file mode 100644 index fc046cbac0ba..000000000000 --- a/REVERT-simplify-blink-NativeValueTraitsBase.patch +++ /dev/null @@ -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; - |