| Index: src/objects-debug.cc
|
| diff --git a/src/objects-debug.cc b/src/objects-debug.cc
|
| index 6195bf58cd6c154c54efa8f1ebca52e24819e33f..be96592962458f5125f88d674ae42f57745969a2 100644
|
| --- a/src/objects-debug.cc
|
| +++ b/src/objects-debug.cc
|
| @@ -35,7 +35,7 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -#ifdef DEBUG
|
| +#ifdef VERIFY_HEAP
|
|
|
| void MaybeObject::Verify() {
|
| Object* this_as_object;
|
| @@ -55,18 +55,18 @@ void Object::VerifyPointer(Object* p) {
|
| if (p->IsHeapObject()) {
|
| HeapObject::VerifyHeapPointer(p);
|
| } else {
|
| - ASSERT(p->IsSmi());
|
| + CHECK(p->IsSmi());
|
| }
|
| }
|
|
|
|
|
| void Smi::SmiVerify() {
|
| - ASSERT(IsSmi());
|
| + CHECK(IsSmi());
|
| }
|
|
|
|
|
| void Failure::FailureVerify() {
|
| - ASSERT(IsFailure());
|
| + CHECK(IsFailure());
|
| }
|
|
|
|
|
| @@ -207,68 +207,68 @@ void HeapObject::HeapObjectVerify() {
|
|
|
|
|
| void HeapObject::VerifyHeapPointer(Object* p) {
|
| - ASSERT(p->IsHeapObject());
|
| - ASSERT(HEAP->Contains(HeapObject::cast(p)));
|
| + CHECK(p->IsHeapObject());
|
| + CHECK(HEAP->Contains(HeapObject::cast(p)));
|
| }
|
|
|
|
|
| void HeapNumber::HeapNumberVerify() {
|
| - ASSERT(IsHeapNumber());
|
| + CHECK(IsHeapNumber());
|
| }
|
|
|
|
|
| void ByteArray::ByteArrayVerify() {
|
| - ASSERT(IsByteArray());
|
| + CHECK(IsByteArray());
|
| }
|
|
|
|
|
| void FreeSpace::FreeSpaceVerify() {
|
| - ASSERT(IsFreeSpace());
|
| + CHECK(IsFreeSpace());
|
| }
|
|
|
|
|
| void ExternalPixelArray::ExternalPixelArrayVerify() {
|
| - ASSERT(IsExternalPixelArray());
|
| + CHECK(IsExternalPixelArray());
|
| }
|
|
|
|
|
| void ExternalByteArray::ExternalByteArrayVerify() {
|
| - ASSERT(IsExternalByteArray());
|
| + CHECK(IsExternalByteArray());
|
| }
|
|
|
|
|
| void ExternalUnsignedByteArray::ExternalUnsignedByteArrayVerify() {
|
| - ASSERT(IsExternalUnsignedByteArray());
|
| + CHECK(IsExternalUnsignedByteArray());
|
| }
|
|
|
|
|
| void ExternalShortArray::ExternalShortArrayVerify() {
|
| - ASSERT(IsExternalShortArray());
|
| + CHECK(IsExternalShortArray());
|
| }
|
|
|
|
|
| void ExternalUnsignedShortArray::ExternalUnsignedShortArrayVerify() {
|
| - ASSERT(IsExternalUnsignedShortArray());
|
| + CHECK(IsExternalUnsignedShortArray());
|
| }
|
|
|
|
|
| void ExternalIntArray::ExternalIntArrayVerify() {
|
| - ASSERT(IsExternalIntArray());
|
| + CHECK(IsExternalIntArray());
|
| }
|
|
|
|
|
| void ExternalUnsignedIntArray::ExternalUnsignedIntArrayVerify() {
|
| - ASSERT(IsExternalUnsignedIntArray());
|
| + CHECK(IsExternalUnsignedIntArray());
|
| }
|
|
|
|
|
| void ExternalFloatArray::ExternalFloatArrayVerify() {
|
| - ASSERT(IsExternalFloatArray());
|
| + CHECK(IsExternalFloatArray());
|
| }
|
|
|
|
|
| void ExternalDoubleArray::ExternalDoubleArrayVerify() {
|
| - ASSERT(IsExternalDoubleArray());
|
| + CHECK(IsExternalDoubleArray());
|
| }
|
|
|
|
|
| @@ -277,8 +277,8 @@ void JSObject::JSObjectVerify() {
|
| VerifyHeapPointer(elements());
|
|
|
| if (GetElementsKind() == NON_STRICT_ARGUMENTS_ELEMENTS) {
|
| - ASSERT(this->elements()->IsFixedArray());
|
| - ASSERT(this->elements()->length() >= 2);
|
| + CHECK(this->elements()->IsFixedArray());
|
| + CHECK_GE(this->elements()->length(), 2);
|
| }
|
|
|
| if (HasFastProperties()) {
|
| @@ -286,25 +286,25 @@ void JSObject::JSObjectVerify() {
|
| (map()->inobject_properties() + properties()->length() -
|
| map()->NextFreePropertyIndex()));
|
| }
|
| - ASSERT_EQ((map()->has_fast_smi_or_object_elements() ||
|
| + CHECK_EQ((map()->has_fast_smi_or_object_elements() ||
|
| (elements() == GetHeap()->empty_fixed_array())),
|
| (elements()->map() == GetHeap()->fixed_array_map() ||
|
| elements()->map() == GetHeap()->fixed_cow_array_map()));
|
| - ASSERT(map()->has_fast_object_elements() == HasFastObjectElements());
|
| + CHECK(map()->has_fast_object_elements() == HasFastObjectElements());
|
| }
|
|
|
|
|
| void Map::MapVerify() {
|
| - ASSERT(!HEAP->InNewSpace(this));
|
| - ASSERT(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE);
|
| - ASSERT(instance_size() == kVariableSizeSentinel ||
|
| + CHECK(!HEAP->InNewSpace(this));
|
| + CHECK(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE);
|
| + CHECK(instance_size() == kVariableSizeSentinel ||
|
| (kPointerSize <= instance_size() &&
|
| instance_size() < HEAP->Capacity()));
|
| VerifyHeapPointer(prototype());
|
| VerifyHeapPointer(instance_descriptors());
|
| DescriptorArray* descriptors = instance_descriptors();
|
| for (int i = 0; i < NumberOfOwnDescriptors(); ++i) {
|
| - ASSERT_EQ(i, descriptors->GetDetails(i).descriptor_index() - 1);
|
| + CHECK_EQ(i, descriptors->GetDetails(i).descriptor_index() - 1);
|
| }
|
| SLOW_ASSERT(instance_descriptors()->IsSortedNoDuplicates());
|
| if (HasTransitionArray()) {
|
| @@ -316,11 +316,11 @@ void Map::MapVerify() {
|
|
|
| void Map::SharedMapVerify() {
|
| MapVerify();
|
| - ASSERT(is_shared());
|
| - ASSERT(instance_descriptors()->IsEmpty());
|
| - ASSERT_EQ(0, pre_allocated_property_fields());
|
| - ASSERT_EQ(0, unused_property_fields());
|
| - ASSERT_EQ(StaticVisitorBase::GetVisitorId(instance_type(), instance_size()),
|
| + CHECK(is_shared());
|
| + 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());
|
| }
|
|
|
| @@ -328,15 +328,15 @@ void Map::SharedMapVerify() {
|
| void CodeCache::CodeCacheVerify() {
|
| VerifyHeapPointer(default_cache());
|
| VerifyHeapPointer(normal_type_cache());
|
| - ASSERT(default_cache()->IsFixedArray());
|
| - ASSERT(normal_type_cache()->IsUndefined()
|
| + CHECK(default_cache()->IsFixedArray());
|
| + CHECK(normal_type_cache()->IsUndefined()
|
| || normal_type_cache()->IsCodeCacheHashTable());
|
| }
|
|
|
|
|
| void PolymorphicCodeCache::PolymorphicCodeCacheVerify() {
|
| VerifyHeapPointer(cache());
|
| - ASSERT(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable());
|
| + CHECK(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable());
|
| }
|
|
|
|
|
| @@ -368,7 +368,7 @@ void FixedDoubleArray::FixedDoubleArrayVerify() {
|
| for (int i = 0; i < length(); i++) {
|
| if (!is_the_hole(i)) {
|
| double value = get_scalar(i);
|
| - ASSERT(!isnan(value) ||
|
| + CHECK(!isnan(value) ||
|
| (BitCast<uint64_t>(value) ==
|
| BitCast<uint64_t>(canonical_not_the_hole_nan_as_double())) ||
|
| ((BitCast<uint64_t>(value) & Double::kSignMask) != 0));
|
| @@ -555,14 +555,14 @@ void Oddball::OddballVerify() {
|
| VerifyHeapPointer(to_string());
|
| Object* number = to_number();
|
| if (number->IsHeapObject()) {
|
| - ASSERT(number == HEAP->nan_value());
|
| + CHECK(number == HEAP->nan_value());
|
| } else {
|
| - ASSERT(number->IsSmi());
|
| + CHECK(number->IsSmi());
|
| int value = Smi::cast(number)->value();
|
| // Hidden oddballs have negative smis.
|
| const int kLeastHiddenOddballNumber = -4;
|
| - ASSERT(value <= 1);
|
| - ASSERT(value >= kLeastHiddenOddballNumber);
|
| + CHECK_LE(value, 1);
|
| + CHECK(value >= kLeastHiddenOddballNumber);
|
| }
|
| }
|
|
|
| @@ -591,8 +591,8 @@ void Code::CodeVerify() {
|
|
|
| void JSArray::JSArrayVerify() {
|
| JSObjectVerify();
|
| - ASSERT(length()->IsNumber() || length()->IsUndefined());
|
| - ASSERT(elements()->IsUndefined() ||
|
| + CHECK(length()->IsNumber() || length()->IsUndefined());
|
| + CHECK(elements()->IsUndefined() ||
|
| elements()->IsFixedArray() ||
|
| elements()->IsFixedDoubleArray());
|
| }
|
| @@ -602,7 +602,7 @@ void JSSet::JSSetVerify() {
|
| CHECK(IsJSSet());
|
| JSObjectVerify();
|
| VerifyHeapPointer(table());
|
| - ASSERT(table()->IsHashTable() || table()->IsUndefined());
|
| + CHECK(table()->IsHashTable() || table()->IsUndefined());
|
| }
|
|
|
|
|
| @@ -610,7 +610,7 @@ void JSMap::JSMapVerify() {
|
| CHECK(IsJSMap());
|
| JSObjectVerify();
|
| VerifyHeapPointer(table());
|
| - ASSERT(table()->IsHashTable() || table()->IsUndefined());
|
| + CHECK(table()->IsHashTable() || table()->IsUndefined());
|
| }
|
|
|
|
|
| @@ -618,17 +618,17 @@ void JSWeakMap::JSWeakMapVerify() {
|
| CHECK(IsJSWeakMap());
|
| JSObjectVerify();
|
| VerifyHeapPointer(table());
|
| - ASSERT(table()->IsHashTable() || table()->IsUndefined());
|
| + CHECK(table()->IsHashTable() || table()->IsUndefined());
|
| }
|
|
|
|
|
| void JSRegExp::JSRegExpVerify() {
|
| JSObjectVerify();
|
| - ASSERT(data()->IsUndefined() || data()->IsFixedArray());
|
| + CHECK(data()->IsUndefined() || data()->IsFixedArray());
|
| switch (TypeTag()) {
|
| case JSRegExp::ATOM: {
|
| FixedArray* arr = FixedArray::cast(data());
|
| - ASSERT(arr->get(JSRegExp::kAtomPatternIndex)->IsString());
|
| + CHECK(arr->get(JSRegExp::kAtomPatternIndex)->IsString());
|
| break;
|
| }
|
| case JSRegExp::IRREGEXP: {
|
| @@ -639,26 +639,26 @@ void JSRegExp::JSRegExpVerify() {
|
| // Smi : Not compiled yet (-1) or code prepared for flushing.
|
| // JSObject: Compilation error.
|
| // Code/ByteArray: Compiled code.
|
| - ASSERT(ascii_data->IsSmi() ||
|
| + CHECK(ascii_data->IsSmi() ||
|
| (is_native ? ascii_data->IsCode() : ascii_data->IsByteArray()));
|
| Object* uc16_data = arr->get(JSRegExp::kIrregexpUC16CodeIndex);
|
| - ASSERT(uc16_data->IsSmi() ||
|
| + CHECK(uc16_data->IsSmi() ||
|
| (is_native ? uc16_data->IsCode() : uc16_data->IsByteArray()));
|
|
|
| Object* ascii_saved = arr->get(JSRegExp::kIrregexpASCIICodeSavedIndex);
|
| - ASSERT(ascii_saved->IsSmi() || ascii_saved->IsString() ||
|
| + CHECK(ascii_saved->IsSmi() || ascii_saved->IsString() ||
|
| ascii_saved->IsCode());
|
| Object* uc16_saved = arr->get(JSRegExp::kIrregexpUC16CodeSavedIndex);
|
| - ASSERT(uc16_saved->IsSmi() || uc16_saved->IsString() ||
|
| + CHECK(uc16_saved->IsSmi() || uc16_saved->IsString() ||
|
| uc16_saved->IsCode());
|
|
|
| - ASSERT(arr->get(JSRegExp::kIrregexpCaptureCountIndex)->IsSmi());
|
| - ASSERT(arr->get(JSRegExp::kIrregexpMaxRegisterCountIndex)->IsSmi());
|
| + CHECK(arr->get(JSRegExp::kIrregexpCaptureCountIndex)->IsSmi());
|
| + CHECK(arr->get(JSRegExp::kIrregexpMaxRegisterCountIndex)->IsSmi());
|
| break;
|
| }
|
| default:
|
| - ASSERT_EQ(JSRegExp::NOT_COMPILED, TypeTag());
|
| - ASSERT(data()->IsUndefined());
|
| + CHECK_EQ(JSRegExp::NOT_COMPILED, TypeTag());
|
| + CHECK(data()->IsUndefined());
|
| break;
|
| }
|
| }
|
| @@ -667,7 +667,7 @@ void JSRegExp::JSRegExpVerify() {
|
| void JSProxy::JSProxyVerify() {
|
| CHECK(IsJSProxy());
|
| VerifyPointer(handler());
|
| - ASSERT(hash()->IsSmi() || hash()->IsUndefined());
|
| + CHECK(hash()->IsSmi() || hash()->IsUndefined());
|
| }
|
|
|
|
|
| @@ -680,7 +680,7 @@ void JSFunctionProxy::JSFunctionProxyVerify() {
|
|
|
|
|
| void Foreign::ForeignVerify() {
|
| - ASSERT(IsForeign());
|
| + CHECK(IsForeign());
|
| }
|
|
|
|
|
| @@ -784,6 +784,47 @@ void Script::ScriptVerify() {
|
| }
|
|
|
|
|
| +void JSFunctionResultCache::JSFunctionResultCacheVerify() {
|
| + JSFunction::cast(get(kFactoryIndex))->Verify();
|
| +
|
| + int size = Smi::cast(get(kCacheSizeIndex))->value();
|
| + CHECK(kEntriesIndex <= size);
|
| + CHECK(size <= length());
|
| + CHECK_EQ(0, size % kEntrySize);
|
| +
|
| + int finger = Smi::cast(get(kFingerIndex))->value();
|
| + CHECK(kEntriesIndex <= finger);
|
| + CHECK((finger < size) || (finger == kEntriesIndex && finger == size));
|
| + CHECK_EQ(0, finger % kEntrySize);
|
| +
|
| + if (FLAG_enable_slow_asserts) {
|
| + for (int i = kEntriesIndex; i < size; i++) {
|
| + CHECK(!get(i)->IsTheHole());
|
| + get(i)->Verify();
|
| + }
|
| + for (int i = size; i < length(); i++) {
|
| + CHECK(get(i)->IsTheHole());
|
| + get(i)->Verify();
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| +void NormalizedMapCache::NormalizedMapCacheVerify() {
|
| + FixedArray::cast(this)->Verify();
|
| + if (FLAG_enable_slow_asserts) {
|
| + for (int i = 0; i < length(); i++) {
|
| + Object* e = get(i);
|
| + if (e->IsMap()) {
|
| + Map::cast(e)->SharedMapVerify();
|
| + } else {
|
| + CHECK(e->IsUndefined());
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| #ifdef ENABLE_DEBUGGER_SUPPORT
|
| void DebugInfo::DebugInfoVerify() {
|
| CHECK(IsDebugInfo());
|
| @@ -802,7 +843,9 @@ void BreakPointInfo::BreakPointInfoVerify() {
|
| VerifyPointer(break_point_objects());
|
| }
|
| #endif // ENABLE_DEBUGGER_SUPPORT
|
| +#endif // VERIFY_HEAP
|
|
|
| +#ifdef DEBUG
|
|
|
| void JSObject::IncrementSpillStatistics(SpillInformation* info) {
|
| info->number_of_objects_++;
|
| @@ -962,63 +1005,6 @@ bool TransitionArray::IsConsistentWithBackPointers(Map* current_map) {
|
| }
|
|
|
|
|
| -void JSFunctionResultCache::JSFunctionResultCacheVerify() {
|
| - JSFunction::cast(get(kFactoryIndex))->Verify();
|
| -
|
| - int size = Smi::cast(get(kCacheSizeIndex))->value();
|
| - ASSERT(kEntriesIndex <= size);
|
| - ASSERT(size <= length());
|
| - ASSERT_EQ(0, size % kEntrySize);
|
| -
|
| - int finger = Smi::cast(get(kFingerIndex))->value();
|
| - ASSERT(kEntriesIndex <= finger);
|
| - ASSERT((finger < size) || (finger == kEntriesIndex && finger == size));
|
| - ASSERT_EQ(0, finger % kEntrySize);
|
| -
|
| - if (FLAG_enable_slow_asserts) {
|
| - for (int i = kEntriesIndex; i < size; i++) {
|
| - ASSERT(!get(i)->IsTheHole());
|
| - get(i)->Verify();
|
| - }
|
| - for (int i = size; i < length(); i++) {
|
| - ASSERT(get(i)->IsTheHole());
|
| - get(i)->Verify();
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -void NormalizedMapCache::NormalizedMapCacheVerify() {
|
| - FixedArray::cast(this)->Verify();
|
| - if (FLAG_enable_slow_asserts) {
|
| - for (int i = 0; i < length(); i++) {
|
| - Object* e = get(i);
|
| - if (e->IsMap()) {
|
| - Map::cast(e)->SharedMapVerify();
|
| - } else {
|
| - ASSERT(e->IsUndefined());
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -void Map::ZapTransitions() {
|
| - TransitionArray* transition_array = transitions();
|
| - MemsetPointer(transition_array->data_start(),
|
| - GetHeap()->the_hole_value(),
|
| - transition_array->length());
|
| -}
|
| -
|
| -
|
| -void Map::ZapPrototypeTransitions() {
|
| - FixedArray* proto_transitions = GetPrototypeTransitions();
|
| - MemsetPointer(proto_transitions->data_start(),
|
| - GetHeap()->the_hole_value(),
|
| - proto_transitions->length());
|
| -}
|
| -
|
| -
|
| #endif // DEBUG
|
|
|
| } } // namespace v8::internal
|
|
|