5#ifndef INCLUDE_V8_OBJECT_H_
6#define INCLUDE_V8_OBJECT_H_
24class FunctionTemplate;
26class PropertyCallbackInfo;
75 static void CheckCast(
Data* that);
148 PrivateData* private_;
411 SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
412 SideEffectType setter_side_effect_type = SideEffectType::kHasSideEffect);
417 SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
418 SideEffectType setter_side_effect_type = SideEffectType::kHasSideEffect);
425 SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
426 SideEffectType setter_side_effect_type = SideEffectType::kHasSideEffect) {
427 return SetNativeDataProperty(
428 context, name, getter,
430 getter_side_effect_type, setter_side_effect_type);
445 SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
446 SideEffectType setter_side_effect_type = SideEffectType::kHasSideEffect);
498 inline
Local<
Value> GetPrototypeV2() {
return GetPrototype(); }
510 return SetPrototype(context, prototype);
543 return object.template value<Object>()->InternalFieldCount();
549 return object.template value<Object>()->InternalFieldCount();
572 V8_INLINE void* GetAlignedPointerFromInternalField(
int index,
582 return object.template value<Object>()->GetAlignedPointerFromInternalField(
590 return object.template value<Object>()->GetAlignedPointerFromInternalField(
635 template <CppHeapPo
interTag tag,
typename T =
void>
638 template <CppHeapPo
interTag tag,
typename T =
void>
641 template <CppHeapPo
interTag tag,
typename T =
void>
645 template <
typename T =
void>
649 template <
typename T =
void>
653 template <
typename T =
void>
667 template <CppHeapPo
interTag tag>
670 Wrappable* wrappable);
671 template <CppHeapPo
interTag tag>
674 Wrappable* wrappable);
675 template <CppHeapPo
interTag tag>
678 Wrappable* wrappable);
809 return object.template value<Object>()->GetCreationContext(isolate);
834 void* GetAlignedPointerFromEmbedderDataInCreationContext(
836 void* GetAlignedPointerFromEmbedderDataInCreationContext(
844 bool IsCallable() const;
849 bool IsConstructor() const;
862 bool IsApiWrapper() const;
869 bool IsUndetectable() const;
926 static
void* Unwrap(
v8::
Isolate* isolate, internal::Address wrapper_obj,
928 static
void Wrap(
v8::
Isolate* isolate, internal::Address wrapper_obj,
932 static
void CheckCast(
Value* obj);
933 Local<
Data> SlowGetInternalField(
int index);
934 void* SlowGetAlignedPointerFromInternalField(
int index,
936 void* SlowGetAlignedPointerFromInternalField(
v8::
Isolate* isolate,
int index,
943#ifndef V8_ENABLE_CHECKS
946 A obj = internal::ValueHelper::ValueAsAddress(
this);
949 int instance_type = I::GetInstanceType(obj);
950 if (I::CanHaveInternalField(instance_type)) {
951 int offset = I::kJSAPIObjectWithEmbedderSlotsHeaderSize +
952 (I::kEmbedderDataSlotSize * index);
953 A value = I::ReadRawField<A>(obj, offset);
954#ifdef V8_COMPRESS_POINTERS
957 value = I::DecompressTaggedField(obj,
static_cast<uint32_t
>(value));
960 auto* isolate = I::GetCurrentIsolate();
964 return SlowGetInternalField(index);
967void* Object::GetAlignedPointerFromInternalField(
v8::Isolate* isolate,
970#if !defined(V8_ENABLE_CHECKS)
973 A obj = internal::ValueHelper::ValueAsAddress(
this);
976 auto instance_type = I::GetInstanceType(obj);
977 if (
V8_LIKELY(I::CanHaveInternalField(instance_type))) {
978 int offset = I::kJSAPIObjectWithEmbedderSlotsHeaderSize +
979 (I::kEmbedderDataSlotSize * index) +
980 I::kEmbedderDataSlotExternalPointerOffset;
981 A value = I::ReadExternalPointerField(isolate, obj, offset,
983 return reinterpret_cast<void*
>(value);
986 return SlowGetAlignedPointerFromInternalField(isolate, index, tag);
989void* Object::GetAlignedPointerFromInternalField(
int index,
991#if !defined(V8_ENABLE_CHECKS)
994 A obj = internal::ValueHelper::ValueAsAddress(
this);
997 auto instance_type = I::GetInstanceType(obj);
998 if (
V8_LIKELY(I::CanHaveInternalField(instance_type))) {
999 int offset = I::kJSAPIObjectWithEmbedderSlotsHeaderSize +
1000 (I::kEmbedderDataSlotSize * index) +
1001 I::kEmbedderDataSlotExternalPointerOffset;
1002 Isolate* isolate = I::GetCurrentIsolateForSandbox();
1003 A value = I::ReadExternalPointerField(isolate, obj, offset,
1005 return reinterpret_cast<void*
>(value);
1008 return SlowGetAlignedPointerFromInternalField(index, tag);
1012template <CppHeapPo
interTag tag,
typename T>
1015 auto obj = internal::ValueHelper::ValueAsAddress(*wrapper);
1016#if !defined(V8_ENABLE_CHECKS)
1017 return internal::ReadCppHeapPointerField<T>(
1018 isolate, obj, internal::Internals::kJSObjectHeaderSize, tag_range);
1020 return reinterpret_cast<T*
>(Unwrap(isolate, obj, tag_range));
1025template <CppHeapPo
interTag tag,
typename T>
1029 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1030#if !defined(V8_ENABLE_CHECKS)
1031 return internal::ReadCppHeapPointerField<T>(
1032 isolate, obj, internal::Internals::kJSObjectHeaderSize, tag_range);
1034 return reinterpret_cast<T*
>(Unwrap(isolate, obj, tag_range));
1039template <CppHeapPo
interTag tag,
typename T>
1044 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1045#if !defined(V8_ENABLE_CHECKS)
1046 return internal::ReadCppHeapPointerField<T>(
1047 isolate, obj, internal::Internals::kJSObjectHeaderSize, tag_range);
1049 return reinterpret_cast<T*
>(Unwrap(isolate, obj, tag_range));
1054template <
typename T>
1057 auto obj = internal::ValueHelper::ValueAsAddress(*wrapper);
1058#if !defined(V8_ENABLE_CHECKS)
1059 return internal::ReadCppHeapPointerField<T>(
1060 isolate, obj, internal::Internals::kJSObjectHeaderSize, tag_range);
1062 return reinterpret_cast<T*
>(Unwrap(isolate, obj, tag_range));
1067template <
typename T>
1071 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1072#if !defined(V8_ENABLE_CHECKS)
1073 return internal::ReadCppHeapPointerField<T>(
1074 isolate, obj, internal::Internals::kJSObjectHeaderSize, tag_range);
1077 return reinterpret_cast<T*
>(Unwrap(isolate, obj, tag_range));
1082template <
typename T>
1087 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1088#if !defined(V8_ENABLE_CHECKS)
1089 return internal::ReadCppHeapPointerField<T>(
1090 isolate, obj, internal::Internals::kJSObjectHeaderSize, tag_range);
1092 return reinterpret_cast<T*
>(Unwrap(isolate, obj, tag_range));
1097template <CppHeapPo
interTag tag>
1100 auto obj = internal::ValueHelper::ValueAsAddress(*wrapper);
1101 Wrap(isolate, obj, tag, wrappable);
1105template <CppHeapPo
interTag tag>
1109 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1110 Wrap(isolate, obj, tag, wrappable);
1114template <CppHeapPo
interTag tag>
1119 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1120 Wrap(isolate, obj, tag, wrappable);
1126 auto obj = internal::ValueHelper::ValueAsAddress(*wrapper);
1127 Wrap(isolate, obj, tag, wrappable);
1134 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1135 Wrap(isolate, obj, tag, wrappable);
1143 internal::ValueHelper::ValueAsAddress(wrapper.template value<Object>());
1144 Wrap(isolate, obj, tag, wrappable);
1148#ifdef V8_ENABLE_CHECKS
1151 return reinterpret_cast<Private*
>(data);
1155#ifdef V8_ENABLE_CHECKS
1158 return static_cast<Object*
>(value);
Definition: garbage-collected.h:53
Definition: name-provider.h:26
Definition: v8-container.h:25
Definition: v8-traced-handle.h:124
Definition: v8-context.h:48
Definition: v8-isolate.h:291
Definition: v8-local-handle.h:366
Definition: v8-local-handle.h:734
Definition: v8-maybe.h:39
Definition: v8-primitive.h:79
Definition: v8-object.h:614
const char * GetHumanReadableName() const override
Definition: v8-object.h:620
virtual const WrapperTypeInfo * GetWrapperTypeInfo() const
Definition: v8-object.h:616
virtual void Trace(cppgc::Visitor *visitor) const
Definition: v8-object.h:622
Definition: v8-object.h:266
Maybe< PropertyAttribute > GetRealNamedPropertyAttributesInPrototypeChain(Local< Context > context, Local< Name > key)
Maybe< PropertyAttribute > GetPropertyAttributes(Local< Context > context, Local< Value > key)
Maybe< bool > CreateDataProperty(Local< Context > context, uint32_t index, Local< Value > value)
Maybe< bool > SetNativeDataProperty(Local< Context > context, Local< Name > name, AccessorNameGetterCallback getter, std::nullptr_t setter=nullptr, Local< Value > data=Local< Value >(), PropertyAttribute attributes=None, SideEffectType getter_side_effect_type=SideEffectType::kHasSideEffect, SideEffectType setter_side_effect_type=SideEffectType::kHasSideEffect)
Definition: v8-object.h:421
MaybeLocal< Value > GetOwnPropertyDescriptor(Local< Context > context, Local< Name > key)
bool HasNamedLookupInterceptor() const
Maybe< bool > SetPrivate(Local< Context > context, Local< Private > key, Local< Value > value)
Maybe< bool > HasRealNamedProperty(Local< Context > context, Local< Name > key)
MaybeLocal< Array > GetPropertyNames(Local< Context > context)
Maybe< bool > Delete(Local< Context > context, uint32_t index)
MaybeLocal< Value > GetRealNamedProperty(Local< Context > context, Local< Name > key)
Maybe< bool > DefineProperty(Local< Context > context, Local< Name > key, PropertyDescriptor &descriptor)
Maybe< bool > SetPrototype(Local< Context > context, Local< Value > prototype)
Maybe< bool > Delete(Local< Context > context, Local< Value > key)
Maybe< bool > DefineOwnProperty(Local< Context > context, Local< Name > key, Local< Value > value, PropertyAttribute attributes=None)
static void * GetAlignedPointerFromInternalField(const PersistentBase< Object > &object, int index, EmbedderDataTypeTag tag)
Definition: v8-object.h:579
static int InternalFieldCount(const PersistentBase< Object > &object)
Definition: v8-object.h:541
MaybeLocal< Value > GetRealNamedPropertyInPrototypeChain(Local< Context > context, Local< Name > key)
static int InternalFieldCount(const BasicTracedReference< Object > &object)
Definition: v8-object.h:547
Maybe< bool > Has(Local< Context > context, Local< Value > key)
void SetAlignedPointerInInternalField(int index, void *value, EmbedderDataTypeTag tag)
MaybeLocal< Array > GetOwnPropertyNames(Local< Context > context)
Maybe< bool > Set(Local< Context > context, Local< Value > key, Local< Value > value)
Local< Value > GetPrototype()
MaybeLocal< Value > GetPrivate(Local< Context > context, Local< Private > key)
void SetAccessorProperty(Local< Name > name, Local< Function > getter, Local< Function > setter=Local< Function >(), PropertyAttribute attributes=None)
Maybe< bool > CreateDataProperty(Local< Context > context, Local< Name > key, Local< Value > value)
static void * GetAlignedPointerFromInternalField(const BasicTracedReference< Object > &object, int index, EmbedderDataTypeTag tag)
Definition: v8-object.h:587
Maybe< bool > HasRealIndexedProperty(Local< Context > context, uint32_t index)
MaybeLocal< String > ObjectProtoToString(Local< Context > context)
Maybe< bool > SetNativeDataProperty(Local< Context > context, Local< Name > name, AccessorNameGetterCallback getter, AccessorNameSetterCallback setter, Local< Value > data=Local< Value >(), PropertyAttribute attributes=None, SideEffectType getter_side_effect_type=SideEffectType::kHasSideEffect, SideEffectType setter_side_effect_type=SideEffectType::kHasSideEffect)
Maybe< bool > SetLazyDataProperty(Local< Context > context, Local< Name > name, AccessorNameGetterCallback getter, Local< Value > data=Local< Value >(), PropertyAttribute attributes=None, SideEffectType getter_side_effect_type=SideEffectType::kHasSideEffect, SideEffectType setter_side_effect_type=SideEffectType::kHasSideEffect)
MaybeLocal< Value > Get(Local< Context > context, uint32_t index)
static void WrapGlobal(v8::Isolate *isolate, const v8::Local< v8::Object > &wrapper, Wrappable *wrappable, CppHeapPointerTag tag)
Maybe< bool > SetIntegrityLevel(Local< Context > context, IntegrityLevel level)
MaybeLocal< Array > GetPropertyNames(Local< Context > context, KeyCollectionMode mode, PropertyFilter property_filter, IndexFilter index_filter, KeyConversionMode key_conversion=KeyConversionMode::kKeepNumbers)
int InternalFieldCount() const
Maybe< PropertyAttribute > GetRealNamedPropertyAttributes(Local< Context > context, Local< Name > key)
Maybe< bool > SetNativeDataProperty(Local< Context > context, Local< Name > name, AccessorNameGetterCallback getter, AccessorNameSetterCallbackV2 setter, Local< Value > data=Local< Value >(), PropertyAttribute attributes=None, SideEffectType getter_side_effect_type=SideEffectType::kHasSideEffect, SideEffectType setter_side_effect_type=SideEffectType::kHasSideEffect)
static bool CheckGlobalWrappable(v8::Isolate *isolate, const v8::Local< v8::Object > &wrapper, CppHeapPointerTagRange tag_range)
Maybe< bool > HasPrivate(Local< Context > context, Local< Private > key)
Maybe< bool > GetPropertyAttributes(Local< Context > context, Local< Value > key, PropertyAttribute *out_attributes)
Local< Object > FindInstanceInPrototypeChain(Local< FunctionTemplate > tmpl)
MaybeLocal< Value > Get(Local< Context > context, Local< Value > key)
MaybeLocal< Context > GetCreationContext(v8::Isolate *isolate)
void SetInternalField(int index, Local< Data > data)
MaybeLocal< Array > GetOwnPropertyNames(Local< Context > context, PropertyFilter filter, KeyConversionMode key_conversion=KeyConversionMode::kKeepNumbers)
Maybe< bool > Set(Local< Context > context, uint32_t index, Local< Value > value)
Local< Object > Clone(v8::Isolate *isolate)
Maybe< bool > HasOwnProperty(Local< Context > context, Local< Name > key)
Maybe< bool > Has(Local< Context > context, uint32_t index)
Maybe< bool > DeletePrivate(Local< Context > context, Local< Private > key)
Local< String > GetConstructorName()
MaybeLocal< Value > Get(Local< Context > context, Local< Value > key, MaybeLocal< Object > receiver)
Maybe< bool > HasRealNamedCallbackProperty(Local< Context > context, Local< Name > key)
Maybe< bool > Set(Local< Context > context, Local< Value > key, Local< Value > value, MaybeLocal< Object > receiver)
Maybe< bool > HasOwnProperty(Local< Context > context, uint32_t index)
bool HasIndexedLookupInterceptor() const
Definition: v8-persistent-handle.h:93
Definition: v8-object.h:46
Local< Value > Name() const
static Local< Private > ForApi(Isolate *isolate, Local< String > name)
static Local< Private > New(Isolate *isolate, Local< String > name=Local< String >())
Definition: v8-function-callback.h:224
Definition: v8-object.h:106
void set_enumerable(bool enumerable)
bool has_writable() const
Local< Value > get() const
Local< Value > set() const
PropertyDescriptor(Local< Value > get, Local< Value > set)
bool has_enumerable() const
PropertyDescriptor(Local< Value > value)
PrivateData * get_private() const
Definition: v8-object.h:142
void operator=(const PropertyDescriptor &)=delete
Local< Value > value() const
PropertyDescriptor(Local< Value > value, bool writable)
void set_configurable(bool configurable)
PropertyDescriptor(const PropertyDescriptor &)=delete
bool has_configurable() const
bool configurable() const
Definition: v8-value.h:32
Definition: v8-internal.h:1000
ExternalPointerTag
Definition: v8-internal.h:650
uintptr_t Address
Definition: v8-internal.h:38
Definition: libplatform.h:15
IntegrityLevel
Definition: v8-object.h:261
PropertyAttribute
Definition: v8-object.h:154
@ DontEnum
Definition: v8-object.h:160
@ None
Definition: v8-object.h:156
@ DontDelete
Definition: v8-object.h:162
@ ReadOnly
Definition: v8-object.h:158
internal::ExternalPointerTag ToExternalPointerTag(v8::EmbedderDataTypeTag api_tag)
KeyCollectionMode
Definition: v8-object.h:244
void(*)(Local< Name > property, const PropertyCallbackInfo< Value > &info) AccessorNameGetterCallback
Definition: v8-object.h:180
SideEffectType
Definition: v8-object.h:231
@ kHasSideEffectToReceiver
IndexFilter
Definition: v8-object.h:250
KeyConversionMode
Definition: v8-object.h:256
CppHeapPointerTag
Definition: v8-sandbox.h:28
constexpr EmbedderDataTypeTag kEmbedderDataTypeTagDefault
Definition: v8-object.h:36
void(*)(Local< Name > property, Local< Value > value, const PropertyCallbackInfo< Boolean > &info) AccessorNameSetterCallbackV2
Definition: v8-object.h:203
uint16_t EmbedderDataTypeTag
Definition: v8-object.h:34
void(*)(Local< Name > property, Local< Value > value, const PropertyCallbackInfo< void > &info) AccessorNameSetterCallback
Definition: v8-object.h:207
PropertyFilter
Definition: v8-object.h:212
@ ONLY_CONFIGURABLE
Definition: v8-object.h:216
@ SKIP_SYMBOLS
Definition: v8-object.h:218
@ ONLY_WRITABLE
Definition: v8-object.h:214
@ ALL_PROPERTIES
Definition: v8-object.h:213
@ SKIP_STRINGS
Definition: v8-object.h:217
@ ONLY_ENUMERABLE
Definition: v8-object.h:215
Definition: v8-object.h:604
const int16_t type_id
Definition: v8-object.h:605
Definition: v8-internal.h:500
#define V8_EXPORT
Definition: v8config.h:854
#define V8_INLINE
Definition: v8config.h:508
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:621
#define V8_LIKELY(condition)
Definition: v8config.h:668
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:678