Chromium Code Reviews| Index: src/objects-debug.cc |
| diff --git a/src/objects-debug.cc b/src/objects-debug.cc |
| index e465cb1db40d5a536f4d371851aa2aba7215bc48..092f15389f1b27910bbdd4f1ad2d66392f7d5fe4 100644 |
| --- a/src/objects-debug.cc |
| +++ b/src/objects-debug.cc |
| @@ -263,6 +263,7 @@ void JSObject::JSObjectVerify() { |
| if (descriptors->GetDetails(i).type() == FIELD) { |
| Representation r = descriptors->GetDetails(i).representation(); |
| FieldIndex index = FieldIndex::ForDescriptor(map(), i); |
| + if (map()->IsUnboxedDoubleField(index)) continue; |
|
Toon Verwaest
2014/07/29 15:02:08
Assert that r.IsDouble()
Igor Sheludko
2014/10/30 14:23:43
Done.
|
| Object* value = RawFastPropertyAt(index); |
| if (r.IsDouble()) ASSERT(value->IsMutableHeapNumber()); |
| if (value->IsUninitialized()) continue; |
| @@ -304,6 +305,8 @@ void Map::MapVerify() { |
| SLOW_ASSERT(transitions()->IsSortedNoDuplicates()); |
| SLOW_ASSERT(transitions()->IsConsistentWithBackPointers(this)); |
| } |
| + ASSERT(!FLAG_unbox_double_fields || |
|
Toon Verwaest
2014/07/29 15:02:08
SLOW_ASSERT?
Igor Sheludko
2014/10/30 14:23:43
Done.
|
| + layout_descriptor()->IsConsistentWithMap(this)); |
| } |
| @@ -313,8 +316,7 @@ void Map::SharedMapVerify() { |
| CHECK(instance_descriptors()->IsEmpty()); |
| CHECK_EQ(0, pre_allocated_property_fields()); |
| CHECK_EQ(0, unused_property_fields()); |
| - CHECK_EQ(StaticVisitorBase::GetVisitorId(instance_type(), instance_size()), |
| - visitor_id()); |
| + CHECK_EQ(StaticVisitorBase::GetVisitorId(this), visitor_id()); |
| } |
| @@ -1157,6 +1159,27 @@ bool DescriptorArray::IsSortedNoDuplicates(int valid_entries) { |
| } |
| +bool LayoutDescriptor::IsConsistentWithMap(Map* map) { |
| + DescriptorArray* descriptors = map->instance_descriptors(); |
| + int nof_descriptors = map->NumberOfOwnDescriptors(); |
| + for (int i = 0; i < nof_descriptors; i++) { |
| + PropertyDetails details = descriptors->GetDetails(i); |
| + if (details.type() == FIELD) { |
| + FieldIndex field_index = FieldIndex::ForDescriptor(map, i); |
| + if (!field_index.is_inobject()) continue; |
| + bool tagged_expected = |
| + !FLAG_unbox_double_fields || !details.representation().IsDouble(); |
| + for (int bit = 0; bit < details.field_width_in_words(); bit++) { |
| + bool tagged_actual = IsTagged(details.field_index() + bit); |
| + ASSERT_EQ(tagged_expected, tagged_actual); |
| + if (tagged_actual != tagged_expected) return false; |
| + } |
| + } |
| + } |
| + return true; |
| +} |
| + |
| + |
| bool TransitionArray::IsSortedNoDuplicates(int valid_entries) { |
| ASSERT(valid_entries == -1); |
| Name* current_key = NULL; |