summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvangelos Foutras2024-02-06 13:07:17 +0200
committerEvangelos Foutras2024-02-06 13:07:17 +0200
commite7927e9f9f1f08bcf178248508785e460dedc5ff (patch)
tree09b9325455758d9fa3d0f9486f3191430d01053b
parentbc6dfb4ba7d41c6a829e29431a0d3aea3dbb957e (diff)
downloadaur-e7927e9f9f1f08bcf178248508785e460dedc5ff.tar.gz
Include NativeValueTraitsBase patch file in repo
Abbreviated hashes in GitHub's patch files can change as the repo grows and thus invalidate their checksum. Include the patch file in the repo. See merge request !3
-rw-r--r--PKGBUILD2
-rw-r--r--REVERT-simplify-blink-NativeValueTraitsBase.patch747
2 files changed, 748 insertions, 1 deletions
diff --git a/PKGBUILD b/PKGBUILD
index f6bc793e5fc5..a48d6757ee67 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -28,7 +28,7 @@ options=('!lto') # Chromium adds its own flags for ThinLTO
source=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz
https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver/chromium-launcher-$_launcher_ver.tar.gz
https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/${pkgver%%.*}/chromium-patches-${pkgver%%.*}.tar.bz2
- REVERT-simplify-blink-NativeValueTraitsBase.patch::https://github.com/chromium/chromium/commit/940af9f2c87b.patch
+ REVERT-simplify-blink-NativeValueTraitsBase.patch
icu-74.patch
chromium-121-constexpr.patch
drop-flags-unsupported-by-clang16.patch
diff --git a/REVERT-simplify-blink-NativeValueTraitsBase.patch b/REVERT-simplify-blink-NativeValueTraitsBase.patch
new file mode 100644
index 000000000000..fc046cbac0ba
--- /dev/null
+++ b/REVERT-simplify-blink-NativeValueTraitsBase.patch
@@ -0,0 +1,747 @@
+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;
+