| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 | 223 |
| 224 default: | 224 default: |
| 225 UNREACHABLE(); | 225 UNREACHABLE(); |
| 226 break; | 226 break; |
| 227 } | 227 } |
| 228 } | 228 } |
| 229 | 229 |
| 230 | 230 |
| 231 void HeapObject::VerifyHeapPointer(Object* p) { | 231 void HeapObject::VerifyHeapPointer(Object* p) { |
| 232 CHECK(p->IsHeapObject()); | 232 CHECK(p->IsHeapObject()); |
| 233 CHECK(HEAP->Contains(HeapObject::cast(p))); | 233 HeapObject* ho = HeapObject::cast(p); |
| 234 CHECK(ho->GetHeap()->Contains(ho)); |
| 234 } | 235 } |
| 235 | 236 |
| 236 | 237 |
| 237 void Symbol::SymbolVerify() { | 238 void Symbol::SymbolVerify() { |
| 238 CHECK(IsSymbol()); | 239 CHECK(IsSymbol()); |
| 239 CHECK(HasHashCode()); | 240 CHECK(HasHashCode()); |
| 240 CHECK_GT(Hash(), 0); | 241 CHECK_GT(Hash(), 0); |
| 241 CHECK(name()->IsUndefined() || name()->IsString()); | 242 CHECK(name()->IsUndefined() || name()->IsString()); |
| 242 } | 243 } |
| 243 | 244 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 } | 331 } |
| 331 CHECK_EQ((map()->has_fast_smi_or_object_elements() || | 332 CHECK_EQ((map()->has_fast_smi_or_object_elements() || |
| 332 (elements() == GetHeap()->empty_fixed_array())), | 333 (elements() == GetHeap()->empty_fixed_array())), |
| 333 (elements()->map() == GetHeap()->fixed_array_map() || | 334 (elements()->map() == GetHeap()->fixed_array_map() || |
| 334 elements()->map() == GetHeap()->fixed_cow_array_map())); | 335 elements()->map() == GetHeap()->fixed_cow_array_map())); |
| 335 CHECK(map()->has_fast_object_elements() == HasFastObjectElements()); | 336 CHECK(map()->has_fast_object_elements() == HasFastObjectElements()); |
| 336 } | 337 } |
| 337 | 338 |
| 338 | 339 |
| 339 void Map::MapVerify() { | 340 void Map::MapVerify() { |
| 340 CHECK(!HEAP->InNewSpace(this)); | 341 Heap* heap = GetHeap(); |
| 342 CHECK(!heap->InNewSpace(this)); |
| 341 CHECK(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE); | 343 CHECK(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE); |
| 342 CHECK(instance_size() == kVariableSizeSentinel || | 344 CHECK(instance_size() == kVariableSizeSentinel || |
| 343 (kPointerSize <= instance_size() && | 345 (kPointerSize <= instance_size() && |
| 344 instance_size() < HEAP->Capacity())); | 346 instance_size() < heap->Capacity())); |
| 345 VerifyHeapPointer(prototype()); | 347 VerifyHeapPointer(prototype()); |
| 346 VerifyHeapPointer(instance_descriptors()); | 348 VerifyHeapPointer(instance_descriptors()); |
| 347 SLOW_ASSERT(instance_descriptors()->IsSortedNoDuplicates()); | 349 SLOW_ASSERT(instance_descriptors()->IsSortedNoDuplicates()); |
| 348 if (HasTransitionArray()) { | 350 if (HasTransitionArray()) { |
| 349 SLOW_ASSERT(transitions()->IsSortedNoDuplicates()); | 351 SLOW_ASSERT(transitions()->IsSortedNoDuplicates()); |
| 350 SLOW_ASSERT(transitions()->IsConsistentWithBackPointers(this)); | 352 SLOW_ASSERT(transitions()->IsConsistentWithBackPointers(this)); |
| 351 } | 353 } |
| 352 ASSERT(!is_observed() || instance_type() < FIRST_JS_OBJECT_TYPE || | 354 ASSERT(!is_observed() || instance_type() < FIRST_JS_OBJECT_TYPE || |
| 353 instance_type() > LAST_JS_OBJECT_TYPE || | 355 instance_type() > LAST_JS_OBJECT_TYPE || |
| 354 has_slow_elements_kind() || has_external_array_elements()); | 356 has_slow_elements_kind() || has_external_array_elements()); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 VerifyObjectField(kScriptOffset); | 518 VerifyObjectField(kScriptOffset); |
| 517 VerifyObjectField(kStackTraceOffset); | 519 VerifyObjectField(kStackTraceOffset); |
| 518 VerifyObjectField(kStackFramesOffset); | 520 VerifyObjectField(kStackFramesOffset); |
| 519 } | 521 } |
| 520 | 522 |
| 521 | 523 |
| 522 void String::StringVerify() { | 524 void String::StringVerify() { |
| 523 CHECK(IsString()); | 525 CHECK(IsString()); |
| 524 CHECK(length() >= 0 && length() <= Smi::kMaxValue); | 526 CHECK(length() >= 0 && length() <= Smi::kMaxValue); |
| 525 if (IsInternalizedString()) { | 527 if (IsInternalizedString()) { |
| 526 CHECK(!HEAP->InNewSpace(this)); | 528 CHECK(!GetHeap()->InNewSpace(this)); |
| 527 } | 529 } |
| 528 if (IsConsString()) { | 530 if (IsConsString()) { |
| 529 ConsString::cast(this)->ConsStringVerify(); | 531 ConsString::cast(this)->ConsStringVerify(); |
| 530 } else if (IsSlicedString()) { | 532 } else if (IsSlicedString()) { |
| 531 SlicedString::cast(this)->SlicedStringVerify(); | 533 SlicedString::cast(this)->SlicedStringVerify(); |
| 532 } | 534 } |
| 533 } | 535 } |
| 534 | 536 |
| 535 | 537 |
| 536 void ConsString::ConsStringVerify() { | 538 void ConsString::ConsStringVerify() { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 VerifyObjectField(i); | 610 VerifyObjectField(i); |
| 609 } | 611 } |
| 610 } | 612 } |
| 611 | 613 |
| 612 | 614 |
| 613 void Oddball::OddballVerify() { | 615 void Oddball::OddballVerify() { |
| 614 CHECK(IsOddball()); | 616 CHECK(IsOddball()); |
| 615 VerifyHeapPointer(to_string()); | 617 VerifyHeapPointer(to_string()); |
| 616 Object* number = to_number(); | 618 Object* number = to_number(); |
| 617 if (number->IsHeapObject()) { | 619 if (number->IsHeapObject()) { |
| 618 CHECK(number == HEAP->nan_value()); | 620 CHECK(number == HeapObject::cast(number)->GetHeap()->nan_value()); |
| 619 } else { | 621 } else { |
| 620 CHECK(number->IsSmi()); | 622 CHECK(number->IsSmi()); |
| 621 int value = Smi::cast(number)->value(); | 623 int value = Smi::cast(number)->value(); |
| 622 // Hidden oddballs have negative smis. | 624 // Hidden oddballs have negative smis. |
| 623 const int kLeastHiddenOddballNumber = -4; | 625 const int kLeastHiddenOddballNumber = -4; |
| 624 CHECK_LE(value, 1); | 626 CHECK_LE(value, 1); |
| 625 CHECK(value >= kLeastHiddenOddballNumber); | 627 CHECK(value >= kLeastHiddenOddballNumber); |
| 626 } | 628 } |
| 627 } | 629 } |
| 628 | 630 |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 case FAST_HOLEY_SMI_ELEMENTS: | 1038 case FAST_HOLEY_SMI_ELEMENTS: |
| 1037 case FAST_SMI_ELEMENTS: | 1039 case FAST_SMI_ELEMENTS: |
| 1038 case FAST_HOLEY_DOUBLE_ELEMENTS: | 1040 case FAST_HOLEY_DOUBLE_ELEMENTS: |
| 1039 case FAST_DOUBLE_ELEMENTS: | 1041 case FAST_DOUBLE_ELEMENTS: |
| 1040 case FAST_HOLEY_ELEMENTS: | 1042 case FAST_HOLEY_ELEMENTS: |
| 1041 case FAST_ELEMENTS: { | 1043 case FAST_ELEMENTS: { |
| 1042 info->number_of_objects_with_fast_elements_++; | 1044 info->number_of_objects_with_fast_elements_++; |
| 1043 int holes = 0; | 1045 int holes = 0; |
| 1044 FixedArray* e = FixedArray::cast(elements()); | 1046 FixedArray* e = FixedArray::cast(elements()); |
| 1045 int len = e->length(); | 1047 int len = e->length(); |
| 1046 Heap* heap = HEAP; | 1048 Heap* heap = GetHeap(); |
| 1047 for (int i = 0; i < len; i++) { | 1049 for (int i = 0; i < len; i++) { |
| 1048 if (e->get(i) == heap->the_hole_value()) holes++; | 1050 if (e->get(i) == heap->the_hole_value()) holes++; |
| 1049 } | 1051 } |
| 1050 info->number_of_fast_used_elements_ += len - holes; | 1052 info->number_of_fast_used_elements_ += len - holes; |
| 1051 info->number_of_fast_unused_elements_ += holes; | 1053 info->number_of_fast_unused_elements_ += holes; |
| 1052 break; | 1054 break; |
| 1053 } | 1055 } |
| 1054 case EXTERNAL_BYTE_ELEMENTS: | 1056 case EXTERNAL_BYTE_ELEMENTS: |
| 1055 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: | 1057 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
| 1056 case EXTERNAL_SHORT_ELEMENTS: | 1058 case EXTERNAL_SHORT_ELEMENTS: |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1169 for (int i = 0; i < number_of_transitions(); ++i) { | 1171 for (int i = 0; i < number_of_transitions(); ++i) { |
| 1170 if (!CheckOneBackPointer(current_map, GetTarget(i))) return false; | 1172 if (!CheckOneBackPointer(current_map, GetTarget(i))) return false; |
| 1171 } | 1173 } |
| 1172 return true; | 1174 return true; |
| 1173 } | 1175 } |
| 1174 | 1176 |
| 1175 | 1177 |
| 1176 #endif // DEBUG | 1178 #endif // DEBUG |
| 1177 | 1179 |
| 1178 } } // namespace v8::internal | 1180 } } // namespace v8::internal |
| OLD | NEW |