[in-place weak refs] Use in-place weak refs in DependentCode

BUG=V8:7308

Change-Id: I4836aaca1474f08098120e6c17cc2b3bd65c70eb
Reviewed-on: https://chromium-review.googlesource.com/1166914
Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Commit-Queue: Marja Hölttä <marja@chromium.org>
Cr-Commit-Position: refs/heads/master@{#54975}
This commit is contained in:
Marja Hölttä 2018-08-08 14:00:48 +02:00 committed by Commit Bot
parent ff4fa92e88
commit e2fb86f804
10 changed files with 197 additions and 191 deletions

View File

@ -9645,7 +9645,7 @@ TNode<AllocationSite> CodeStubAssembler::CreateAllocationSiteInFeedbackVector(
// Store an empty fixed array for the code dependency.
StoreObjectFieldRoot(site, AllocationSite::kDependentCodeOffset,
Heap::kEmptyFixedArrayRootIndex);
Heap::kEmptyWeakFixedArrayRootIndex);
// Link the object to the allocation site list
TNode<ExternalReference> site_list = ExternalConstant(

View File

@ -17,7 +17,7 @@ CompilationDependencies::CompilationDependencies(Isolate* isolate, Zone* zone)
class CompilationDependencies::Dependency : public ZoneObject {
public:
virtual bool IsValid() const = 0;
virtual void Install(Isolate* isolate, Handle<WeakCell> code) = 0;
virtual void Install(Isolate* isolate, MaybeObjectHandle code) = 0;
};
class InitialMapDependency final : public CompilationDependencies::Dependency {
@ -36,7 +36,7 @@ class InitialMapDependency final : public CompilationDependencies::Dependency {
function->initial_map() == *initial_map_.object<Map>();
}
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(isolate, code, initial_map_.object<Map>(),
DependentCode::kInitialMapChangedGroup);
@ -55,7 +55,7 @@ class StableMapDependency final : public CompilationDependencies::Dependency {
bool IsValid() const override { return map_.object<Map>()->is_stable(); }
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(isolate, code, map_.object<Map>(),
DependentCode::kPrototypeCheckGroup);
@ -73,7 +73,7 @@ class TransitionDependency final : public CompilationDependencies::Dependency {
bool IsValid() const override { return !map_.object<Map>()->is_deprecated(); }
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(isolate, code, map_.object<Map>(),
DependentCode::kTransitionGroup);
@ -97,7 +97,7 @@ class PretenureModeDependency final
return mode_ == site_.object<AllocationSite>()->GetPretenureMode();
}
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(
isolate, code, site_.object<AllocationSite>(),
@ -127,7 +127,7 @@ class FieldTypeDependency final : public CompilationDependencies::Dependency {
return *type == owner->instance_descriptors()->GetFieldType(descriptor_);
}
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(isolate, code, owner_.object<Map>(),
DependentCode::kFieldOwnerGroup);
@ -157,7 +157,7 @@ class GlobalPropertyDependency final
read_only_ == cell->property_details().IsReadOnly();
}
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(isolate, code,
cell_.object<PropertyCell>(),
@ -181,7 +181,7 @@ class ProtectorDependency final : public CompilationDependencies::Dependency {
return cell->value() == Smi::FromInt(Isolate::kProtectorValid);
}
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(isolate, code,
cell_.object<PropertyCell>(),
@ -213,7 +213,7 @@ class ElementsKindDependency final
return kind_ == kind;
}
void Install(Isolate* isolate, Handle<WeakCell> code) override {
void Install(Isolate* isolate, MaybeObjectHandle code) override {
SLOW_DCHECK(IsValid());
DependentCode::InstallDependency(
isolate, code, site_.object<AllocationSite>(),
@ -304,7 +304,6 @@ bool CompilationDependencies::Commit(Handle<Code> code) {
return false;
}
Handle<WeakCell> cell = Code::WeakCellFor(code);
for (auto dep : dependencies_) {
// Check each dependency's validity again right before installing it,
// because a GC can trigger invalidation for some dependency kinds.
@ -312,7 +311,7 @@ bool CompilationDependencies::Commit(Handle<Code> code) {
dependencies_.clear();
return false;
}
dep->Install(isolate, cell);
dep->Install(isolate, MaybeObjectHandle::Weak(code));
}
dependencies_.clear();
return true;

View File

@ -1768,7 +1768,7 @@ Handle<PropertyCell> Factory::NewPropertyCell(Handle<Name> name,
HeapObject* result = AllocateRawWithImmortalMap(
PropertyCell::kSize, pretenure, *global_property_cell_map());
Handle<PropertyCell> cell(PropertyCell::cast(result), isolate());
cell->set_dependent_code(DependentCode::cast(*empty_fixed_array()),
cell->set_dependent_code(DependentCode::cast(*empty_weak_fixed_array()),
SKIP_WRITE_BARRIER);
cell->set_property_details(PropertyDetails(Smi::kZero));
cell->set_name(*name);
@ -1857,7 +1857,7 @@ Map* Factory::InitializeMap(Map* map, InstanceType type, int instance_size,
map->set_inobject_properties_start_or_constructor_function_index(0);
map->set_prototype_validity_cell(Smi::FromInt(Map::kPrototypeChainValid));
}
map->set_dependent_code(DependentCode::cast(*empty_fixed_array()),
map->set_dependent_code(DependentCode::cast(*empty_weak_fixed_array()),
SKIP_WRITE_BARRIER);
map->set_raw_transitions(MaybeObject::FromSmi(Smi::kZero));
map->SetInObjectUnusedPropertyFields(inobject_properties);

View File

@ -145,7 +145,7 @@ AllocationResult Heap::AllocatePartialMap(InstanceType instance_type,
void Heap::FinalizePartialMap(Map* map) {
ReadOnlyRoots roots(this);
map->set_dependent_code(DependentCode::cast(roots.empty_fixed_array()));
map->set_dependent_code(DependentCode::cast(roots.empty_weak_fixed_array()));
map->set_raw_transitions(MaybeObject::FromSmi(Smi::kZero));
map->set_instance_descriptors(roots.empty_descriptor_array());
if (FLAG_unbox_double_fields) {

View File

@ -347,9 +347,9 @@ bool HeapObject::IsTemplateList() const {
}
bool HeapObject::IsDependentCode() const {
if (!IsFixedArrayExact()) return false;
// There's actually no way to see the difference between a fixed array and
// a dependent codes array.
if (!IsWeakFixedArray()) return false;
// There's actually no way to see the difference between a weak fixed array
// and a dependent codes array.
return true;
}
@ -1014,7 +1014,7 @@ void AllocationSite::Initialize() {
set_pretenure_data(0);
set_pretenure_create_count(0);
set_dependent_code(
DependentCode::cast(GetReadOnlyRoots().empty_fixed_array()),
DependentCode::cast(GetReadOnlyRoots().empty_weak_fixed_array()),
SKIP_WRITE_BARRIER);
}

View File

@ -15167,7 +15167,7 @@ void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) {
array->GetElementsAccessor()->SetLength(array, new_length);
}
DependentCode* DependentCode::Get(Handle<HeapObject> object) {
DependentCode* DependentCode::GetDependentCode(Handle<HeapObject> object) {
if (object->IsMap()) {
return Handle<Map>::cast(object)->dependent_code();
} else if (object->IsPropertyCell()) {
@ -15178,7 +15178,8 @@ DependentCode* DependentCode::Get(Handle<HeapObject> object) {
UNREACHABLE();
}
void DependentCode::Set(Handle<HeapObject> object, Handle<DependentCode> dep) {
void DependentCode::SetDependentCode(Handle<HeapObject> object,
Handle<DependentCode> dep) {
if (object->IsMap()) {
Handle<Map>::cast(object)->set_dependent_code(*dep);
} else if (object->IsPropertyCell()) {
@ -15190,28 +15191,30 @@ void DependentCode::Set(Handle<HeapObject> object, Handle<DependentCode> dep) {
}
}
void DependentCode::InstallDependency(Isolate* isolate, Handle<WeakCell> cell,
void DependentCode::InstallDependency(Isolate* isolate, MaybeObjectHandle code,
Handle<HeapObject> object,
DependencyGroup group) {
Handle<DependentCode> old_deps(DependentCode::Get(object), isolate);
Handle<DependentCode> old_deps(DependentCode::GetDependentCode(object),
isolate);
Handle<DependentCode> new_deps =
InsertWeakCode(isolate, old_deps, group, cell);
InsertWeakCode(isolate, old_deps, group, code);
// Update the list head if necessary.
if (!new_deps.is_identical_to(old_deps)) DependentCode::Set(object, new_deps);
if (!new_deps.is_identical_to(old_deps))
DependentCode::SetDependentCode(object, new_deps);
}
Handle<DependentCode> DependentCode::InsertWeakCode(
Isolate* isolate, Handle<DependentCode> entries, DependencyGroup group,
Handle<WeakCell> code_cell) {
MaybeObjectHandle code) {
if (entries->length() == 0 || entries->group() > group) {
// There is no such group.
return DependentCode::New(isolate, group, code_cell, entries);
return DependentCode::New(isolate, group, code, entries);
}
if (entries->group() < group) {
// The group comes later in the list.
Handle<DependentCode> old_next(entries->next_link(), isolate);
Handle<DependentCode> new_next =
InsertWeakCode(isolate, old_next, group, code_cell);
InsertWeakCode(isolate, old_next, group, code);
if (!old_next.is_identical_to(new_next)) {
entries->set_next_link(*new_next);
}
@ -15221,24 +15224,24 @@ Handle<DependentCode> DependentCode::InsertWeakCode(
int count = entries->count();
// Check for existing entry to avoid duplicates.
for (int i = 0; i < count; i++) {
if (entries->object_at(i) == *code_cell) return entries;
if (entries->object_at(i) == *code) return entries;
}
if (entries->length() < kCodesStartIndex + count + 1) {
entries = EnsureSpace(isolate, entries);
// Count could have changed, reload it.
count = entries->count();
}
entries->set_object_at(count, *code_cell);
entries->set_object_at(count, *code);
entries->set_count(count + 1);
return entries;
}
Handle<DependentCode> DependentCode::New(Isolate* isolate,
DependencyGroup group,
Handle<Object> object,
MaybeObjectHandle object,
Handle<DependentCode> next) {
Handle<DependentCode> result = Handle<DependentCode>::cast(
isolate->factory()->NewFixedArray(kCodesStartIndex + 1, TENURED));
isolate->factory()->NewWeakFixedArray(kCodesStartIndex + 1, TENURED));
result->set_next_link(*next);
result->set_flags(GroupField::encode(group) | CountField::encode(1));
result->set_object_at(0, *object);
@ -15251,7 +15254,7 @@ Handle<DependentCode> DependentCode::EnsureSpace(
int capacity = kCodesStartIndex + DependentCode::Grow(entries->count());
int grow_by = capacity - entries->length();
return Handle<DependentCode>::cast(
isolate->factory()->CopyFixedArrayAndGrow(entries, grow_by, TENURED));
isolate->factory()->CopyWeakFixedArrayAndGrow(entries, grow_by, TENURED));
}
@ -15259,8 +15262,8 @@ bool DependentCode::Compact() {
int old_count = count();
int new_count = 0;
for (int i = 0; i < old_count; i++) {
Object* obj = object_at(i);
if (!obj->IsWeakCell() || !WeakCell::cast(obj)->cleared()) {
MaybeObject* obj = object_at(i);
if (!obj->IsClearedWeakHeapObject()) {
if (i != new_count) {
copy(i, new_count);
}
@ -15274,20 +15277,19 @@ bool DependentCode::Compact() {
return new_count < old_count;
}
bool DependentCode::Contains(DependencyGroup group, WeakCell* code_cell) {
bool DependentCode::Contains(DependencyGroup group, MaybeObject* code) {
if (this->length() == 0 || this->group() > group) {
// There is no such group.
return false;
}
if (this->group() < group) {
// The group comes later in the list.
return next_link()->Contains(group, code_cell);
return next_link()->Contains(group, code);
}
DCHECK_EQ(group, this->group());
int count = this->count();
for (int i = 0; i < count; i++) {
if (object_at(i) == code_cell) return true;
if (object_at(i) == code) return true;
}
return false;
}
@ -15324,10 +15326,9 @@ bool DependentCode::MarkCodeForDeoptimization(
bool marked = false;
int count = this->count();
for (int i = 0; i < count; i++) {
Object* obj = object_at(i);
WeakCell* cell = WeakCell::cast(obj);
if (cell->cleared()) continue;
Code* code = Code::cast(cell->value());
MaybeObject* obj = object_at(i);
if (obj->IsClearedWeakHeapObject()) continue;
Code* code = Code::cast(obj->ToWeakHeapObject());
if (!code->marked_for_deoptimization()) {
code->SetMarkedForDeoptimization(DependencyGroupName(group));
marked = true;

View File

@ -11,6 +11,7 @@
#include "src/isolate.h"
#include "src/objects/dictionary.h"
#include "src/objects/map-inl.h"
#include "src/objects/maybe-object-inl.h"
#include "src/v8memory.h"
// Has to be the last include (doesn't have include guards):
@ -132,17 +133,17 @@ BytecodeArray* AbstractCode::GetBytecodeArray() {
}
DependentCode* DependentCode::next_link() {
return DependentCode::cast(get(kNextLinkIndex));
return DependentCode::cast(Get(kNextLinkIndex)->ToStrongHeapObject());
}
void DependentCode::set_next_link(DependentCode* next) {
set(kNextLinkIndex, next);
Set(kNextLinkIndex, HeapObjectReference::Strong(next));
}
int DependentCode::flags() { return Smi::ToInt(get(kFlagsIndex)); }
int DependentCode::flags() { return Smi::ToInt(Get(kFlagsIndex)->ToSmi()); }
void DependentCode::set_flags(int flags) {
set(kFlagsIndex, Smi::FromInt(flags));
Set(kFlagsIndex, MaybeObject::FromObject(Smi::FromInt(flags)));
}
int DependentCode::count() { return CountField::decode(flags()); }
@ -155,16 +156,21 @@ DependentCode::DependencyGroup DependentCode::group() {
return static_cast<DependencyGroup>(GroupField::decode(flags()));
}
void DependentCode::set_object_at(int i, Object* object) {
set(kCodesStartIndex + i, object);
void DependentCode::set_object_at(int i, MaybeObject* object) {
Set(kCodesStartIndex + i, object);
}
Object* DependentCode::object_at(int i) { return get(kCodesStartIndex + i); }
MaybeObject* DependentCode::object_at(int i) {
return Get(kCodesStartIndex + i);
}
void DependentCode::clear_at(int i) { set_undefined(kCodesStartIndex + i); }
void DependentCode::clear_at(int i) {
Set(kCodesStartIndex + i,
HeapObjectReference::Strong(GetReadOnlyRoots().undefined_value()));
}
void DependentCode::copy(int from, int to) {
set(kCodesStartIndex + to, get(kCodesStartIndex + from));
Set(kCodesStartIndex + to, Get(kCodesStartIndex + from));
}
INT_ACCESSORS(Code, raw_instruction_size, kInstructionSizeOffset)

View File

@ -577,10 +577,10 @@ class AbstractCode : public HeapObject, public NeverReadOnlySpaceObject {
static const int kMaxLoopNestingMarker = 6;
};
// Dependent code is a singly linked list of fixed arrays. Each array contains
// code objects in weak cells for one dependent group. The suffix of the array
// can be filled with the undefined value if the number of codes is less than
// the length of the array.
// Dependent code is a singly linked list of weak fixed arrays. Each array
// contains weak pointers to code objects for one dependent group. The suffix of
// the array can be filled with the undefined value if the number of codes is
// less than the length of the array.
//
// +------+-----------------+--------+--------+-----+--------+-----------+-----+
// | next | count & group 1 | code 1 | code 2 | ... | code n | undefined | ... |
@ -592,11 +592,11 @@ class AbstractCode : public HeapObject, public NeverReadOnlySpaceObject {
// +------+-----------------+--------+--------+-----+--------+-----------+-----+
// |
// V
// empty_fixed_array()
// empty_weak_fixed_array()
//
// The list of fixed arrays is ordered by dependency groups.
// The list of weak fixed arrays is ordered by dependency groups.
class DependentCode : public FixedArray {
class DependentCode : public WeakFixedArray {
public:
DECL_CAST(DependentCode)
@ -627,11 +627,11 @@ class DependentCode : public FixedArray {
};
// Register a code dependency of {cell} on {object}.
static void InstallDependency(Isolate* isolate, Handle<WeakCell> cell,
static void InstallDependency(Isolate* isolate, MaybeObjectHandle code,
Handle<HeapObject> object,
DependencyGroup group);
bool Contains(DependencyGroup group, WeakCell* code_cell);
bool Contains(DependencyGroup group, MaybeObject* code);
bool IsEmpty(DependencyGroup group);
void DeoptimizeDependentCodeGroup(Isolate* isolate, DependencyGroup group);
@ -640,7 +640,7 @@ class DependentCode : public FixedArray {
// The following low-level accessors are exposed only for tests.
inline DependencyGroup group();
inline Object* object_at(int i);
inline MaybeObject* object_at(int i);
inline int count();
inline DependentCode* next_link();
@ -648,18 +648,19 @@ class DependentCode : public FixedArray {
static const char* DependencyGroupName(DependencyGroup group);
// Get/Set {object}'s {DependentCode}.
static DependentCode* Get(Handle<HeapObject> object);
static void Set(Handle<HeapObject> object, Handle<DependentCode> dep);
static DependentCode* GetDependentCode(Handle<HeapObject> object);
static void SetDependentCode(Handle<HeapObject> object,
Handle<DependentCode> dep);
static Handle<DependentCode> New(Isolate* isolate, DependencyGroup group,
Handle<Object> object,
MaybeObjectHandle object,
Handle<DependentCode> next);
static Handle<DependentCode> EnsureSpace(Isolate* isolate,
Handle<DependentCode> entries);
static Handle<DependentCode> InsertWeakCode(Isolate* isolate,
Handle<DependentCode> entries,
DependencyGroup group,
Handle<WeakCell> code_cell);
MaybeObjectHandle code);
// Compact by removing cleared weak cells and return true if there was
// any cleared weak cell.
@ -677,7 +678,7 @@ class DependentCode : public FixedArray {
inline void set_next_link(DependentCode* next);
inline void set_count(int value);
inline void set_object_at(int i, Object* object);
inline void set_object_at(int i, MaybeObject* object);
inline void clear_at(int i);
inline void copy(int from, int to);

View File

@ -3628,15 +3628,15 @@ TEST(EnsureAllocationSiteDependentCodesProcessed) {
int dependency_group_count = 0;
DependentCode* dependency = site->dependent_code();
while (dependency != ReadOnlyRoots(heap).empty_fixed_array()) {
while (dependency != ReadOnlyRoots(heap).empty_weak_fixed_array()) {
CHECK(dependency->group() ==
DependentCode::kAllocationSiteTransitionChangedGroup ||
dependency->group() ==
DependentCode::kAllocationSiteTenuringChangedGroup);
CHECK_EQ(1, dependency->count());
CHECK(dependency->object_at(0)->IsWeakCell());
CHECK(dependency->object_at(0)->IsWeakHeapObject());
Code* function_bar =
Code::cast(WeakCell::cast(dependency->object_at(0))->value());
Code::cast(dependency->object_at(0)->ToWeakHeapObject());
CHECK_EQ(bar_handle->code(), function_bar);
dependency = dependency->next_link();
dependency_group_count++;
@ -3653,8 +3653,7 @@ TEST(EnsureAllocationSiteDependentCodesProcessed) {
// The site still exists because of our global handle, but the code is no
// longer referred to by dependent_code().
CHECK(site->dependent_code()->object_at(0)->IsWeakCell() &&
WeakCell::cast(site->dependent_code()->object_at(0))->cleared());
CHECK(site->dependent_code()->object_at(0)->IsClearedWeakHeapObject());
}
void CheckNumberOfAllocations(Heap* heap, const char* source,

View File

@ -179,7 +179,7 @@ KNOWN_MAPS = {
("RO_SPACE", 0x02251): (132, "MetaMap"),
("RO_SPACE", 0x022d1): (131, "NullMap"),
("RO_SPACE", 0x02341): (205, "DescriptorArrayMap"),
("RO_SPACE", 0x023a1): (182, "FixedArrayMap"),
("RO_SPACE", 0x023a1): (204, "WeakFixedArrayMap"),
("RO_SPACE", 0x023f1): (152, "OnePointerFillerMap"),
("RO_SPACE", 0x02441): (152, "TwoPointerFillerMap"),
("RO_SPACE", 0x024c1): (131, "UninitializedMap"),
@ -189,101 +189,101 @@ KNOWN_MAPS = {
("RO_SPACE", 0x026c1): (131, "TheHoleMap"),
("RO_SPACE", 0x02771): (131, "BooleanMap"),
("RO_SPACE", 0x02869): (136, "ByteArrayMap"),
("RO_SPACE", 0x028b9): (182, "FixedCOWArrayMap"),
("RO_SPACE", 0x02909): (184, "HashTableMap"),
("RO_SPACE", 0x02959): (128, "SymbolMap"),
("RO_SPACE", 0x029a9): (72, "OneByteStringMap"),
("RO_SPACE", 0x029f9): (193, "ScopeInfoMap"),
("RO_SPACE", 0x02a49): (216, "SharedFunctionInfoMap"),
("RO_SPACE", 0x02a99): (133, "CodeMap"),
("RO_SPACE", 0x02ae9): (199, "FunctionContextMap"),
("RO_SPACE", 0x02b39): (208, "CellMap"),
("RO_SPACE", 0x02b89): (222, "WeakCellMap"),
("RO_SPACE", 0x02bd9): (215, "GlobalPropertyCellMap"),
("RO_SPACE", 0x02c29): (135, "ForeignMap"),
("RO_SPACE", 0x02c79): (206, "TransitionArrayMap"),
("RO_SPACE", 0x02cc9): (211, "FeedbackVectorMap"),
("RO_SPACE", 0x02d59): (131, "ArgumentsMarkerMap"),
("RO_SPACE", 0x02e01): (131, "ExceptionMap"),
("RO_SPACE", 0x02ea9): (131, "TerminationExceptionMap"),
("RO_SPACE", 0x02f59): (131, "OptimizedOutMap"),
("RO_SPACE", 0x03001): (131, "StaleRegisterMap"),
("RO_SPACE", 0x03079): (201, "NativeContextMap"),
("RO_SPACE", 0x030c9): (200, "ModuleContextMap"),
("RO_SPACE", 0x03119): (198, "EvalContextMap"),
("RO_SPACE", 0x03169): (202, "ScriptContextMap"),
("RO_SPACE", 0x031b9): (195, "BlockContextMap"),
("RO_SPACE", 0x03209): (196, "CatchContextMap"),
("RO_SPACE", 0x03259): (203, "WithContextMap"),
("RO_SPACE", 0x032a9): (197, "DebugEvaluateContextMap"),
("RO_SPACE", 0x032f9): (194, "ScriptContextTableMap"),
("RO_SPACE", 0x03349): (151, "FeedbackMetadataArrayMap"),
("RO_SPACE", 0x03399): (182, "ArrayListMap"),
("RO_SPACE", 0x033e9): (130, "BigIntMap"),
("RO_SPACE", 0x03439): (183, "ObjectBoilerplateDescriptionMap"),
("RO_SPACE", 0x03489): (137, "BytecodeArrayMap"),
("RO_SPACE", 0x034d9): (209, "CodeDataContainerMap"),
("RO_SPACE", 0x03529): (150, "FixedDoubleArrayMap"),
("RO_SPACE", 0x03579): (188, "GlobalDictionaryMap"),
("RO_SPACE", 0x035c9): (210, "ManyClosuresCellMap"),
("RO_SPACE", 0x03619): (182, "ModuleInfoMap"),
("RO_SPACE", 0x03669): (134, "MutableHeapNumberMap"),
("RO_SPACE", 0x036b9): (187, "NameDictionaryMap"),
("RO_SPACE", 0x03709): (210, "NoClosuresCellMap"),
("RO_SPACE", 0x03759): (189, "NumberDictionaryMap"),
("RO_SPACE", 0x037a9): (210, "OneClosureCellMap"),
("RO_SPACE", 0x037f9): (185, "OrderedHashMapMap"),
("RO_SPACE", 0x03849): (186, "OrderedHashSetMap"),
("RO_SPACE", 0x03899): (213, "PreParsedScopeDataMap"),
("RO_SPACE", 0x038e9): (214, "PropertyArrayMap"),
("RO_SPACE", 0x03939): (207, "SideEffectCallHandlerInfoMap"),
("RO_SPACE", 0x03989): (207, "SideEffectFreeCallHandlerInfoMap"),
("RO_SPACE", 0x039d9): (207, "NextCallSideEffectFreeCallHandlerInfoMap"),
("RO_SPACE", 0x03a29): (190, "SimpleNumberDictionaryMap"),
("RO_SPACE", 0x03a79): (182, "SloppyArgumentsElementsMap"),
("RO_SPACE", 0x03ac9): (217, "SmallOrderedHashMapMap"),
("RO_SPACE", 0x03b19): (218, "SmallOrderedHashSetMap"),
("RO_SPACE", 0x03b69): (191, "StringTableMap"),
("RO_SPACE", 0x03bb9): (220, "UncompiledDataWithoutPreParsedScopeMap"),
("RO_SPACE", 0x03c09): (221, "UncompiledDataWithPreParsedScopeMap"),
("RO_SPACE", 0x03c59): (204, "WeakFixedArrayMap"),
("RO_SPACE", 0x03ca9): (223, "WeakArrayListMap"),
("RO_SPACE", 0x03cf9): (192, "EphemeronHashTableMap"),
("RO_SPACE", 0x03d49): (106, "NativeSourceStringMap"),
("RO_SPACE", 0x03d99): (64, "StringMap"),
("RO_SPACE", 0x03de9): (73, "ConsOneByteStringMap"),
("RO_SPACE", 0x03e39): (65, "ConsStringMap"),
("RO_SPACE", 0x03e89): (77, "ThinOneByteStringMap"),
("RO_SPACE", 0x03ed9): (69, "ThinStringMap"),
("RO_SPACE", 0x03f29): (67, "SlicedStringMap"),
("RO_SPACE", 0x03f79): (75, "SlicedOneByteStringMap"),
("RO_SPACE", 0x03fc9): (66, "ExternalStringMap"),
("RO_SPACE", 0x04019): (82, "ExternalStringWithOneByteDataMap"),
("RO_SPACE", 0x04069): (74, "ExternalOneByteStringMap"),
("RO_SPACE", 0x040b9): (98, "ShortExternalStringMap"),
("RO_SPACE", 0x04109): (114, "ShortExternalStringWithOneByteDataMap"),
("RO_SPACE", 0x04159): (0, "InternalizedStringMap"),
("RO_SPACE", 0x041a9): (2, "ExternalInternalizedStringMap"),
("RO_SPACE", 0x041f9): (18, "ExternalInternalizedStringWithOneByteDataMap"),
("RO_SPACE", 0x04249): (10, "ExternalOneByteInternalizedStringMap"),
("RO_SPACE", 0x04299): (34, "ShortExternalInternalizedStringMap"),
("RO_SPACE", 0x042e9): (50, "ShortExternalInternalizedStringWithOneByteDataMap"),
("RO_SPACE", 0x04339): (42, "ShortExternalOneByteInternalizedStringMap"),
("RO_SPACE", 0x04389): (106, "ShortExternalOneByteStringMap"),
("RO_SPACE", 0x043d9): (140, "FixedUint8ArrayMap"),
("RO_SPACE", 0x04429): (139, "FixedInt8ArrayMap"),
("RO_SPACE", 0x04479): (142, "FixedUint16ArrayMap"),
("RO_SPACE", 0x044c9): (141, "FixedInt16ArrayMap"),
("RO_SPACE", 0x04519): (144, "FixedUint32ArrayMap"),
("RO_SPACE", 0x04569): (143, "FixedInt32ArrayMap"),
("RO_SPACE", 0x045b9): (145, "FixedFloat32ArrayMap"),
("RO_SPACE", 0x04609): (146, "FixedFloat64ArrayMap"),
("RO_SPACE", 0x04659): (147, "FixedUint8ClampedArrayMap"),
("RO_SPACE", 0x046a9): (149, "FixedBigUint64ArrayMap"),
("RO_SPACE", 0x046f9): (148, "FixedBigInt64ArrayMap"),
("RO_SPACE", 0x04749): (131, "SelfReferenceMarkerMap"),
("RO_SPACE", 0x047b1): (171, "Tuple2Map"),
("RO_SPACE", 0x04ae9): (161, "InterceptorInfoMap"),
("RO_SPACE", 0x028b9): (182, "FixedArrayMap"),
("RO_SPACE", 0x02909): (182, "FixedCOWArrayMap"),
("RO_SPACE", 0x02959): (184, "HashTableMap"),
("RO_SPACE", 0x029a9): (128, "SymbolMap"),
("RO_SPACE", 0x029f9): (72, "OneByteStringMap"),
("RO_SPACE", 0x02a49): (193, "ScopeInfoMap"),
("RO_SPACE", 0x02a99): (216, "SharedFunctionInfoMap"),
("RO_SPACE", 0x02ae9): (133, "CodeMap"),
("RO_SPACE", 0x02b39): (199, "FunctionContextMap"),
("RO_SPACE", 0x02b89): (208, "CellMap"),
("RO_SPACE", 0x02bd9): (222, "WeakCellMap"),
("RO_SPACE", 0x02c29): (215, "GlobalPropertyCellMap"),
("RO_SPACE", 0x02c79): (135, "ForeignMap"),
("RO_SPACE", 0x02cc9): (206, "TransitionArrayMap"),
("RO_SPACE", 0x02d19): (211, "FeedbackVectorMap"),
("RO_SPACE", 0x02db9): (131, "ArgumentsMarkerMap"),
("RO_SPACE", 0x02e61): (131, "ExceptionMap"),
("RO_SPACE", 0x02f09): (131, "TerminationExceptionMap"),
("RO_SPACE", 0x02fb9): (131, "OptimizedOutMap"),
("RO_SPACE", 0x03061): (131, "StaleRegisterMap"),
("RO_SPACE", 0x030d9): (201, "NativeContextMap"),
("RO_SPACE", 0x03129): (200, "ModuleContextMap"),
("RO_SPACE", 0x03179): (198, "EvalContextMap"),
("RO_SPACE", 0x031c9): (202, "ScriptContextMap"),
("RO_SPACE", 0x03219): (195, "BlockContextMap"),
("RO_SPACE", 0x03269): (196, "CatchContextMap"),
("RO_SPACE", 0x032b9): (203, "WithContextMap"),
("RO_SPACE", 0x03309): (197, "DebugEvaluateContextMap"),
("RO_SPACE", 0x03359): (194, "ScriptContextTableMap"),
("RO_SPACE", 0x033a9): (151, "FeedbackMetadataArrayMap"),
("RO_SPACE", 0x033f9): (182, "ArrayListMap"),
("RO_SPACE", 0x03449): (130, "BigIntMap"),
("RO_SPACE", 0x03499): (183, "ObjectBoilerplateDescriptionMap"),
("RO_SPACE", 0x034e9): (137, "BytecodeArrayMap"),
("RO_SPACE", 0x03539): (209, "CodeDataContainerMap"),
("RO_SPACE", 0x03589): (150, "FixedDoubleArrayMap"),
("RO_SPACE", 0x035d9): (188, "GlobalDictionaryMap"),
("RO_SPACE", 0x03629): (210, "ManyClosuresCellMap"),
("RO_SPACE", 0x03679): (182, "ModuleInfoMap"),
("RO_SPACE", 0x036c9): (134, "MutableHeapNumberMap"),
("RO_SPACE", 0x03719): (187, "NameDictionaryMap"),
("RO_SPACE", 0x03769): (210, "NoClosuresCellMap"),
("RO_SPACE", 0x037b9): (189, "NumberDictionaryMap"),
("RO_SPACE", 0x03809): (210, "OneClosureCellMap"),
("RO_SPACE", 0x03859): (185, "OrderedHashMapMap"),
("RO_SPACE", 0x038a9): (186, "OrderedHashSetMap"),
("RO_SPACE", 0x038f9): (213, "PreParsedScopeDataMap"),
("RO_SPACE", 0x03949): (214, "PropertyArrayMap"),
("RO_SPACE", 0x03999): (207, "SideEffectCallHandlerInfoMap"),
("RO_SPACE", 0x039e9): (207, "SideEffectFreeCallHandlerInfoMap"),
("RO_SPACE", 0x03a39): (207, "NextCallSideEffectFreeCallHandlerInfoMap"),
("RO_SPACE", 0x03a89): (190, "SimpleNumberDictionaryMap"),
("RO_SPACE", 0x03ad9): (182, "SloppyArgumentsElementsMap"),
("RO_SPACE", 0x03b29): (217, "SmallOrderedHashMapMap"),
("RO_SPACE", 0x03b79): (218, "SmallOrderedHashSetMap"),
("RO_SPACE", 0x03bc9): (191, "StringTableMap"),
("RO_SPACE", 0x03c19): (220, "UncompiledDataWithoutPreParsedScopeMap"),
("RO_SPACE", 0x03c69): (221, "UncompiledDataWithPreParsedScopeMap"),
("RO_SPACE", 0x03cb9): (223, "WeakArrayListMap"),
("RO_SPACE", 0x03d09): (192, "EphemeronHashTableMap"),
("RO_SPACE", 0x03d59): (106, "NativeSourceStringMap"),
("RO_SPACE", 0x03da9): (64, "StringMap"),
("RO_SPACE", 0x03df9): (73, "ConsOneByteStringMap"),
("RO_SPACE", 0x03e49): (65, "ConsStringMap"),
("RO_SPACE", 0x03e99): (77, "ThinOneByteStringMap"),
("RO_SPACE", 0x03ee9): (69, "ThinStringMap"),
("RO_SPACE", 0x03f39): (67, "SlicedStringMap"),
("RO_SPACE", 0x03f89): (75, "SlicedOneByteStringMap"),
("RO_SPACE", 0x03fd9): (66, "ExternalStringMap"),
("RO_SPACE", 0x04029): (82, "ExternalStringWithOneByteDataMap"),
("RO_SPACE", 0x04079): (74, "ExternalOneByteStringMap"),
("RO_SPACE", 0x040c9): (98, "ShortExternalStringMap"),
("RO_SPACE", 0x04119): (114, "ShortExternalStringWithOneByteDataMap"),
("RO_SPACE", 0x04169): (0, "InternalizedStringMap"),
("RO_SPACE", 0x041b9): (2, "ExternalInternalizedStringMap"),
("RO_SPACE", 0x04209): (18, "ExternalInternalizedStringWithOneByteDataMap"),
("RO_SPACE", 0x04259): (10, "ExternalOneByteInternalizedStringMap"),
("RO_SPACE", 0x042a9): (34, "ShortExternalInternalizedStringMap"),
("RO_SPACE", 0x042f9): (50, "ShortExternalInternalizedStringWithOneByteDataMap"),
("RO_SPACE", 0x04349): (42, "ShortExternalOneByteInternalizedStringMap"),
("RO_SPACE", 0x04399): (106, "ShortExternalOneByteStringMap"),
("RO_SPACE", 0x043e9): (140, "FixedUint8ArrayMap"),
("RO_SPACE", 0x04439): (139, "FixedInt8ArrayMap"),
("RO_SPACE", 0x04489): (142, "FixedUint16ArrayMap"),
("RO_SPACE", 0x044d9): (141, "FixedInt16ArrayMap"),
("RO_SPACE", 0x04529): (144, "FixedUint32ArrayMap"),
("RO_SPACE", 0x04579): (143, "FixedInt32ArrayMap"),
("RO_SPACE", 0x045c9): (145, "FixedFloat32ArrayMap"),
("RO_SPACE", 0x04619): (146, "FixedFloat64ArrayMap"),
("RO_SPACE", 0x04669): (147, "FixedUint8ClampedArrayMap"),
("RO_SPACE", 0x046b9): (149, "FixedBigUint64ArrayMap"),
("RO_SPACE", 0x04709): (148, "FixedBigInt64ArrayMap"),
("RO_SPACE", 0x04759): (131, "SelfReferenceMarkerMap"),
("RO_SPACE", 0x047c1): (171, "Tuple2Map"),
("RO_SPACE", 0x04af9): (161, "InterceptorInfoMap"),
("RO_SPACE", 0x04bf1): (169, "ScriptMap"),
("RO_SPACE", 0x09ae1): (154, "AccessorInfoMap"),
("RO_SPACE", 0x09b31): (153, "AccessCheckInfoMap"),
@ -320,7 +320,6 @@ KNOWN_MAPS = {
KNOWN_OBJECTS = {
("RO_SPACE", 0x022a1): "NullValue",
("RO_SPACE", 0x02321): "EmptyDescriptorArray",
("RO_SPACE", 0x02391): "EmptyFixedArray",
("RO_SPACE", 0x02491): "UninitializedValue",
("RO_SPACE", 0x025b1): "UndefinedValue",
("RO_SPACE", 0x02631): "NanValue",
@ -329,28 +328,29 @@ KNOWN_OBJECTS = {
("RO_SPACE", 0x02741): "TrueValue",
("RO_SPACE", 0x02801): "FalseValue",
("RO_SPACE", 0x02851): "empty_string",
("RO_SPACE", 0x02d19): "EmptyScopeInfo",
("RO_SPACE", 0x02d29): "ArgumentsMarker",
("RO_SPACE", 0x02dd1): "Exception",
("RO_SPACE", 0x02e79): "TerminationException",
("RO_SPACE", 0x02f29): "OptimizedOut",
("RO_SPACE", 0x02fd1): "StaleRegister",
("RO_SPACE", 0x04811): "EmptyByteArray",
("RO_SPACE", 0x04839): "EmptyFixedUint8Array",
("RO_SPACE", 0x04859): "EmptyFixedInt8Array",
("RO_SPACE", 0x04879): "EmptyFixedUint16Array",
("RO_SPACE", 0x04899): "EmptyFixedInt16Array",
("RO_SPACE", 0x048b9): "EmptyFixedUint32Array",
("RO_SPACE", 0x048d9): "EmptyFixedInt32Array",
("RO_SPACE", 0x048f9): "EmptyFixedFloat32Array",
("RO_SPACE", 0x04919): "EmptyFixedFloat64Array",
("RO_SPACE", 0x04939): "EmptyFixedUint8ClampedArray",
("RO_SPACE", 0x04999): "EmptySloppyArgumentsElements",
("RO_SPACE", 0x049b9): "EmptySlowElementDictionary",
("RO_SPACE", 0x04a01): "EmptyOrderedHashMap",
("RO_SPACE", 0x04a29): "EmptyOrderedHashSet",
("RO_SPACE", 0x04a61): "EmptyPropertyCell",
("RO_SPACE", 0x04a89): "EmptyWeakCell",
("RO_SPACE", 0x02d69): "EmptyScopeInfo",
("RO_SPACE", 0x02d79): "EmptyFixedArray",
("RO_SPACE", 0x02d89): "ArgumentsMarker",
("RO_SPACE", 0x02e31): "Exception",
("RO_SPACE", 0x02ed9): "TerminationException",
("RO_SPACE", 0x02f89): "OptimizedOut",
("RO_SPACE", 0x03031): "StaleRegister",
("RO_SPACE", 0x04821): "EmptyByteArray",
("RO_SPACE", 0x04849): "EmptyFixedUint8Array",
("RO_SPACE", 0x04869): "EmptyFixedInt8Array",
("RO_SPACE", 0x04889): "EmptyFixedUint16Array",
("RO_SPACE", 0x048a9): "EmptyFixedInt16Array",
("RO_SPACE", 0x048c9): "EmptyFixedUint32Array",
("RO_SPACE", 0x048e9): "EmptyFixedInt32Array",
("RO_SPACE", 0x04909): "EmptyFixedFloat32Array",
("RO_SPACE", 0x04929): "EmptyFixedFloat64Array",
("RO_SPACE", 0x04949): "EmptyFixedUint8ClampedArray",
("RO_SPACE", 0x049a9): "EmptySloppyArgumentsElements",
("RO_SPACE", 0x049c9): "EmptySlowElementDictionary",
("RO_SPACE", 0x04a11): "EmptyOrderedHashMap",
("RO_SPACE", 0x04a39): "EmptyOrderedHashSet",
("RO_SPACE", 0x04a71): "EmptyPropertyCell",
("RO_SPACE", 0x04a99): "EmptyWeakCell",
("RO_SPACE", 0x04b61): "InfinityValue",
("RO_SPACE", 0x04b71): "MinusZeroValue",
("RO_SPACE", 0x04b81): "MinusInfinityValue",