123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747 |
- 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;
-
|