13#ifdef ENABLE_SLOW_DCHECKS
34#define TRACE(broker, x) TRACE_BROKER(broker, x)
35#define TRACE_MISSING(broker, x) TRACE_BROKER_MISSING(broker, x)
91 TRACE(
broker,
"Creating data " <<
this <<
" for handle " <<
object.address()
92 <<
" (" <<
Brief(*
object) <<
")");
106 broker->IsCanonicalHandle(
object));
116#define DECLARE_IS(Name) bool Is##Name() const;
120#define DECLARE_AS(Name) Name##Data* As##Name();
189 const int len = function_overloads->length() /
192 for (
int i = 0;
i < len;
i++) {
194 isolate, function_overloads->get(
200ZoneVector<const CFunctionInfo*> GetCSignatures(
202 const int len = function_overloads->length() /
204 ZoneVector<const CFunctionInfo*> c_signatures =
205 ZoneVector<const CFunctionInfo*>(len, zone);
206 for (
int i = 0;
i < len;
i++) {
208 isolate, function_overloads->get(
240 if (
broker->ObjectMayBeUninitialized(value)) {
260 if (value_data ==
nullptr) {
298 return value->value_as_bits();
301std::optional<Tagged<Object>> GetOwnFastConstantDataPropertyFromHeap(
302 JSHeapBroker*
broker, JSObjectRef holder, Representation representation,
303 FieldIndex field_index) {
304 std::optional<Tagged<Object>> constant;
314 Tagged<Map> map = holder.object()->map(cage_base,
kAcquireLoad);
315 if (*holder.map(
broker).object() != map) {
320 if (field_index.is_inobject()) {
322 holder.object()->RawInobjectPropertyAt(cage_base, map, field_index);
323 if (!constant.has_value()) {
325 broker,
"Constant field in " << holder <<
" is unsafe to read");
330 holder.object()->raw_properties_or_hash(cage_base,
kRelaxedLoad);
338 "Expected PropertyArray for backing store in " << holder <<
".");
343 const int array_index = field_index.outobject_array_index();
345 constant = properties->get(array_index);
348 broker,
"Backing store for " << holder <<
" not long enough.");
359 if (IsUninitialized(constant.value())) {
370 const char* repString =
IsSmi(*constant) ?
"Smi"
371 : IsHeapNumber(*constant) ?
"HeapNumber"
374 << holder <<
". Expected "
375 << representation <<
", but object is a "
385OptionalObjectRef GetOwnDictionaryPropertyFromHeap(
387 InternalIndex dict_index) {
388 Handle<Object> constant;
393 std::optional<Tagged<Object>> maybe_constant =
397 if (!maybe_constant)
return {};
508 bool serialized_ =
false;
595 maps.push_back(map.object());
603 static constexpr bool kConcurrentAccess =
true;
613 int slack = std::numeric_limits<int>::max();
615 slack = std::min(slack,
m->UnusedPropertyFields());
618 return map.object()->InstanceSizeFromSlack(slack);
645 if (function->has_prototype_slot()) {
659 InstanceSizeWithMinSlack(
broker, initial_map_ref);
705 if (f->has_prototype_slot()) {
735 f->ComputeInstanceSizeWithMinSlack(f->GetIsolate())) {
737 "JSFunction::ComputeInstanceSizeWithMinSlack");
771 return data()->AsJSFunction()->IsConsistentWithHeapState(
broker);
805 if (IsTrue(o, isolate)) {
807 }
else if (IsFalse(o, isolate)) {
813 }
else if (InstanceTypeChecker::IsString(t)) {
816 }
else if (InstanceTypeChecker::IsHeapNumber(t)) {
818 }
else if (InstanceTypeChecker::IsBigInt(t)) {
833 if (
this == map_data) {
837 return map_data->AsMap()->instance_type();
842bool IsReadOnlyLengthDescriptor(
Isolate* isolate,
844 DCHECK(!jsarray_map->is_dictionary_map());
846 jsarray_map->instance_descriptors(isolate,
kRelaxedLoad);
848 JSArray::kLengthOffset == JSObject::kHeaderSize,
849 "The length should be the first property on the descriptor array");
851 return descriptors->GetDetails(
offset).IsReadOnly();
859 return map->instance_type() == JS_ARRAY_TYPE &&
861 IsJSArray(map->prototype()) &&
866bool SupportsFastArrayResize(JSHeapBroker*
broker, DirectHandle<Map> map) {
867 return SupportsFastArrayIteration(
broker, map) && map->is_extensible() &&
868 !map->is_dictionary_map() &&
903 if (IsJSObjectMap(*
object)) {
962#define DEFINE_IS(Name) \
963 bool ObjectData::Is##Name() const { \
964 if (should_access_heap()) { \
965 return i::Is##Name(*object()); \
967 if (is_smi()) return false; \
968 InstanceType instance_type = \
969 static_cast<const HeapObjectData*>(this)->GetMapInstanceType(); \
970 return InstanceTypeChecker::Is##Name(instance_type); \
975#define DEFINE_AS(Name) \
976 Name##Data* ObjectData::As##Name() { \
978 CHECK(kind_ == kBackgroundSerializedHeapObject); \
979 return static_cast<Name##Data*>(this); \
984bool ObjectRef::equals(ObjectRef other)
const {
return data_ == other.data_; }
989 if (*depth == 0)
return *
this;
992 while (*depth != 0 && i::IsContext(current->unchecked_previous())) {
1010 if (!
object()->IsScriptContext()) {
1019 OptionalObjectRef maybe_side_data =
1021 if (!maybe_side_data.has_value())
return {};
1024 FixedArrayRef side_data_fixed_array = maybe_side_data.value().AsFixedArray();
1025 return side_data_fixed_array.
TryGet(
1031 TraceScope tracer(
this,
"JSHeapBroker::InitializeAndStartSerializing");
1063 if (entry !=
nullptr)
return entry->
value;
1068 if (*storage ==
nullptr) {
1070 this, storage, object,
1080 if (
IsSmi(*
object)) {
1104#define CREATE_DATA(Name) \
1105 if (i::InstanceTypeChecker::Is##Name(instance_type)) { \
1106 entry = refs_->LookupOrInsert(object.address()); \
1107 object_data = zone()->New<ref_traits<Name>::data_type>( \
1108 this, &entry->value, Cast<Name>(object), \
1109 ObjectDataKindFor(ref_traits<Name>::ref_serialization_kind)); \
1125 if (!object_data->should_access_heap()) {
1128 static_cast<HeapObjectData*
>(object_data)->GetMapInstanceType());
1137#define DEFINE_IS_AND_AS(Name) \
1138 bool ObjectRef::Is##Name() const { return data()->Is##Name(); } \
1139 Name##Ref ObjectRef::As##Name() const { \
1140 DCHECK(Is##Name()); \
1141 return Name##Ref(data()); \
1144#undef DEFINE_IS_AND_AS
1146bool ObjectRef::IsSmi()
const {
return data()->is_smi(); }
1148int ObjectRef::AsSmi()
const {
1154#define DEF_TESTER(Type, ...) \
1155 bool MapRef::Is##Type##Map() const { \
1156 return InstanceTypeChecker::Is##Type(instance_type()); \
1162 return *
this ==
broker->boolean_map();
1172 return IsJSPrimitiveWrapperMap() &&
1181 if (!IsJSObjectMap())
return false;
1187 (
Is64() || (
kind != BIGINT64_ELEMENTS &&
kind != BIGUINT64_ELEMENTS))) {
1191 kind != RAB_GSAB_BIGUINT64_ELEMENTS &&
1192 kind != RAB_GSAB_BIGINT64_ELEMENTS) {
1201 if (
kind == current_kind)
return *
this;
1217 CHECK_EQ(as_elements_kind_map, initial_js_array_map);
1224 if (!maybe_result.has_value()) {
1248 if (!prototype_map.IsJSObjectMap() || !prototype_map.
is_stable() ||
1253 prototype_maps->
push_back(prototype_map);
1260 return SupportsFastArrayIteration(
broker,
object());
1264 return SupportsFastArrayResize(
broker,
object());
1269void RecordConsistentJSFunctionViewDependencyIfNeeded(
1272 if (!data->has_any_used_field()) {
1276 data->set_used_field(used_field);
1288 if (
data_->should_access_heap()) {
1289 return object()->ComputeInstanceSizeWithMinSlack(
broker->isolate());
1291 RecordConsistentJSFunctionViewDependencyIfNeeded(
1294 return data()->AsJSFunction()->initial_map_instance_size_with_min_slack();
1316 object()->closure_feedback_cell(index));
1326 CHECK(index.is_inobject());
1335 if (*
map(
broker).
object() != current_map) {
1340 std::optional<Tagged<Object>> maybe_value =
1341 object()->RawInobjectPropertyAt(cage_base, current_map, index);
1342 if (!maybe_value.has_value()) {
1344 "Unable to safely read property in " << *
this);
1347 value =
broker->CanonicalPersistentHandle(maybe_value.value());
1364 return object()->GetInObjectPropertyOffset(
i);
1381 broker->isolate()->factory()->fixed_cow_array_map();
1400 uint32_t index)
const {
1403 &maybe_char,
broker->isolate(),
broker->local_isolate(), *
object(),
1408 << *
this <<
" at index " << index);
1417 return IsInternalizedString() || IsThinString(*
object());
1425 return object()->IsOneByteRepresentation();
1435 "content for kNeverSerialized unsupported string kind " << *
this);
1436 return std::nullopt;
1449 uint32_t index)
const {
1453 "get char for kNeverSerialized unsupported string kind " << *
this);
1454 return std::nullopt;
1457 if (!
broker->IsMainThread()) {
1462 return object()->Get(index);
1470 "number for kNeverSerialized unsupported string kind " << *
this);
1471 return std::nullopt;
1480 broker,
"toInt for kNeverSerialized unsupported string kind " << *
this);
1481 return std::nullopt;
1488 return object()->constant_elements()->length();
1510 return Float64::FromBits(
object()->get_representation(
i));
1519 return reinterpret_cast<Address>(
object()->handler_table()->begin());
1523 return object()->handler_table()->length();
1526#define IF_ACCESS_FROM_HEAP_C(name) \
1527 if (data_->should_access_heap()) { \
1528 return object()->name(); \
1531#define IF_ACCESS_FROM_HEAP(result, name) \
1532 if (data_->should_access_heap()) { \
1533 return MakeRef(broker, Cast<result>(object()->name())); \
1538#define BIMODAL_ACCESSOR(holder, result, name) \
1539 result##Ref holder##Ref::name(JSHeapBroker* broker) const { \
1540 IF_ACCESS_FROM_HEAP(result, name); \
1541 return result##Ref(ObjectRef::data()->As##holder()->name()); \
1545#define BIMODAL_ACCESSOR_C(holder, result, name) \
1546 result holder##Ref::name() const { \
1547 IF_ACCESS_FROM_HEAP_C(name); \
1548 return ObjectRef::data()->As##holder()->name(); \
1552#define BIMODAL_ACCESSOR_B(holder, field, name, BitField) \
1553 typename BitField::FieldType holder##Ref::name() const { \
1554 IF_ACCESS_FROM_HEAP_C(name); \
1555 return BitField::decode(ObjectRef::data()->As##holder()->field()); \
1558#define HEAP_ACCESSOR_C(holder, result, name) \
1559 result holder##Ref::name() const { return object()->name(); }
1561#define HEAP_ACCESSOR_B(holder, field, name, BitField) \
1562 typename BitField::FieldType holder##Ref::name() const { \
1563 return object()->name(); \
1577 if (
data_->should_access_heap()) {
1578 return object()->AsInt64(lossless);
1580 return ObjectRef::data()->AsBigInt()->
AsInt64(lossless);
1585 return object()->register_count();
1588 return object()->parameter_count();
1591 return object()->parameter_count_without_receiver();
1594 return object()->max_arguments();
1598 return object()->incoming_new_target_or_generator_register();
1630 Map::Bits3::IsDictionaryMapBit)
1633 Map::Bits3::NumberOfOwnDescriptorsBits)
1635 Map::Bits3::IsMigrationTargetBit)
1637 Map::Bits3::ConstructionCounterBits)
1639 Map::Bits1::HasPrototypeSlotBit)
1641 Map::Bits1::IsAccessCheckNeededBit)
1644 Map::Bits1::HasIndexedInterceptorBit)
1661 JSHeapBroker*
broker)
const {
1679 JSHeapBroker*
broker)
const {
1682 if (data.IsTheHole())
return {};
1687 JSHeapBroker*
broker)
const {
1688 return i::IsUndefined(
object()->signature(),
broker->isolate());
1693 allowed_receiver_instance_type_range_start)
1698 JSHeapBroker*
broker, MapRef receiver_map) {
1699 const HolderLookupResult not_found;
1700 if (!receiver_map.IsJSObjectMap() || (receiver_map.is_access_check_needed() &&
1701 !
object()->accept_any_receiver())) {
1705 DirectHandle<FunctionTemplateInfo> expected_receiver_type;
1709 if (i::IsUndefined(signature)) {
1712 expected_receiver_type =
broker->CanonicalPersistentHandle(
1714 if (expected_receiver_type->IsTemplateFor(*receiver_map.object())) {
1717 if (!receiver_map.IsJSGlobalProxyMap())
return not_found;
1720 HeapObjectRef prototype = receiver_map.prototype(
broker);
1721 if (prototype.IsNull())
return not_found;
1722 if (!expected_receiver_type->IsTemplateFor(prototype.object()->map())) {
1725 CHECK(prototype.IsJSObject());
1727 prototype.AsJSObject());
1747 CHECK(HasBytecodeArray());
1752 bytecode_array = object()->GetBytecodeArray(
broker->
isolate());
1757#define DEF_SFI_ACCESSOR(type, name) \
1758 HEAP_ACCESSOR_C(SharedFunctionInfo, type, name)
1760#undef DEF_SFI_ACCESSOR
1763 if (
broker->IsMainThread()) {
1775 return broker->IsMainThread()
1786 return object()->was_once_deoptimized();
1831 return object()->length();
1836 return object()->byte_length();
1857 return object()->DataPtr();
1861 auto elements_kind =
map(
broker).elements_kind();
1871 return object()->GetConstructorFunctionIndex();
1876 return !Map::Bits3::IsUnstableBit::decode(
data()->AsMap()->
bit_field3());
1884 return object()->GetInObjectPropertiesStartInWords();
1889 return data()->AsMap()->in_object_properties();
1893 return i::IsExternalString(*
object());
1928 return js_array_packed_smi_elements_map(
broker);
1930 return js_array_holey_smi_elements_map(
broker);
1932 return js_array_packed_double_elements_map(
broker);
1934 return js_array_holey_double_elements_map(
broker);
1936 return js_array_packed_elements_map(
broker);
1938 return js_array_holey_elements_map(
broker);
1944#define DEF_NATIVE_CONTEXT_ACCESSOR(ResultType, Name) \
1945 ResultType##Ref NativeContextRef::Name(JSHeapBroker* broker) const { \
1946 return MakeRefAssumeMemoryFence( \
1947 broker, Cast<ResultType>(object()->Name(kAcquireLoad))); \
1950#undef DEF_NATIVE_CONTEXT_ACCESSOR
1954 CHECK(map.IsPrimitiveMap());
1955 switch (map.constructor_function_index()) {
1957 return std::nullopt;
1958 case Context::BIGINT_FUNCTION_INDEX:
1959 return bigint_function(
broker);
1960 case Context::BOOLEAN_FUNCTION_INDEX:
1961 return boolean_function(
broker);
1962 case Context::NUMBER_FUNCTION_INDEX:
1963 return number_function(
broker);
1964 case Context::STRING_FUNCTION_INDEX:
1965 return string_function(
broker);
1966 case Context::SYMBOL_FUNCTION_INDEX:
1967 return symbol_function(
broker);
1973bool ObjectRef::IsNull()
const {
return i::IsNull(*
object()); }
1975bool ObjectRef::IsUndefined()
const {
return i::IsUndefined(*
object()); }
1977bool ObjectRef::IsTheHole()
const {
1978 if (i::IsTheHole(*
object()))
return true;
1979 DCHECK(!i::IsHole(*
object()));
1983bool ObjectRef::IsPropertyCellHole()
const {
1984 if (i::IsPropertyCellHole(*
object()))
return true;
1985 DCHECK(!i::IsHole(*
object()));
1989bool ObjectRef::IsHashTableHole()
const {
1990 if (i::IsHashTableHole(*
object()))
return true;
1991 DCHECK(!i::IsHole(*
object()));
1995HoleType ObjectRef::HoleType()
const {
2001#define IF_HOLE_THEN_RETURN(Name, name, Root) \
2002 if (i::Is##Name(*object())) { \
2003 return HoleType::k##Name; \
2007#undef IF_HOLE_THEN_RETURN
2012bool ObjectRef::IsNullOrUndefined()
const {
return IsNull() || IsUndefined(); }
2014std::optional<bool> ObjectRef::TryGetBooleanValue(JSHeapBroker*
broker)
const {
2015 if (
data_->should_access_heap()) {
2018 if (
IsSmi())
return AsSmi() != 0;
2019 return data()->AsHeapObject()->TryGetBooleanValue(
broker);
2022Maybe<double> ObjectRef::OddballToNumber(JSHeapBroker*
broker)
const {
2027 ObjectRef true_ref =
broker->true_value();
2031 return Just(std::numeric_limits<double>::quiet_NaN());
2042bool ObjectRef::should_access_heap()
const {
2043 return data()->should_access_heap();
2051 if (!maybe_element.has_value())
return {};
2054 if (
result.has_value()) {
2077 if (i::IsJSArray(*holder)) {
2085 uint32_t array_length;
2090 if (index >= array_length)
return {};
2095 &maybe_element,
broker->isolate(),
broker->local_isolate(), *holder,
2100 << *
this <<
" at index " << index);
2107 return maybe_element;
2116 std::optional<Tagged<Object>> constant =
2117 GetOwnFastConstantDataPropertyFromHeap(
broker, *
this,
2118 field_representation, index);
2119 if (!constant)
return {};
2121 OptionalObjectRef
result =
2124 if (!
result.has_value())
return {};
2134 std::optional<Tagged<Object>> constant =
2135 GetOwnFastConstantDataPropertyFromHeap(
broker, *
this,
2137 if (!constant)
return {};
2139 DCHECK(i::IsHeapNumber(constant.value()));
2141 Float64 unboxed_value = Float64::FromBits(
2146 return unboxed_value;
2152 CHECK(index.is_found());
2153 OptionalObjectRef
result =
2154 GetOwnDictionaryPropertyFromHeap(
broker,
object(), index);
2155 if (
result.has_value()) {
2175 uint32_t index)
const {
2198 if (!length_ref.has_value())
return {};
2201 if (!length_ref->IsSmi())
return {};
2203 std::optional<Tagged<Object>>
result =
2205 broker->isolate(), *elements_ref.AsFixedArray().
object(),
2206 elements_kind, length_ref->AsSmi(), index);
2207 if (!
result.has_value())
return {};
2213 int cell_index)
const {
2230 if (map->instance_type() != ODDBALL_TYPE) {
2234 if (map == roots.undefined_map()) {
2237 if (map == roots.null_map()) {
2240 if (map == roots.boolean_map()) {
2249 if (
data_->should_access_heap()) {
2254 return HeapObjectType(map->instance_type(), map->elements_kind(), flags,
2278 return data()->AsFixedArrayBase()->length();
2283 return object()->GetDetails(descriptor_index);
2301 ->GetValue(descriptor_index)
2302 .GetHeapObjectIfStrong(&heap_object)) {
2314 if (!
contents.IsFeedbackVector())
return {};
2315 return contents.AsFeedbackVector();
2321 if (!vector.has_value())
return {};
2322 return vector->shared_function_info(
broker);
2325#ifdef V8_ENABLE_LEAPTIERING
2337 return IsInternalizedString() || IsSymbol();
2342#define DEF_OBJECT_GETTER(T) \
2343 IndirectHandle<T> T##Ref::object() const { \
2344 return IndirectHandle<T>( \
2345 reinterpret_cast<Address*>(data_->object().address())); \
2349#undef DEF_OBJECT_GETTER
2351ObjectData* ObjectRef::data()
const {
2353 switch (JSHeapBroker::Current()->
mode()) {
2369#define JSFUNCTION_BIMODAL_ACCESSOR_WITH_DEP(Result, Name, UsedField) \
2370 Result##Ref JSFunctionRef::Name(JSHeapBroker* broker) const { \
2371 IF_ACCESS_FROM_HEAP(Result, Name); \
2372 RecordConsistentJSFunctionViewDependencyIfNeeded( \
2373 broker, *this, data()->AsJSFunction(), UsedField); \
2374 return Result##Ref(data()->AsJSFunction()->Name()); \
2377#define JSFUNCTION_BIMODAL_ACCESSOR_WITH_DEP_C(Result, Name, UsedField) \
2378 Result JSFunctionRef::Name(JSHeapBroker* broker) const { \
2379 IF_ACCESS_FROM_HEAP_C(Name); \
2380 RecordConsistentJSFunctionViewDependencyIfNeeded( \
2381 broker, *this, data()->AsJSFunction(), UsedField); \
2382 return data()->AsJSFunction()->Name(); \
2390#define JSFUNCTION_BIMODAL_ACCESSOR_WITH_DEP_RELEVANT_C( \
2391 Result, Name, UsedField, RelevantValue) \
2392 Result JSFunctionRef::Name(JSHeapBroker* broker) const { \
2393 IF_ACCESS_FROM_HEAP_C(Name); \
2394 Result const result = data()->AsJSFunction()->Name(); \
2395 if (result == RelevantValue) { \
2396 RecordConsistentJSFunctionViewDependencyIfNeeded( \
2397 broker, *this, data()->AsJSFunction(), UsedField); \
2408 bool, PrototypeRequiresRuntimeLookup,
2420#ifdef V8_ENABLE_LEAPTIERING
2424#undef JSFUNCTION_BIMODAL_ACCESSOR_WITH_DEP
2425#undef JSFUNCTION_BIMODAL_ACCESSOR_WITH_DEP_C
2438 if (!
object()->IsApiFunction())
return {};
2443 return object()->scope_info()->ContextHeaderLength();
2447 return object()->scope_info()->ParametersStartIndex();
2457 if (!map_handle->is_prototype_map())
return {};
2461 if (!IsPrototypeInfo(*maybe_proto_info))
return {};
2465 if (!maybe_object_create_map.
IsWeak())
return {};
2472 if (
data_->should_access_heap())
return true;
2475 return data()->AsPropertyCell()->Cache(
broker);
2479 ObjectRef proxy_proto =
2481 return !proxy_proto.equals(global_object(
broker));
2486 std::optional<Tagged<PropertyCell>> maybe_cell =
2489 broker->target_native_context().global_object(
broker).object(),
2491 if (!maybe_cell.has_value())
return {};
2496 if (!
v8_flags.concurrent_recompilation) {
2499 return os << ref.data() <<
" {" << ref.object() <<
"}";
2500 }
else if (ref.data_->should_access_heap()) {
2501 return os << ref.data() <<
" {" << ref.object() <<
"}";
2503 return os << ref.data();
2509 const unsigned value = code->inlined_bytecode_size();
2510 if (value != 0 && code->marked_for_deoptimization()) {
2518#undef BIMODAL_ACCESSOR
2519#undef BIMODAL_ACCESSOR_B
2520#undef BIMODAL_ACCESSOR_C
2521#undef HEAP_ACCESSOR_B
2522#undef HEAP_ACCESSOR_C
2523#undef IF_ACCESS_FROM_HEAP
2524#undef IF_ACCESS_FROM_HEAP_C
uint8_t data_[MAX_STACK_LENGTH]
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
#define SBXCHECK_EQ(lhs, rhs)
TemplateHashMapEntry< Address, ObjectData * > Entry
static V8_EXPORT_PRIVATE std::optional< Tagged< Object > > TryGetOwnCowElement(Isolate *isolate, Tagged< FixedArray > array_elements, ElementsKind elements_kind, int array_length, size_t index)
static V8_EXPORT_PRIVATE Result TryGetOwnChar(Tagged< String > *result_out, Isolate *isolate, LocalIsolate *local_isolate, Tagged< String > string, size_t index)
static V8_EXPORT_PRIVATE Result TryGetOwnConstantElement(Tagged< Object > *result_out, Isolate *isolate, LocalIsolate *local_isolate, Tagged< JSObject > holder, Tagged< FixedArrayBase > elements, ElementsKind elements_kind, size_t index)
static V8_EXPORT_PRIVATE std::optional< Tagged< PropertyCell > > TryGetPropertyCell(Isolate *isolate, LocalIsolate *local_isolate, DirectHandle< JSGlobalObject > holder, DirectHandle< Name > name)
static const int FIRST_FUNCTION_MAP_INDEX
@ MIN_CONTEXT_EXTENDED_SLOTS
@ CONTEXT_SIDE_TABLE_PROPERTY_INDEX
static const int LAST_FUNCTION_MAP_INDEX
Isolate * isolate() const
static FieldIndex ForDescriptor(Tagged< Map > map, InternalIndex descriptor_index)
static const int kFunctionOverloadEntrySize
static V8_INLINE bool InYoungGeneration(Tagged< Object > object)
constexpr int as_int() const
static Handle< Object > DictionaryPropertyAt(Isolate *isolate, DirectHandle< JSObject > object, InternalIndex dict_index)
static constexpr uint32_t kMaxElementIndex
static constexpr bool kOffHeapDataPtrEqualsExternalPointer
Isolate * GetMainThreadIsolateUnsafe() const
base::Mutex * shared_function_info_access()
static const int kNoSlackTracking
static std::optional< Tagged< Map > > TryAsElementsKind(Isolate *isolate, DirectHandle< Map > map, ElementsKind kind, ConcurrencyMode cmode)
static const int kNoConstructorFunctionIndex
static bool ToArrayLength(Tagged< Object > obj, uint32_t *index)
static V8_EXPORT_PRIVATE bool BooleanValue(Tagged< Object > obj, IsolateT *isolate)
static bool FitsRepresentation(Tagged< Object > obj, Representation representation, bool allow_coercion=true)
static V8_EXPORT_PRIVATE bool IsActive(Isolate *isolate)
static bool CheckDataIsCompatible(PropertyDetails details, Tagged< Object > value)
PropertyCellType cell_type() const
static constexpr PropertyDetails Empty(PropertyCellType cell_type=PropertyCellType::kNoCell)
static V8_EXPORT_PRIVATE bool Contains(Address address)
static V8_EXPORT_PRIVATE bool SandboxSafeContains(Tagged< HeapObject > object)
static constexpr Representation Double()
constexpr bool IsDouble() const
constexpr bool IsWeak() const
Tagged< HeapObject > GetHeapObjectAssumeWeak() const
void TraverseTransitionTree(const TraverseCallback &callback)
void push_back(const T &value)
bool PointsToLiteral() const
OptionalJSObjectRef boilerplate(JSHeapBroker *broker) const
ObjectRef nested_site(JSHeapBroker *broker) const
int constants_elements_length() const
IndirectHandle< ArrayBoilerplateDescription > object() const
uint64_t AsUint64() const
BigIntData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< BigInt > object, ObjectDataKind kind)
int64_t AsInt64(bool *lossless) const
const uint64_t as_uint64_
int64_t AsInt64(bool *lossless) const
int handler_table_size() const
interpreter::Register incoming_new_target_or_generator_register() const
IndirectHandle< BytecodeArray > object() const
int register_count() const
Address handler_table_address() const
uint16_t parameter_count_without_receiver() const
uint16_t parameter_count() const
IndirectHandle< TrustedByteArray > SourcePositionTable(JSHeapBroker *broker) const
uint16_t max_arguments() const
unsigned GetInlinedBytecodeSize() const
IndirectHandle< Code > object() const
void DependOnOwnConstantDataProperty(JSObjectRef holder, MapRef map, FieldIndex index, ObjectRef value)
void DependOnOwnConstantDictionaryProperty(JSObjectRef holder, InternalIndex index, ObjectRef value)
void DependOnConsistentJSFunctionView(JSFunctionRef function)
void DependOnOwnConstantDoubleProperty(JSObjectRef holder, MapRef map, FieldIndex index, Float64 value)
void DependOnOwnConstantElement(JSObjectRef holder, uint32_t index, ObjectRef element)
ContextRef previous(JSHeapBroker *broker, size_t *depth) const
OptionalObjectRef get(JSHeapBroker *broker, int index) const
IndirectHandle< Context > object() const
OptionalObjectRef TryGetSideData(JSHeapBroker *broker, int index) const
ScopeInfoRef scope_info(JSHeapBroker *broker) const
PropertyDetails GetPropertyDetails(InternalIndex descriptor_index) const
IndirectHandle< DescriptorArray > object() const
NameRef GetPropertyKey(JSHeapBroker *broker, InternalIndex descriptor_index) const
OptionalObjectRef GetStrongValue(JSHeapBroker *broker, InternalIndex descriptor_index) const
OptionalSharedFunctionInfoRef shared_function_info(JSHeapBroker *broker) const
OptionalFeedbackVectorRef feedback_vector(JSHeapBroker *broker) const
ObjectRef value(JSHeapBroker *broker) const
SharedFunctionInfoRef shared_function_info(JSHeapBroker *broker) const
bool was_once_deoptimized() const
FeedbackCellRef GetClosureFeedbackCell(JSHeapBroker *broker, int index) const
IndirectHandle< FeedbackVector > object() const
FixedArrayBaseData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< FixedArrayBase > object, ObjectDataKind kind)
IndirectHandle< FixedArrayBase > object() const
FixedArrayData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< FixedArray > object, ObjectDataKind kind)
OptionalObjectRef TryGet(JSHeapBroker *broker, int i) const
Float64 GetFromImmutableFixedDoubleArray(int i) const
ZoneVector< const CFunctionInfo * > c_signatures(JSHeapBroker *broker) const
HolderLookupResult LookupHolderOfExpectedType(JSHeapBroker *broker, MapRef receiver_map)
ZoneVector< Address > c_functions(JSHeapBroker *broker) const
IndirectHandle< FunctionTemplateInfo > object() const
Address callback(JSHeapBroker *broker) const
bool is_signature_undefined(JSHeapBroker *broker) const
OptionalObjectRef callback_data(JSHeapBroker *broker) const
uint64_t value_as_bits() const
std::optional< bool > TryGetBooleanValue(JSHeapBroker *broker) const
std::optional< bool > TryGetBooleanValueImpl(JSHeapBroker *broker) const
InstanceType GetMapInstanceType() const
HeapObjectData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< HeapObject > object, ObjectDataKind kind)
OptionalMapRef map_direct_read(JSHeapBroker *broker) const
HeapObjectType GetHeapObjectType(JSHeapBroker *broker) const
V8_EXPORT_PRIVATE MapRef map(JSHeapBroker *broker) const
JSArrayData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSArray > object, ObjectDataKind kind)
ObjectRef GetBoilerplateLength(JSHeapBroker *broker) const
OptionalObjectRef length_unsafe(JSHeapBroker *broker) const
OptionalObjectRef GetOwnCowElement(JSHeapBroker *broker, FixedArrayBaseRef elements_ref, uint32_t index) const
JSBoundFunctionData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSBoundFunction > object, ObjectDataKind kind)
ObjectRef bound_this(JSHeapBroker *broker) const
JSReceiverRef bound_target_function(JSHeapBroker *broker) const
FixedArrayRef bound_arguments(JSHeapBroker *broker) const
JSDataViewData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSDataView > object, ObjectDataKind kind)
bool has_used_field(UsedField used_field) const
ObjectData * instance_prototype_
ObjectData * context() const
void Cache(JSHeapBroker *broker)
void set_used_field(UsedField used_field)
bool IsConsistentWithHeapState(JSHeapBroker *broker) const
JSFunctionData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSFunction > object, ObjectDataKind kind)
int initial_map_instance_size_with_min_slack() const
ObjectData * instance_prototype() const
bool has_instance_prototype() const
ObjectData * prototype_or_initial_map_
ObjectData * shared() const
ObjectData * raw_feedback_cell() const
bool PrototypeRequiresRuntimeLookup_
@ kInitialMapInstanceSizeWithMinSlack
@ kPrototypeRequiresRuntimeLookup
ObjectData * initial_map() const
bool PrototypeRequiresRuntimeLookup() const
ObjectData * feedback_cell_
int initial_map_instance_size_with_min_slack_
bool has_initial_map() const
bool has_any_used_field() const
ObjectData * initial_map_
bool has_instance_prototype_
OptionalFeedbackVectorRef feedback_vector(JSHeapBroker *broker) const
OptionalCodeRef code(JSHeapBroker *broker) const
NativeContextRef native_context(JSHeapBroker *broker) const
int InitialMapInstanceSizeWithMinSlack(JSHeapBroker *broker) const
bool IsConsistentWithHeapState(JSHeapBroker *broker) const
IndirectHandle< JSFunction > object() const
JSGlobalObjectData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSGlobalObject > object, ObjectDataKind kind)
OptionalPropertyCellRef GetPropertyCell(JSHeapBroker *broker, NameRef name) const
JSGlobalProxyData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSGlobalProxy > object, ObjectDataKind kind)
static constexpr uint32_t kInitialRefsBucketCount
PtrComprCageBase cage_base() const
Handle< T > CanonicalPersistentHandle(Tagged< T > object)
CompilationDependencies * dependencies() const
bool IsMainThread() const
void CollectArrayAndObjectPrototypes()
ZoneUnorderedMap< FeedbackSource, ProcessedFeedback const *, FeedbackSource::Hash, FeedbackSource::Equal > feedback_
void InitializeAndStartSerializing(DirectHandle< NativeContext > native_context)
bool ObjectMayBeUninitialized(DirectHandle< Object > object) const
LocalIsolate * local_isolate() const
void SetTargetNativeContextRef(DirectHandle< NativeContext > native_context)
NativeContextRef target_native_context() const
bool IsArrayOrObjectPrototype(JSObjectRef object) const
ObjectData * TryGetOrCreateData(Handle< Object > object, GetOrCreateDataFlags flags={})
Isolate * isolate() const
JSObjectData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSObject > object, ObjectDataKind kind)
OptionalObjectRef GetOwnFastConstantDataProperty(JSHeapBroker *broker, Representation field_representation, FieldIndex index, CompilationDependencies *dependencies) const
IndirectHandle< JSObject > object() const
OptionalMapRef GetObjectCreateMap(JSHeapBroker *broker) const
OptionalObjectRef GetOwnConstantElement(JSHeapBroker *broker, FixedArrayBaseRef elements_ref, uint32_t index, CompilationDependencies *dependencies) const
OptionalFixedArrayBaseRef elements(JSHeapBroker *broker, RelaxedLoadTag) const
OptionalObjectRef GetOwnDictionaryProperty(JSHeapBroker *broker, InternalIndex index, CompilationDependencies *dependencies) const
OptionalObjectRef RawInobjectPropertyAt(JSHeapBroker *broker, FieldIndex index) const
std::optional< Float64 > GetOwnFastConstantDoubleProperty(JSHeapBroker *broker, FieldIndex index, CompilationDependencies *dependencies) const
OptionalObjectRef raw_properties_or_hash(JSHeapBroker *broker) const
std::optional< Tagged< Object > > GetOwnConstantElementFromHeap(JSHeapBroker *broker, Tagged< FixedArrayBase > elements, ElementsKind elements_kind, uint32_t index) const
bool IsElementsTenured(FixedArrayBaseRef elements)
JSPrimitiveWrapperData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSPrimitiveWrapper > object, ObjectDataKind kind)
bool IsStringWrapper(JSHeapBroker *broker) const
JSReceiverData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSReceiver > object, ObjectDataKind kind)
JSTypedArrayData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< JSTypedArray > object, ObjectDataKind kind)
IndirectHandle< JSTypedArray > object() const
ElementsKind elements_kind(JSHeapBroker *broker) const
size_t byte_length() const
HeapObjectRef buffer(JSHeapBroker *broker) const
InstanceType instance_type() const
int UnusedPropertyFields() const
int unused_property_fields_
bool is_abandoned_prototype_map() const
MapData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< Map > object, ObjectDataKind kind)
int instance_size() const
int in_object_properties() const
int in_object_properties_
InstanceType instance_type_
uint32_t bit_field2() const
bool is_abandoned_prototype_map_
uint32_t bit_field3() const
bool supports_fast_array_resize(JSHeapBroker *broker) const
bool has_indexed_interceptor() const
NameRef GetPropertyKey(JSHeapBroker *broker, InternalIndex descriptor_index) const
ObjectRef GetConstructor(JSHeapBroker *broker) const
PropertyDetails GetPropertyDetails(JSHeapBroker *broker, InternalIndex descriptor_index) const
int construction_counter() const
DescriptorArrayRef instance_descriptors(JSHeapBroker *broker) const
IndirectHandle< Map > object() const
MapRef FindRootMap(JSHeapBroker *broker) const
int GetInObjectPropertiesStartInWords() const
int GetInObjectPropertyOffset(int index) const
bool IsTwoByteStringMap() const
bool is_access_check_needed() const
bool IsFixedCowArrayMap(JSHeapBroker *broker) const
bool PrototypesElementsDoNotHaveAccessorsOrThrow(JSHeapBroker *broker, ZoneVector< MapRef > *prototype_maps)
bool CanTransition() const
HeapObjectRef prototype(JSHeapBroker *broker) const
bool IsThinStringMap() const
bool IsStringWrapperMap() const
int instance_size() const
int constructor_function_index() const
InstanceType instance_type() const
HeapObjectRef GetBackPointer(JSHeapBroker *broker) const
bool CanInlineElementAccess() const
bool is_undetectable() const
OptionalObjectRef GetStrongValue(JSHeapBroker *broker, InternalIndex descriptor_number) const
int NumberOfOwnDescriptors() const
OddballType oddball_type(JSHeapBroker *broker) const
ElementsKind elements_kind() const
MapRef FindFieldOwner(JSHeapBroker *broker, InternalIndex descriptor_index) const
bool IsPrimitiveMap() const
bool CanBeDeprecated() const
FieldIndex GetFieldIndexFor(InternalIndex descriptor_index) const
bool supports_fast_array_iteration(JSHeapBroker *broker) const
bool IsInobjectSlackTrackingInProgress() const
bool IsBooleanMap(JSHeapBroker *broker) const
int GetInObjectProperties() const
OptionalMapRef AsElementsKind(JSHeapBroker *broker, ElementsKind kind) const
bool IsUniqueName() const
OptionalJSFunctionRef GetConstructorFunction(JSHeapBroker *broker, MapRef map) const
MapRef GetFunctionMapFromIndex(JSHeapBroker *broker, int index) const
MapRef GetInitialJSArrayMap(JSHeapBroker *broker, ElementsKind kind) const
bool GlobalIsDetached(JSHeapBroker *broker) const
int boilerplate_properties_count() const
IndirectHandle< Object > object() const
bool should_access_heap() const
ObjectDataKind const kind_
IndirectHandle< Object > const object_
ObjectData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< Object > object, ObjectDataKind kind)
ObjectDataKind kind() const
PropertyDetails property_details() const
PropertyDetails property_details_
ObjectData * value() const
PropertyCellData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< PropertyCell > object, ObjectDataKind kind)
bool Cache(JSHeapBroker *broker)
V8_WARN_UNUSED_RESULT bool Cache(JSHeapBroker *broker) const
Entry * Lookup(const Address &key) const
Entry * LookupOrInsert(const Address &key)
StringRef source(JSHeapBroker *broker) const
HeapObjectRef data(JSHeapBroker *broker) const
IndirectHandle< RegExpBoilerplateDescription > object() const
ScriptContextTableData(JSHeapBroker *broker, ObjectData **storage, IndirectHandle< ScriptContextTable > object, ObjectDataKind kind)
int context_parameters_start() const
bool HasBreakInfo(JSHeapBroker *broker) const
OptionalFunctionTemplateInfoRef function_template_info(JSHeapBroker *broker) const
SharedFunctionInfo::Inlineability GetInlineability(JSHeapBroker *broker) const
IndirectHandle< SharedFunctionInfo > object() const
ScopeInfoRef scope_info(JSHeapBroker *broker) const
int context_header_size() const
OptionalObjectRef import_meta(JSHeapBroker *broker) const
OptionalCellRef GetCell(JSHeapBroker *broker, int cell_index) const
bool IsExternalString() const
OptionalObjectRef GetCharAsStringOrUndefined(JSHeapBroker *broker, uint32_t index) const
bool SupportedStringKind() const
std::optional< double > ToInt(JSHeapBroker *broker, int radix)
std::optional< uint16_t > GetFirstChar(JSHeapBroker *broker) const
std::optional< uint16_t > GetChar(JSHeapBroker *broker, uint32_t index) const
std::optional< Handle< String > > ObjectIfContentAccessible(JSHeapBroker *broker)
IndirectHandle< String > object() const
bool IsOneByteRepresentation() const
bool IsContentAccessible() const
std::optional< double > ToNumber(JSHeapBroker *broker)
JSHeapBroker *const broker_
#define CREATE_DATA(Name)
#define DEF_NATIVE_CONTEXT_ACCESSOR(ResultType, Name)
#define HEAP_ACCESSOR_C(holder, result, name)
#define JSFUNCTION_BIMODAL_ACCESSOR_WITH_DEP_RELEVANT_C( Result, Name, UsedField, RelevantValue)
#define JSFUNCTION_BIMODAL_ACCESSOR_WITH_DEP(Result, Name, UsedField)
#define IF_ACCESS_FROM_HEAP_C(name)
#define BIMODAL_ACCESSOR(holder, result, name)
#define HEAP_ACCESSOR_B(holder, field, name, BitField)
#define DEF_SFI_ACCESSOR(type, name)
#define DEFINE_IS_AND_AS(Name)
#define BIMODAL_ACCESSOR_C(holder, result, name)
#define DEF_OBJECT_GETTER(T)
#define BIMODAL_ACCESSOR_B(holder, field, name, BitField)
#define DEF_TESTER(Type,...)
#define IF_HOLE_THEN_RETURN(Name, name, Root)
#define HEAP_BROKER_OBJECT_LIST(V)
#define HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(V)
#define BROKER_SFI_FIELDS(V)
#define BROKER_NATIVE_CONTEXT_FIELDS(V)
#define INSTANCE_TYPE_CHECKERS(V)
#define TRACE_BROKER_MISSING(broker, x)
ZoneVector< RpoNumber > & result
InstructionOperand source
V8_INLINE constexpr bool IsThinString(InstanceType instance_type)
V8_INLINE constexpr bool IsTwoByteString(InstanceType instance_type)
true JSFunctionData::kInitialMap raw_feedback_cell
Map::Bits3::NumberOfOwnDescriptorsBits Map::Bits3::ConstructionCounterBits is_access_check_needed
base::Flags< GetOrCreateDataFlag > GetOrCreateDataFlags
Map::Bits3::NumberOfOwnDescriptorsBits Map::Bits3::ConstructionCounterBits bit_field
ref_traits< T >::ref_type MakeRefAssumeMemoryFence(JSHeapBroker *broker, Tagged< T > object)
OptionalRef< typename ref_traits< T >::ref_type > TryMakeRef(JSHeapBroker *broker, ObjectData *data)
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
Map::Bits3::NumberOfOwnDescriptorsBits construction_counter
@ kUnserializedHeapObject
@ kNeverSerializedHeapObject
@ kUnserializedReadOnlyHeapObject
@ kBackgroundSerializedHeapObject
ref_traits< T >::ref_type MakeRef(JSHeapBroker *broker, Tagged< T > object)
std::optional< double > TryStringToDouble(LocalIsolate *isolate, DirectHandle< String > object, uint32_t max_length_for_conversion)
PerThreadAssertScopeDebugOnly< false, SAFEPOINTS_ASSERT, HEAP_ALLOCATION_ASSERT > DisallowGarbageCollection
Map::Bits1::HasPrototypeSlotBit Map::Bits1::HasNamedInterceptorBit Map::Bits1::IsUndetectableBit Map::Bits1::IsConstructorBit bit_field2
bool IsFastOrNonextensibleOrSealedElementsKind(ElementsKind kind)
bool IsTypedArrayElementsKind(ElementsKind kind)
bool IsRabGsabTypedArrayElementsKind(ElementsKind kind)
Tagged(T object) -> Tagged< T >
V8_INLINE constexpr bool IsSmi(TaggedImpl< kRefType, StorageType > obj)
kInterpreterTrampolineOffset Tagged< HeapObject >
kStaticElementsTemplateOffset kInstancePropertiesTemplateOffset Tagged< FixedArray >
@ SLOW_STRING_WRAPPER_ELEMENTS
@ FAST_STRING_WRAPPER_ELEMENTS
Map::Bits1::HasPrototypeSlotBit Map::Bits1::HasNamedInterceptorBit is_undetectable
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in allocation gc speed threshold for starting incremental marking via a task in percent of available threshold for starting incremental marking immediately in percent of available Use a single schedule for determining a marking schedule between JS and C objects schedules the minor GC task with kUserVisible priority max worker number of concurrent for NumberOfWorkerThreads start background threads that allocate memory concurrent_array_buffer_sweeping use parallel threads to clear weak refs in the atomic pause trace progress of the incremental marking trace object counts and memory usage report a tick only when allocated zone memory changes by this amount TracingFlags::gc_stats TracingFlags::gc_stats track native contexts that are expected to be garbage collected verify heap pointers before and after GC memory reducer runs GC with ReduceMemoryFootprint flag Maximum number of memory reducer GCs scheduled Old gen GC speed is computed directly from gc tracer counters Perform compaction on full GCs based on V8 s default heuristics Perform compaction on every full GC Perform code space compaction when finalizing a full GC with stack Stress GC compaction to flush out bugs with moving objects flush of baseline code when it has not been executed recently Use time base code flushing instead of age Use a progress bar to scan large objects in increments when incremental marking is active force incremental marking for small heaps and run it more often force marking at random points between and force scavenge at random points between and reclaim otherwise unreachable unmodified wrapper objects when possible less compaction in non memory reducing mode use high priority threads for concurrent Marking Test mode only flag It allows an unit test to select evacuation candidates use incremental marking for CppHeap cppheap_concurrent_marking c value for membalancer A special constant to balance between memory and space tradeoff The smaller the more memory it uses enable use of SSE4 instructions if available enable use of AVX VNNI instructions if available enable use of POPCNT instruction if available force all emitted branches to be in long mode(MIPS/PPC only)") DEFINE_BOOL(partial_constant_pool
bool IsNullOrUndefined(Tagged< Object > obj, Isolate *isolate)
bool IsSmiOrObjectElementsKind(ElementsKind kind)
constexpr int kSystemPointerSize
Handle< T > IndirectHandle
DONT_OVERRIDE DISABLE_ALLOCATION_SITES HOLEY_ELEMENTS
Map::Bits1::HasPrototypeSlotBit Map::Bits1::HasNamedInterceptorBit Map::Bits1::IsUndetectableBit Map::Bits1::IsConstructorBit Map::Bits2::IsImmutablePrototypeBit is_deprecated
bool IsFastElementsKind(ElementsKind kind)
DONT_OVERRIDE DISABLE_ALLOCATION_SITES DISABLE_ALLOCATION_SITES HOLEY_DOUBLE_ELEMENTS
V8_INLINE constexpr bool IsHeapObject(TaggedImpl< kRefType, StorageType > obj)
V8_EXPORT_PRIVATE FlagValues v8_flags
std::optional< double > TryStringToInt(LocalIsolate *isolate, DirectHandle< String > object, int radix)
bool IsStringWrapperElementsKind(ElementsKind kind)
kInstanceDescriptorsOffset kTransitionsOrPrototypeInfoOffset IsNull(value)||IsJSProxy(value)||IsWasmObject(value)||(IsJSObject(value) &&(HeapLayout
kInstanceDescriptorsOffset kTransitionsOrPrototypeInfoOffset prototype
allowed_receiver_instance_type_range_end
!IsContextMap !IsContextMap native_context
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
static constexpr RelaxedLoadTag kRelaxedLoad
T ToCData(i::Isolate *isolate, v8::internal::Tagged< v8::internal::Object > obj)
static constexpr AcquireLoadTag kAcquireLoad
Maybe< T > Just(const T &t)
base::Vector< const char > contents
#define DCHECK_LE(v1, v2)
#define CHECK_GE(lhs, rhs)
#define CHECK_IMPLIES(lhs, rhs)
#define CHECK_GT(lhs, rhs)
#define CHECK_LT(lhs, rhs)
#define CHECK_LE(lhs, rhs)
#define CHECK_WITH_MSG(condition, message)
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define CHECK_NE(lhs, rhs)
#define DCHECK_GE(v1, v2)
#define CHECK_EQ(lhs, rhs)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)