parent
db13fed161
commit
a8386adfcf
@ -1,133 +0,0 @@
|
||||
diff -Nur chromium-123.0.6312.46/third_party/rust/chromium_crates_io/vendor/clap_lex-0.7.0/src/ext.rs.me chromium-123.0.6312.46/third_party/rust/chromium_crates_io/vendor/clap_lex-0.7.0/src/ext.rs
|
||||
--- chromium-123.0.6312.46/third_party/rust/chromium_crates_io/vendor/clap_lex-0.7.0/src/ext.rs.me 2024-03-13 20:36:17.000000000 +0100
|
||||
+++ chromium-123.0.6312.46/third_party/rust/chromium_crates_io/vendor/clap_lex-0.7.0/src/ext.rs 2024-03-13 00:38:18.000000000 +0100
|
||||
@@ -2,9 +2,6 @@
|
||||
|
||||
pub trait OsStrExt: private::Sealed {
|
||||
/// Converts to a string slice.
|
||||
- ///
|
||||
- /// The Utf8Error is guaranteed to have a valid UTF8 boundary
|
||||
- /// in its `valid_up_to()`
|
||||
fn try_str(&self) -> Result<&str, std::str::Utf8Error>;
|
||||
/// Returns `true` if the given pattern matches a sub-slice of
|
||||
/// this string slice.
|
||||
@@ -183,7 +180,7 @@
|
||||
|
||||
impl OsStrExt for OsStr {
|
||||
fn try_str(&self) -> Result<&str, std::str::Utf8Error> {
|
||||
- let bytes = self.as_encoded_bytes();
|
||||
+ let bytes = to_bytes(self);
|
||||
std::str::from_utf8(bytes)
|
||||
}
|
||||
|
||||
@@ -192,22 +189,22 @@
|
||||
}
|
||||
|
||||
fn find(&self, needle: &str) -> Option<usize> {
|
||||
- let bytes = self.as_encoded_bytes();
|
||||
+ let bytes = to_bytes(self);
|
||||
(0..=self.len().checked_sub(needle.len())?)
|
||||
.find(|&x| bytes[x..].starts_with(needle.as_bytes()))
|
||||
}
|
||||
|
||||
fn strip_prefix(&self, prefix: &str) -> Option<&OsStr> {
|
||||
- let bytes = self.as_encoded_bytes();
|
||||
+ let bytes = to_bytes(self);
|
||||
bytes.strip_prefix(prefix.as_bytes()).map(|s| {
|
||||
// SAFETY:
|
||||
- // - This came from `as_encoded_bytes`
|
||||
- // - Since `prefix` is `&str`, any split will be along UTF-8 boundary
|
||||
- unsafe { OsStr::from_encoded_bytes_unchecked(s) }
|
||||
+ // - This came from `to_bytes`
|
||||
+ // - Since `prefix` is `&str`, any split will be along UTF-8 boundarie
|
||||
+ unsafe { to_os_str_unchecked(s) }
|
||||
})
|
||||
}
|
||||
fn starts_with(&self, prefix: &str) -> bool {
|
||||
- let bytes = self.as_encoded_bytes();
|
||||
+ let bytes = to_bytes(self);
|
||||
bytes.starts_with(prefix.as_bytes())
|
||||
}
|
||||
|
||||
@@ -222,18 +219,13 @@
|
||||
fn split_once(&self, needle: &'_ str) -> Option<(&OsStr, &OsStr)> {
|
||||
let start = self.find(needle)?;
|
||||
let end = start + needle.len();
|
||||
- let haystack = self.as_encoded_bytes();
|
||||
+ let haystack = to_bytes(self);
|
||||
let first = &haystack[0..start];
|
||||
let second = &haystack[end..];
|
||||
// SAFETY:
|
||||
- // - This came from `as_encoded_bytes`
|
||||
- // - Since `needle` is `&str`, any split will be along UTF-8 boundary
|
||||
- unsafe {
|
||||
- Some((
|
||||
- OsStr::from_encoded_bytes_unchecked(first),
|
||||
- OsStr::from_encoded_bytes_unchecked(second),
|
||||
- ))
|
||||
- }
|
||||
+ // - This came from `to_bytes`
|
||||
+ // - Since `needle` is `&str`, any split will be along UTF-8 boundarie
|
||||
+ unsafe { Some((to_os_str_unchecked(first), to_os_str_unchecked(second))) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,6 +235,45 @@
|
||||
impl Sealed for std::ffi::OsStr {}
|
||||
}
|
||||
|
||||
+/// Allow access to raw bytes
|
||||
+///
|
||||
+/// As the non-UTF8 encoding is not defined, the bytes only make sense when compared with
|
||||
+/// 7-bit ASCII or `&str`
|
||||
+///
|
||||
+/// # Compatibility
|
||||
+///
|
||||
+/// There is no guarantee how non-UTF8 bytes will be encoded, even within versions of this crate
|
||||
+/// (since its dependent on rustc)
|
||||
+fn to_bytes(s: &OsStr) -> &[u8] {
|
||||
+ // SAFETY:
|
||||
+ // - Lifetimes are the same
|
||||
+ // - Types are compatible (`OsStr` is effectively a transparent wrapper for `[u8]`)
|
||||
+ // - The primary contract is that the encoding for invalid surrogate code points is not
|
||||
+ // guaranteed which isn't a problem here
|
||||
+ //
|
||||
+ // There is a proposal to support this natively (https://github.com/rust-lang/rust/pull/95290)
|
||||
+ // but its in limbo
|
||||
+ unsafe { std::mem::transmute(s) }
|
||||
+}
|
||||
+
|
||||
+/// Restore raw bytes as `OsStr`
|
||||
+///
|
||||
+/// # Safety
|
||||
+///
|
||||
+/// - `&[u8]` must either by a `&str` or originated with `to_bytes` within the same binary
|
||||
+/// - Any splits of the original `&[u8]` must be done along UTF-8 boundaries
|
||||
+unsafe fn to_os_str_unchecked(s: &[u8]) -> &OsStr {
|
||||
+ // SAFETY:
|
||||
+ // - Lifetimes are the same
|
||||
+ // - Types are compatible (`OsStr` is effectively a transparent wrapper for `[u8]`)
|
||||
+ // - The primary contract is that the encoding for invalid surrogate code points is not
|
||||
+ // guaranteed which isn't a problem here
|
||||
+ //
|
||||
+ // There is a proposal to support this natively (https://github.com/rust-lang/rust/pull/95290)
|
||||
+ // but its in limbo
|
||||
+ std::mem::transmute(s)
|
||||
+}
|
||||
+
|
||||
pub struct Split<'s, 'n> {
|
||||
haystack: Option<&'s OsStr>,
|
||||
needle: &'n str,
|
||||
@@ -275,10 +306,7 @@
|
||||
///
|
||||
/// `index` must be at a valid UTF-8 boundary
|
||||
pub(crate) unsafe fn split_at(os: &OsStr, index: usize) -> (&OsStr, &OsStr) {
|
||||
- let bytes = os.as_encoded_bytes();
|
||||
+ let bytes = to_bytes(os);
|
||||
let (first, second) = bytes.split_at(index);
|
||||
- (
|
||||
- OsStr::from_encoded_bytes_unchecked(first),
|
||||
- OsStr::from_encoded_bytes_unchecked(second),
|
||||
- )
|
||||
+ (to_os_str_unchecked(first), to_os_str_unchecked(second))
|
||||
}
|
@ -1,739 +0,0 @@
|
||||
revert as workaround for compiler error with old clang < 17
|
||||
|
||||
commit 940af9f2c87b436559b97c53763aa9eaaf1254eb
|
||||
Author: Jeremy Roman <jbroman@chromium.org>
|
||||
Date: Wed Nov 15 16:24:54 2023 +0000
|
||||
|
||||
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}
|
||||
|
||||
--- 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,7 +5,6 @@
|
||||
#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"
|
||||
@@ -31,7 +30,7 @@ class ExceptionState;
|
||||
// return toInt32(isolate, value, exceptionState, NormalConversion);
|
||||
// }
|
||||
// }
|
||||
-template <typename T>
|
||||
+template <typename T, typename SFINAEHelper = void>
|
||||
struct NativeValueTraits;
|
||||
|
||||
// This declaration serves only as a blueprint for specializations: the
|
||||
@@ -46,15 +45,22 @@ struct NativeValueTraits;
|
||||
|
||||
namespace bindings {
|
||||
|
||||
+template <typename T, typename = void>
|
||||
+struct NativeValueTraitsHasIsNull : std::false_type {};
|
||||
+
|
||||
template <typename T>
|
||||
-struct ImplTypeFor {
|
||||
- using type = T;
|
||||
-};
|
||||
+struct NativeValueTraitsHasIsNull<
|
||||
+ T,
|
||||
+ std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, IDLBase>
|
||||
-struct ImplTypeFor<T> {
|
||||
- using type = typename T::ImplType;
|
||||
+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;
|
||||
};
|
||||
|
||||
} // namespace bindings
|
||||
@@ -72,17 +78,37 @@ struct ImplTypeFor<T> {
|
||||
// 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>
|
||||
+template <typename T, typename SFINAEHelper = void>
|
||||
struct NativeValueTraitsBase {
|
||||
STATIC_ONLY(NativeValueTraitsBase);
|
||||
|
||||
- using ImplType = bindings::ImplTypeFor<T>::type;
|
||||
+ 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>> {
|
||||
+ STATIC_ONLY(NativeValueTraitsBase);
|
||||
+
|
||||
+ using ImplType = typename T::ImplType;
|
||||
|
||||
- // Pointer types have nullptr as IDL null value.
|
||||
- // ScriptValue, String, and union types have IsNull member function.
|
||||
static constexpr bool has_null_value =
|
||||
- std::is_pointer_v<ImplType> ||
|
||||
- requires(ImplType value) { value.IsNull(); };
|
||||
+ bindings::NativeValueTraitsHasNullValue<ImplType>::value;
|
||||
|
||||
// This should only be true for certain subclasses of ScriptWrappable
|
||||
// that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
|
||||
--- 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,7 +7,6 @@
|
||||
#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,11 +697,12 @@ DOMArrayBufferBase* NativeValueTraits<
|
||||
// ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
|
||||
- v8::Isolate* isolate,
|
||||
- v8::Local<v8::Value> value,
|
||||
- ExceptionState& exception_state) {
|
||||
+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) {
|
||||
return NativeValueImpl<
|
||||
RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
||||
Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
||||
@@ -711,12 +711,13 @@ NotShared<T> NativeValueTraits<NotShared
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
- 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) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<
|
||||
RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
||||
Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
||||
@@ -727,11 +728,12 @@ NotShared<T> NativeValueTraits<NotShared
|
||||
// [AllowShared] ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
|
||||
- v8::Isolate* isolate,
|
||||
- v8::Local<v8::Value> value,
|
||||
- ExceptionState& exception_state) {
|
||||
+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) {
|
||||
return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
|
||||
ToDOMViewType<T, kMaybeShared>,
|
||||
Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
||||
@@ -740,12 +742,13 @@ MaybeShared<T> NativeValueTraits<MaybeSh
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
- 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) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
|
||||
ToDOMViewType<T, kMaybeShared>,
|
||||
Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
||||
@@ -756,12 +759,12 @@ MaybeShared<T> NativeValueTraits<MaybeSh
|
||||
// [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-MaybeShared<T>
|
||||
-NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
|
||||
- v8::Isolate* isolate,
|
||||
- v8::Local<v8::Value> value,
|
||||
- ExceptionState& exception_state) {
|
||||
+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) {
|
||||
return NativeValueImpl<
|
||||
RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
|
||||
Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
|
||||
@@ -770,12 +773,13 @@ NativeValueTraits<IDLBufferSourceTypeNoS
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
- 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) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<
|
||||
RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
|
||||
Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
|
||||
@@ -786,11 +790,12 @@ MaybeShared<T> NativeValueTraits<IDLBuff
|
||||
// Nullable ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
|
||||
- v8::Isolate* isolate,
|
||||
- v8::Local<v8::Value> value,
|
||||
- ExceptionState& exception_state) {
|
||||
+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) {
|
||||
return NativeValueImpl<
|
||||
RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
||||
Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
||||
@@ -799,12 +804,13 @@ NotShared<T> NativeValueTraits<IDLNullab
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
- 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) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<
|
||||
RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
|
||||
Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
||||
@@ -815,11 +821,12 @@ NotShared<T> NativeValueTraits<IDLNullab
|
||||
// Nullable [AllowShared] ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
|
||||
- v8::Isolate* isolate,
|
||||
- v8::Local<v8::Value> value,
|
||||
- ExceptionState& exception_state) {
|
||||
+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) {
|
||||
return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
|
||||
ToDOMViewType<T, kMaybeShared>,
|
||||
Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
||||
@@ -828,12 +835,13 @@ MaybeShared<T> NativeValueTraits<IDLNull
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
- 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) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
|
||||
ToDOMViewType<T, kMaybeShared>,
|
||||
Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
||||
@@ -844,9 +852,9 @@ MaybeShared<T> NativeValueTraits<IDLNull
|
||||
// Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-MaybeShared<T>
|
||||
-NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
|
||||
+MaybeShared<T> NativeValueTraits<
|
||||
+ IDLNullable<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,
|
||||
@@ -861,11 +869,13 @@ NativeValueTraits<IDLNullable<IDLBufferS
|
||||
// [AllowShared, FlexibleArrayBufferView] ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, FlexibleArrayBufferView>
|
||||
-T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
|
||||
- int argument_index,
|
||||
- v8::Local<v8::Value> value,
|
||||
- ExceptionState& exception_state) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
|
||||
Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
|
||||
ResizableAllowance::kDisallowResizable,
|
||||
@@ -877,12 +887,13 @@ T NativeValueTraits<T>::ArgumentValue(v8
|
||||
// ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- 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) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<
|
||||
RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
|
||||
BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
|
||||
@@ -893,12 +904,13 @@ T NativeValueTraits<IDLBufferSourceTypeN
|
||||
// Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
|
||||
|
||||
template <typename T>
|
||||
- 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) {
|
||||
+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) {
|
||||
return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
|
||||
Nullablity::kIsNullable, BufferSizeCheck::kCheck,
|
||||
ResizableAllowance::kDisallowResizable,
|
||||
--- 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,9 +5,7 @@
|
||||
#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 <optional>
|
||||
-#include <type_traits>
|
||||
|
||||
#include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
|
||||
#include "third_party/blink/renderer/bindings/core/v8/native_value_traits.h"
|
||||
@@ -718,8 +716,9 @@ struct CORE_EXPORT NativeValueTraits<
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-struct NativeValueTraits<T> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
|
||||
// NotShared<T> or MaybeShared<T> should be used instead.
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -731,8 +730,9 @@ struct NativeValueTraits<T> {
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-struct NativeValueTraits<IDLNullable<T>> {
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<T>,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
|
||||
// NotShared<T> or MaybeShared<T> should be used instead.
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -744,8 +744,9 @@ struct NativeValueTraits<IDLNullable<T>>
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-struct NativeValueTraits<NotShared<T>>
|
||||
+struct NativeValueTraits<
|
||||
+ NotShared<T>,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
||||
: public NativeValueTraitsBase<NotShared<T>> {
|
||||
static NotShared<T> NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -758,8 +759,9 @@ struct NativeValueTraits<NotShared<T>>
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-struct NativeValueTraits<IDLNullable<NotShared<T>>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<NotShared<T>>,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
||||
: public NativeValueTraitsBase<NotShared<T>> {
|
||||
static NotShared<T> NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -772,8 +774,9 @@ struct NativeValueTraits<IDLNullable<Not
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-struct NativeValueTraits<MaybeShared<T>>
|
||||
+struct NativeValueTraits<
|
||||
+ MaybeShared<T>,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
||||
: public NativeValueTraitsBase<MaybeShared<T>> {
|
||||
static MaybeShared<T> NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -786,8 +789,9 @@ struct NativeValueTraits<MaybeShared<T>>
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
||||
: public NativeValueTraitsBase<MaybeShared<T>> {
|
||||
// FlexibleArrayBufferView uses this in its implementation, so we cannot
|
||||
// delete it.
|
||||
@@ -802,8 +806,9 @@ struct NativeValueTraits<IDLBufferSource
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
-struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<MaybeShared<T>>,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
||||
: public NativeValueTraitsBase<MaybeShared<T>> {
|
||||
static MaybeShared<T> NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -816,9 +821,9 @@ struct NativeValueTraits<IDLNullable<May
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, DOMArrayBufferView>
|
||||
struct NativeValueTraits<
|
||||
- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
|
||||
+ IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
|
||||
+ typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
|
||||
: public NativeValueTraitsBase<MaybeShared<T>> {
|
||||
// BufferSourceTypeNoSizeLimit must be used only as arguments.
|
||||
static MaybeShared<T> NativeValue(v8::Isolate* isolate,
|
||||
@@ -832,8 +837,11 @@ struct NativeValueTraits<
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, FlexibleArrayBufferView>
|
||||
-struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<
|
||||
+ std::is_base_of<FlexibleArrayBufferView, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T> {
|
||||
// FlexibleArrayBufferView must be used only as arguments.
|
||||
static T NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -846,8 +854,10 @@ struct NativeValueTraits<T> : public Nat
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, FlexibleArrayBufferView>
|
||||
-struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLBufferSourceTypeNoSizeLimit<T>,
|
||||
+ typename std::enable_if_t<
|
||||
+ std::is_base_of<FlexibleArrayBufferView, T>::value>>
|
||||
: public NativeValueTraitsBase<T> {
|
||||
// BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
|
||||
// as arguments.
|
||||
@@ -862,8 +872,11 @@ struct NativeValueTraits<IDLBufferSource
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, FlexibleArrayBufferView>
|
||||
-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<T>,
|
||||
+ typename std::enable_if_t<
|
||||
+ std::is_base_of<FlexibleArrayBufferView, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T> {
|
||||
// FlexibleArrayBufferView must be used only as arguments.
|
||||
static T NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -1199,8 +1212,9 @@ NativeValueTraits<IDLSequence<T>>::Nativ
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
- requires NativeValueTraits<IDLSequence<T>>::has_null_value
|
||||
-struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
|
||||
+struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
|
||||
+ typename std::enable_if_t<
|
||||
+ NativeValueTraits<IDLSequence<T>>::has_null_value>>
|
||||
: public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
|
||||
using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
|
||||
|
||||
@@ -1276,8 +1290,9 @@ struct NativeValueTraits<IDLArray<T>>
|
||||
: public NativeValueTraits<IDLSequence<T>> {};
|
||||
|
||||
template <typename T>
|
||||
- requires NativeValueTraits<IDLSequence<T>>::has_null_value
|
||||
-struct NativeValueTraits<IDLNullable<IDLArray<T>>>
|
||||
+struct NativeValueTraits<IDLNullable<IDLArray<T>>,
|
||||
+ typename std::enable_if_t<
|
||||
+ NativeValueTraits<IDLSequence<T>>::has_null_value>>
|
||||
: public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
|
||||
|
||||
// Record types
|
||||
@@ -1407,8 +1422,10 @@ struct NativeValueTraits<IDLRecord<K, V>
|
||||
|
||||
// Callback function types
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, CallbackFunctionBase>
|
||||
-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T*> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
ExceptionState& exception_state) {
|
||||
@@ -1431,8 +1448,9 @@ struct NativeValueTraits<T> : public Nat
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, CallbackFunctionBase>
|
||||
-struct NativeValueTraits<IDLNullable<T>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<T>,
|
||||
+ typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
|
||||
: public NativeValueTraitsBase<IDLNullable<T>> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -1461,8 +1479,10 @@ struct NativeValueTraits<IDLNullable<T>>
|
||||
|
||||
// Callback interface types
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, CallbackInterfaceBase>
|
||||
-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T*> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
ExceptionState& exception_state) {
|
||||
@@ -1486,8 +1506,9 @@ struct NativeValueTraits<T> : public Nat
|
||||
|
||||
// Interface types
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, CallbackInterfaceBase>
|
||||
-struct NativeValueTraits<IDLNullable<T>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<T>,
|
||||
+ typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
|
||||
: public NativeValueTraitsBase<IDLNullable<T>> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -1516,8 +1537,11 @@ struct NativeValueTraits<IDLNullable<T>>
|
||||
|
||||
// Dictionary types
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, bindings::DictionaryBase>
|
||||
-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<
|
||||
+ std::is_base_of<bindings::DictionaryBase, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T*> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
ExceptionState& exception_state) {
|
||||
@@ -1528,11 +1552,14 @@ struct NativeValueTraits<T> : public Nat
|
||||
// We don't support nullable dictionary types in general since it's quite
|
||||
// confusing and often misused.
|
||||
template <typename 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*> {
|
||||
+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*> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
ExceptionState& exception_state) {
|
||||
@@ -1544,8 +1571,11 @@ struct NativeValueTraits<IDLNullable<T>>
|
||||
|
||||
// Enumeration types
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, bindings::EnumerationBase>
|
||||
-struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<
|
||||
+ std::is_base_of<bindings::EnumerationBase, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T> {
|
||||
static T NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
ExceptionState& exception_state) {
|
||||
@@ -1555,8 +1585,10 @@ struct NativeValueTraits<T> : public Nat
|
||||
|
||||
// Interface types
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, ScriptWrappable>
|
||||
-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T*> {
|
||||
// This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
|
||||
// certain optimization based on assumptions about `NativeValue()`
|
||||
// implementation below. For subclasses of ScriptWrappable that have
|
||||
@@ -1593,8 +1625,9 @@ struct NativeValueTraits<T> : public Nat
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, ScriptWrappable>
|
||||
-struct NativeValueTraits<IDLNullable<T>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<T>,
|
||||
+ typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
|
||||
: public NativeValueTraitsBase<IDLNullable<T>> {
|
||||
static inline T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
@@ -1629,8 +1662,10 @@ struct NativeValueTraits<IDLNullable<T>>
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, bindings::UnionBase>
|
||||
-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
|
||||
+struct NativeValueTraits<
|
||||
+ T,
|
||||
+ typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T*> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
ExceptionState& exception_state) {
|
||||
@@ -1646,8 +1681,10 @@ struct NativeValueTraits<T> : public Nat
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::derived_from<T, bindings::UnionBase>
|
||||
-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<T>,
|
||||
+ typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
|
||||
+ : public NativeValueTraitsBase<T*> {
|
||||
static T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
||||
ExceptionState& exception_state) {
|
||||
@@ -1668,8 +1705,9 @@ struct NativeValueTraits<IDLNullable<T>>
|
||||
|
||||
// Nullable types
|
||||
template <typename InnerType>
|
||||
- requires(!NativeValueTraits<InnerType>::has_null_value)
|
||||
-struct NativeValueTraits<IDLNullable<InnerType>>
|
||||
+struct NativeValueTraits<
|
||||
+ IDLNullable<InnerType>,
|
||||
+ typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
|
||||
: public NativeValueTraitsBase<IDLNullable<InnerType>> {
|
||||
// https://webidl.spec.whatwg.org/#es-nullable-type
|
||||
using ImplType =
|
||||
@@ -1701,8 +1739,9 @@ struct NativeValueTraits<IDLNullable<IDL
|
||||
|
||||
// Optional types
|
||||
template <typename T>
|
||||
- requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
|
||||
-struct NativeValueTraits<IDLOptional<T>>
|
||||
+struct NativeValueTraits<IDLOptional<T>,
|
||||
+ typename std::enable_if_t<std::is_arithmetic<
|
||||
+ typename NativeValueTraits<T>::ImplType>::value>>
|
||||
: public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
|
||||
using ImplType = typename NativeValueTraits<T>::ImplType;
|
||||
|
||||
@@ -1724,8 +1763,9 @@ struct NativeValueTraits<IDLOptional<T>>
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
- requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
|
||||
-struct NativeValueTraits<IDLOptional<T>>
|
||||
+struct NativeValueTraits<IDLOptional<T>,
|
||||
+ typename std::enable_if_t<std::is_pointer<
|
||||
+ typename NativeValueTraits<T>::ImplType>::value>>
|
||||
: public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
|
||||
using ImplType = typename NativeValueTraits<T>::ImplType;
|
||||
|
@ -1,144 +0,0 @@
|
||||
revert as workaround for compiler error with old clang < 17
|
||||
|
||||
commit ce71348a09f6689dd01a68db64b172191d0182d8
|
||||
Author: Andrey Kosyakov <caseq@chromium.org>
|
||||
Date: Thu Dec 21 18:38:38 2023 +0000
|
||||
|
||||
[bindings] Use v8::Array::Iterate for converting script wrappables
|
||||
|
||||
|
||||
This changes CreateIDLSequenceFromV8Array to use the new
|
||||
v8::Array::Iterate() operation.
|
||||
This speeds up the "execBundles" part of the microbenchmark
|
||||
at crbug.com/dawn/1858 by around 3x.
|
||||
This depends on crrev.com/c/4846594 landing (and rolling) first.
|
||||
|
||||
This is a slight re-work of https://crrev.com/c/4847447/3,
|
||||
originally by jkummerow@chromium.org
|
||||
|
||||
Bug: v8:14218, dawn:1858, 1511239
|
||||
Change-Id: Ia266556d05b4d53e6942e12609d1c08882b4ff0f
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5132129
|
||||
Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
|
||||
Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#1240236}
|
||||
|
||||
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h 2024-05-13 20:23:41.165774029 +0200
|
||||
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h 2024-05-13 20:27:58.994663485 +0200
|
||||
@@ -110,12 +110,6 @@ struct NativeValueTraitsBase<
|
||||
static constexpr bool has_null_value =
|
||||
bindings::NativeValueTraitsHasNullValue<ImplType>::value;
|
||||
|
||||
- // This should only be true for certain subclasses of ScriptWrappable
|
||||
- // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
|
||||
- // regards to how NativeValue() is implemented for the underlying type.
|
||||
- static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
|
||||
- false;
|
||||
-
|
||||
template <typename... ExtraArgs>
|
||||
static decltype(auto) ArgumentValue(v8::Isolate* isolate,
|
||||
int argument_index,
|
||||
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h 2024-05-13 20:23:47.295915837 +0200
|
||||
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h 2024-05-13 20:27:21.649808564 +0200
|
||||
@@ -1050,87 +1050,11 @@ CreateIDLSequenceFromV8ArraySlow(v8::Iso
|
||||
return {};
|
||||
}
|
||||
|
||||
- using ResultType = typename NativeValueTraits<IDLSequence<T>>::ImplType;
|
||||
- ResultType result;
|
||||
+ typename NativeValueTraits<IDLSequence<T>>::ImplType result;
|
||||
result.ReserveInitialCapacity(length);
|
||||
v8::Local<v8::Context> current_context = isolate->GetCurrentContext();
|
||||
v8::TryCatch try_block(isolate);
|
||||
|
||||
- // Fast path -- we're creating a sequence of script wrappables, which can be
|
||||
- // done by directly getting underlying object as long as array types are
|
||||
- // homogeneous. With ScriptWrappables, we don't expect to enter JS during
|
||||
- // iteration, so we can rely on v8::Array::Iterate() which is much faster than
|
||||
- // iterating an array on the client side of the v8. Additionally, for most
|
||||
- // subsptyes of ScriptWrappables, we can speed up type checks (see more on
|
||||
- // that below next to supports_scriptwrappable_specific_fast_array_iteration
|
||||
- // check.
|
||||
- if constexpr (std::is_base_of_v<ScriptWrappable, T>) {
|
||||
- struct CallbackData {
|
||||
- STACK_ALLOCATED();
|
||||
-
|
||||
- public:
|
||||
- v8::Isolate* isolate;
|
||||
- v8::TypecheckWitness witness;
|
||||
- ResultType& result;
|
||||
- ExceptionState& exception_state;
|
||||
- CallbackData(v8::Isolate* isolate,
|
||||
- ResultType& result,
|
||||
- ExceptionState& exception_state)
|
||||
- : isolate(isolate),
|
||||
- witness(isolate),
|
||||
- result(result),
|
||||
- exception_state(exception_state) {}
|
||||
- };
|
||||
-
|
||||
- CallbackData callback_data(isolate, result, exception_state);
|
||||
- v8::Array::IterationCallback callback = [](uint32_t index,
|
||||
- v8::Local<v8::Value> v8_element,
|
||||
- void* data) {
|
||||
- CallbackData* callback_data = reinterpret_cast<CallbackData*>(data);
|
||||
- v8::Isolate* isolate = callback_data->isolate;
|
||||
- // 3.4. Initialize Si to the result of converting nextItem to an IDL value
|
||||
- // of type T.
|
||||
- v8::TypecheckWitness& witness = callback_data->witness;
|
||||
- // We can speed up type check by taking advantage of V8's type witness,
|
||||
- // provided traits' NativeValue implementation doesn't have additional
|
||||
- // logic beyond checking the type and calling ToScriptWrappable().
|
||||
- if constexpr (
|
||||
- NativeValueTraits<
|
||||
- T>::supports_scriptwrappable_specific_fast_array_iteration) {
|
||||
- if (witness.Matches(v8_element)) {
|
||||
- auto&& value = ToScriptWrappable(isolate, v8_element.As<v8::Object>())
|
||||
- ->template ToImpl<T>();
|
||||
- callback_data->result.push_back(std::move(value));
|
||||
- return v8::Array::CallbackResult::kContinue;
|
||||
- }
|
||||
- }
|
||||
- auto&& element = NativeValueTraits<T>::NativeValue(
|
||||
- isolate, v8_element, callback_data->exception_state);
|
||||
- if (callback_data->exception_state.HadException()) {
|
||||
- // It doesn't matter whether we return `kException` or `kBreak` here,
|
||||
- // as that only affects the return value of `v8_array->Iterate()`,
|
||||
- // which we are ignoring.
|
||||
- return v8::Array::CallbackResult::kException;
|
||||
- }
|
||||
- if constexpr (
|
||||
- NativeValueTraits<
|
||||
- T>::supports_scriptwrappable_specific_fast_array_iteration) {
|
||||
- witness.Update(v8_element);
|
||||
- }
|
||||
- callback_data->result.push_back(std::move(element));
|
||||
- return v8::Array::CallbackResult::kContinue;
|
||||
- };
|
||||
- if (!v8_array->Iterate(current_context, callback, &callback_data)
|
||||
- .IsJust()) {
|
||||
- if (try_block.HasCaught()) {
|
||||
- exception_state.RethrowV8Exception(try_block.Exception());
|
||||
- }
|
||||
- DCHECK(exception_state.HadException());
|
||||
- return {};
|
||||
- }
|
||||
- return result;
|
||||
- }
|
||||
-
|
||||
// Array length may change if array is mutated during iteration.
|
||||
for (uint32_t i = 0; i < v8_array->Length(); ++i) {
|
||||
v8::Local<v8::Value> v8_element;
|
||||
@@ -1590,12 +1514,6 @@ struct NativeValueTraits<
|
||||
T,
|
||||
typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
|
||||
: public NativeValueTraitsBase<T*> {
|
||||
- // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
|
||||
- // certain optimization based on assumptions about `NativeValue()`
|
||||
- // implementation below. For subclasses of ScriptWrappable that have
|
||||
- // different implementation of NativeValue(), this should remain false.
|
||||
- static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
|
||||
- true;
|
||||
|
||||
static inline T* NativeValue(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> value,
|
@ -1,22 +0,0 @@
|
||||
diff -up chromium-126.0.6478.26/build/config/compiler/BUILD.gn.clang16-buildflag chromium-126.0.6478.26/build/config/compiler/BUILD.gn
|
||||
--- chromium-126.0.6478.26/build/config/compiler/BUILD.gn.clang16-buildflag 2024-06-02 14:55:55.298242780 +0200
|
||||
+++ chromium-126.0.6478.26/build/config/compiler/BUILD.gn 2024-06-02 15:04:43.839882669 +0200
|
||||
@@ -1889,9 +1889,6 @@ config("default_warnings") {
|
||||
|
||||
# TODO(crbug.com/40286317): Evaluate and possibly enable.
|
||||
"-Wno-vla-extension",
|
||||
-
|
||||
- # TODO(crbug.com/40284799): Fix and re-enable.
|
||||
- "-Wno-thread-safety-reference-return",
|
||||
]
|
||||
|
||||
cflags_cc += [
|
||||
@@ -1902,7 +1899,7 @@ config("default_warnings") {
|
||||
if (!is_nacl) {
|
||||
cflags_cc += [
|
||||
# TODO(crbug.com/41486292): Fix and re-enable.
|
||||
- "-Wno-c++11-narrowing-const-reference",
|
||||
+ "-Wno-c++11-narrowing",
|
||||
]
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
diff -up chromium-126.0.6478.26/build/config/compiler/BUILD.gn.clang16-disable-auto-upgrade-debug-info chromium-126.0.6478.26/build/config/compiler/BUILD.gn
|
||||
--- chromium-126.0.6478.26/build/config/compiler/BUILD.gn.clang16-disable-auto-upgrade-debug-info 2024-06-02 18:00:17.914641767 +0200
|
||||
+++ chromium-126.0.6478.26/build/config/compiler/BUILD.gn 2024-06-02 18:02:32.153544892 +0200
|
||||
@@ -780,7 +780,7 @@ config("compiler") {
|
||||
|
||||
# We only use one version of LLVM within a build so there's no need to
|
||||
# upgrade debug info, which can be expensive since it runs the verifier.
|
||||
- ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ]
|
||||
+ ldflags += [ "" ]
|
||||
}
|
||||
|
||||
# TODO(crbug.com/335365324): Enable on other platforms.
|
Loading…
Reference in new issue