diff options
Diffstat (limited to 'deps/v8/src/objects-debug.cc')
-rw-r--r-- | deps/v8/src/objects-debug.cc | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/deps/v8/src/objects-debug.cc b/deps/v8/src/objects-debug.cc index 78a07c737e..f06e7b624c 100644 --- a/deps/v8/src/objects-debug.cc +++ b/deps/v8/src/objects-debug.cc @@ -289,9 +289,11 @@ void JSObject::JSObjectVerify() { if (r.IsSmi()) DCHECK(value->IsSmi()); if (r.IsHeapObject()) DCHECK(value->IsHeapObject()); HeapType* field_type = descriptors->GetFieldType(i); + bool type_is_none = field_type->Is(HeapType::None()); + bool type_is_any = HeapType::Any()->Is(field_type); if (r.IsNone()) { - CHECK(field_type->Is(HeapType::None())); - } else if (!HeapType::Any()->Is(field_type)) { + CHECK(type_is_none); + } else if (!type_is_any && !(type_is_none && r.IsHeapObject())) { CHECK(!field_type->NowStable() || field_type->NowContains(value)); } } @@ -320,10 +322,8 @@ void Map::MapVerify() { VerifyHeapPointer(prototype()); VerifyHeapPointer(instance_descriptors()); SLOW_DCHECK(instance_descriptors()->IsSortedNoDuplicates()); - if (HasTransitionArray()) { - SLOW_DCHECK(transitions()->IsSortedNoDuplicates()); - SLOW_DCHECK(transitions()->IsConsistentWithBackPointers(this)); - } + SLOW_DCHECK(TransitionArray::IsSortedNoDuplicates(this)); + SLOW_DCHECK(TransitionArray::IsConsistentWithBackPointers(this)); // TODO(ishell): turn it back to SLOW_DCHECK. CHECK(!FLAG_unbox_double_fields || layout_descriptor()->IsConsistentWithMap(this)); @@ -344,7 +344,6 @@ void Map::VerifyOmittedMapChecks() { if (!FLAG_omit_map_checks_for_leaf_maps) return; if (!is_stable() || is_deprecated() || - HasTransitionArray() || is_dictionary_map()) { CHECK_EQ(0, dependent_code()->number_of_entries( DependentCode::kPrototypeCheckGroup)); @@ -426,7 +425,6 @@ void JSGeneratorObject::JSGeneratorObjectVerify() { VerifyObjectField(kReceiverOffset); VerifyObjectField(kOperandStackOffset); VerifyObjectField(kContinuationOffset); - VerifyObjectField(kStackHandlerIndexOffset); } @@ -646,7 +644,6 @@ void Cell::CellVerify() { void PropertyCell::PropertyCellVerify() { CHECK(IsPropertyCell()); VerifyObjectField(kValueOffset); - VerifyObjectField(kTypeOffset); } @@ -1208,14 +1205,28 @@ bool TransitionArray::IsSortedNoDuplicates(int valid_entries) { } +// static +bool TransitionArray::IsSortedNoDuplicates(Map* map) { + Object* raw_transitions = map->raw_transitions(); + if (IsFullTransitionArray(raw_transitions)) { + return TransitionArray::cast(raw_transitions)->IsSortedNoDuplicates(); + } + // Simple and non-existent transitions are always sorted. + return true; +} + + static bool CheckOneBackPointer(Map* current_map, Object* target) { return !target->IsMap() || Map::cast(target)->GetBackPointer() == current_map; } -bool TransitionArray::IsConsistentWithBackPointers(Map* current_map) { - for (int i = 0; i < number_of_transitions(); ++i) { - if (!CheckOneBackPointer(current_map, GetTarget(i))) return false; +// static +bool TransitionArray::IsConsistentWithBackPointers(Map* map) { + Object* transitions = map->raw_transitions(); + for (int i = 0; i < TransitionArray::NumberOfTransitions(transitions); ++i) { + Map* target = TransitionArray::GetTarget(transitions, i); + if (!CheckOneBackPointer(map, target)) return false; } return true; } |