diff options
author | Michaël Zasso <targos@protonmail.com> | 2016-09-06 22:49:51 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2016-09-22 09:51:19 +0200 |
commit | ec02b811a8a5c999bab4de312be2d732b7d9d50b (patch) | |
tree | ca3068017254f238cf413a451c57a803572983a4 /deps/v8/src/objects-debug.cc | |
parent | d2eb7ce0105369a9cad82787cb33a665e9bd00ad (diff) | |
download | android-node-v8-ec02b811a8a5c999bab4de312be2d732b7d9d50b.tar.gz android-node-v8-ec02b811a8a5c999bab4de312be2d732b7d9d50b.tar.bz2 android-node-v8-ec02b811a8a5c999bab4de312be2d732b7d9d50b.zip |
deps: update V8 to 5.4.500.27
Pick up latest commit from the 5.4-lkgr branch.
deps: edit V8 gitignore to allow trace event copy
deps: update V8 trace event to 315bf1e2d45be7d53346c31cfcc37424a32c30c8
deps: edit V8 gitignore to allow gtest_prod.h copy
deps: update V8 gtest to 6f8a66431cb592dad629028a50b3dd418a408c87
PR-URL: https://github.com/nodejs/node/pull/8317
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Diffstat (limited to 'deps/v8/src/objects-debug.cc')
-rw-r--r-- | deps/v8/src/objects-debug.cc | 177 |
1 files changed, 92 insertions, 85 deletions
diff --git a/deps/v8/src/objects-debug.cc b/deps/v8/src/objects-debug.cc index b023b03aea..7d426a045e 100644 --- a/deps/v8/src/objects-debug.cc +++ b/deps/v8/src/objects-debug.cc @@ -99,6 +99,9 @@ void HeapObject::HeapObjectVerify() { Oddball::cast(this)->OddballVerify(); break; case JS_OBJECT_TYPE: + case JS_ERROR_TYPE: + case JS_ARGUMENTS_TYPE: + case JS_API_OBJECT_TYPE: case JS_SPECIAL_API_OBJECT_TYPE: case JS_CONTEXT_EXTENSION_OBJECT_TYPE: case JS_PROMISE_TYPE: @@ -107,9 +110,6 @@ void HeapObject::HeapObjectVerify() { case JS_GENERATOR_OBJECT_TYPE: JSGeneratorObject::cast(this)->JSGeneratorObjectVerify(); break; - case JS_MODULE_TYPE: - JSModule::cast(this)->JSModuleVerify(); - break; case JS_VALUE_TYPE: JSValue::cast(this)->JSValueVerify(); break; @@ -209,8 +209,8 @@ void HeapObject::VerifyHeapPointer(Object* p) { void Symbol::SymbolVerify() { CHECK(IsSymbol()); CHECK(HasHashCode()); - CHECK(GetHeap()->hidden_properties_symbol() == this || Hash() > 0u); - CHECK(name()->IsUndefined() || name()->IsString()); + CHECK(Hash() > 0u); + CHECK(name()->IsUndefined(GetIsolate()) || name()->IsString()); } @@ -288,6 +288,7 @@ void JSObject::JSObjectVerify() { actual_unused_property_fields - JSObject::kFieldsAdded); } DescriptorArray* descriptors = map()->instance_descriptors(); + Isolate* isolate = GetIsolate(); for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) { if (descriptors->GetDetails(i).type() == DATA) { Representation r = descriptors->GetDetails(i).representation(); @@ -298,7 +299,7 @@ void JSObject::JSObjectVerify() { } Object* value = RawFastPropertyAt(index); if (r.IsDouble()) DCHECK(value->IsMutableHeapNumber()); - if (value->IsUninitialized()) continue; + if (value->IsUninitialized(isolate)) continue; if (r.IsSmi()) DCHECK(value->IsSmi()); if (r.IsHeapObject()) DCHECK(value->IsHeapObject()); FieldType* field_type = descriptors->GetFieldType(i); @@ -311,7 +312,7 @@ void JSObject::JSObjectVerify() { // object literal creation and we will end up having and undefined // value that does not match the field type. CHECK(!field_type->NowStable() || field_type->NowContains(value) || - (!FLAG_use_allocation_folding && value->IsUndefined())); + (!FLAG_use_allocation_folding && value->IsUndefined(isolate))); } } } @@ -337,7 +338,7 @@ void Map::MapVerify() { CHECK(instance_size() == kVariableSizeSentinel || (kPointerSize <= instance_size() && instance_size() < heap->Capacity())); - CHECK(GetBackPointer()->IsUndefined() || + CHECK(GetBackPointer()->IsUndefined(heap->isolate()) || !Map::cast(GetBackPointer())->is_stable()); VerifyHeapPointer(prototype()); VerifyHeapPointer(instance_descriptors()); @@ -369,21 +370,6 @@ void Map::VerifyOmittedMapChecks() { } -void CodeCache::CodeCacheVerify() { - VerifyHeapPointer(default_cache()); - VerifyHeapPointer(normal_type_cache()); - CHECK(default_cache()->IsFixedArray()); - CHECK(normal_type_cache()->IsUndefined() - || normal_type_cache()->IsCodeCacheHashTable()); -} - - -void PolymorphicCodeCache::PolymorphicCodeCacheVerify() { - VerifyHeapPointer(cache()); - CHECK(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable()); -} - - void TypeFeedbackInfo::TypeFeedbackInfoVerify() { VerifyObjectField(kStorage1Offset); VerifyObjectField(kStorage2Offset); @@ -426,7 +412,7 @@ void TransitionArray::TransitionArrayVerify() { VerifyPointer(e); } CHECK_LE(LengthFor(number_of_transitions()), length()); - CHECK(next_link()->IsUndefined() || next_link()->IsSmi() || + CHECK(next_link()->IsUndefined(GetIsolate()) || next_link()->IsSmi() || next_link()->IsTransitionArray()); } @@ -443,14 +429,6 @@ void JSGeneratorObject::JSGeneratorObjectVerify() { } -void JSModule::JSModuleVerify() { - VerifyObjectField(kContextOffset); - VerifyObjectField(kScopeInfoOffset); - CHECK(context()->IsUndefined() || - Context::cast(context())->IsModuleContext()); -} - - void JSValue::JSValueVerify() { Object* v = value(); if (v->IsHeapObject()) { @@ -463,16 +441,18 @@ void JSDate::JSDateVerify() { if (value()->IsHeapObject()) { VerifyHeapPointer(value()); } - CHECK(value()->IsUndefined() || value()->IsSmi() || value()->IsHeapNumber()); - CHECK(year()->IsUndefined() || year()->IsSmi() || year()->IsNaN()); - CHECK(month()->IsUndefined() || month()->IsSmi() || month()->IsNaN()); - CHECK(day()->IsUndefined() || day()->IsSmi() || day()->IsNaN()); - CHECK(weekday()->IsUndefined() || weekday()->IsSmi() || weekday()->IsNaN()); - CHECK(hour()->IsUndefined() || hour()->IsSmi() || hour()->IsNaN()); - CHECK(min()->IsUndefined() || min()->IsSmi() || min()->IsNaN()); - CHECK(sec()->IsUndefined() || sec()->IsSmi() || sec()->IsNaN()); - CHECK(cache_stamp()->IsUndefined() || - cache_stamp()->IsSmi() || + Isolate* isolate = GetIsolate(); + CHECK(value()->IsUndefined(isolate) || value()->IsSmi() || + value()->IsHeapNumber()); + CHECK(year()->IsUndefined(isolate) || year()->IsSmi() || year()->IsNaN()); + CHECK(month()->IsUndefined(isolate) || month()->IsSmi() || month()->IsNaN()); + CHECK(day()->IsUndefined(isolate) || day()->IsSmi() || day()->IsNaN()); + CHECK(weekday()->IsUndefined(isolate) || weekday()->IsSmi() || + weekday()->IsNaN()); + CHECK(hour()->IsUndefined(isolate) || hour()->IsSmi() || hour()->IsNaN()); + CHECK(min()->IsUndefined(isolate) || min()->IsSmi() || min()->IsNaN()); + CHECK(sec()->IsUndefined(isolate) || sec()->IsSmi() || sec()->IsNaN()); + CHECK(cache_stamp()->IsUndefined(isolate) || cache_stamp()->IsSmi() || cache_stamp()->IsNaN()); if (month()->IsSmi()) { @@ -501,7 +481,7 @@ void JSDate::JSDateVerify() { } if (cache_stamp()->IsSmi()) { CHECK(Smi::cast(cache_stamp())->value() <= - Smi::cast(GetIsolate()->date_cache()->stamp())->value()); + Smi::cast(isolate->date_cache()->stamp())->value()); } } @@ -569,7 +549,7 @@ void JSFunction::JSFunctionVerify() { VerifyObjectField(kNextFunctionLinkOffset); CHECK(code()->IsCode()); CHECK(next_function_link() == NULL || - next_function_link()->IsUndefined() || + next_function_link()->IsUndefined(GetIsolate()) || next_function_link()->IsJSFunction()); CHECK(map()->is_callable()); } @@ -580,14 +560,17 @@ void SharedFunctionInfo::SharedFunctionInfoVerify() { VerifyObjectField(kNameOffset); VerifyObjectField(kCodeOffset); VerifyObjectField(kOptimizedCodeMapOffset); - VerifyObjectField(kFeedbackVectorOffset); + VerifyObjectField(kFeedbackMetadataOffset); VerifyObjectField(kScopeInfoOffset); VerifyObjectField(kInstanceClassNameOffset); - CHECK(function_data()->IsUndefined() || IsApiFunction() || - HasBuiltinFunctionId() || HasBytecodeArray()); + CHECK(function_data()->IsUndefined(GetIsolate()) || IsApiFunction() || + HasBytecodeArray() || HasAsmWasmData()); VerifyObjectField(kFunctionDataOffset); VerifyObjectField(kScriptOffset); VerifyObjectField(kDebugInfoOffset); + CHECK(function_identifier()->IsUndefined(GetIsolate()) || + HasBuiltinFunctionId() || HasInferredName()); + VerifyObjectField(kFunctionIdentifierOffset); } @@ -618,12 +601,13 @@ void Oddball::OddballVerify() { VerifyHeapPointer(to_string()); Object* number = to_number(); if (number->IsHeapObject()) { - CHECK(number == heap->nan_value()); + CHECK(number == heap->nan_value() || + number == heap->hole_nan_value()); } else { CHECK(number->IsSmi()); int value = Smi::cast(number)->value(); // Hidden oddballs have negative smis. - const int kLeastHiddenOddballNumber = -6; + const int kLeastHiddenOddballNumber = -7; CHECK_LE(value, 1); CHECK(value >= kLeastHiddenOddballNumber); } @@ -648,6 +632,8 @@ void Oddball::OddballVerify() { CHECK(this == heap->exception()); } else if (map() == heap->optimized_out_map()) { CHECK(this == heap->optimized_out()); + } else if (map() == heap->stale_register_map()) { + CHECK(this == heap->stale_register()); } else { UNREACHABLE(); } @@ -707,11 +693,25 @@ void Code::VerifyEmbeddedObjectsDependency() { CHECK(map->dependent_code()->Contains(DependentCode::kWeakCodeGroup, cell)); } else if (obj->IsJSObject()) { - WeakHashTable* table = - GetIsolate()->heap()->weak_object_to_code_table(); - Handle<HeapObject> key_obj(HeapObject::cast(obj), isolate); - CHECK(DependentCode::cast(table->Lookup(key_obj)) - ->Contains(DependentCode::kWeakCodeGroup, cell)); + if (isolate->heap()->InNewSpace(obj)) { + ArrayList* list = + GetIsolate()->heap()->weak_new_space_object_to_code_list(); + bool found = false; + for (int i = 0; i < list->Length(); i += 2) { + WeakCell* obj_cell = WeakCell::cast(list->Get(i)); + if (!obj_cell->cleared() && obj_cell->value() == obj && + WeakCell::cast(list->Get(i + 1)) == cell) { + found = true; + break; + } + } + CHECK(found); + } else { + Handle<HeapObject> key_obj(HeapObject::cast(obj), isolate); + DependentCode* dep = + GetIsolate()->heap()->LookupWeakObjectToCodeDependency(key_obj); + dep->Contains(DependentCode::kWeakCodeGroup, cell); + } } } } @@ -720,12 +720,12 @@ void Code::VerifyEmbeddedObjectsDependency() { void JSArray::JSArrayVerify() { JSObjectVerify(); - CHECK(length()->IsNumber() || length()->IsUndefined()); + Isolate* isolate = GetIsolate(); + CHECK(length()->IsNumber() || length()->IsUndefined(isolate)); // If a GC was caused while constructing this array, the elements // pointer may point to a one pointer filler map. if (ElementsAreSafeToExamine()) { - CHECK(elements()->IsUndefined() || - elements()->IsFixedArray() || + CHECK(elements()->IsUndefined(isolate) || elements()->IsFixedArray() || elements()->IsFixedDoubleArray()); } } @@ -735,7 +735,7 @@ void JSSet::JSSetVerify() { CHECK(IsJSSet()); JSObjectVerify(); VerifyHeapPointer(table()); - CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); + CHECK(table()->IsOrderedHashTable() || table()->IsUndefined(GetIsolate())); // TODO(arv): Verify OrderedHashTable too. } @@ -744,7 +744,7 @@ void JSMap::JSMapVerify() { CHECK(IsJSMap()); JSObjectVerify(); VerifyHeapPointer(table()); - CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); + CHECK(table()->IsOrderedHashTable() || table()->IsUndefined(GetIsolate())); // TODO(arv): Verify OrderedHashTable too. } @@ -753,9 +753,10 @@ void JSSetIterator::JSSetIteratorVerify() { CHECK(IsJSSetIterator()); JSObjectVerify(); VerifyHeapPointer(table()); - CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); - CHECK(index()->IsSmi() || index()->IsUndefined()); - CHECK(kind()->IsSmi() || kind()->IsUndefined()); + Isolate* isolate = GetIsolate(); + CHECK(table()->IsOrderedHashTable() || table()->IsUndefined(isolate)); + CHECK(index()->IsSmi() || index()->IsUndefined(isolate)); + CHECK(kind()->IsSmi() || kind()->IsUndefined(isolate)); } @@ -763,9 +764,10 @@ void JSMapIterator::JSMapIteratorVerify() { CHECK(IsJSMapIterator()); JSObjectVerify(); VerifyHeapPointer(table()); - CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); - CHECK(index()->IsSmi() || index()->IsUndefined()); - CHECK(kind()->IsSmi() || kind()->IsUndefined()); + Isolate* isolate = GetIsolate(); + CHECK(table()->IsOrderedHashTable() || table()->IsUndefined(isolate)); + CHECK(index()->IsSmi() || index()->IsUndefined(isolate)); + CHECK(kind()->IsSmi() || kind()->IsUndefined(isolate)); } @@ -773,7 +775,7 @@ void JSWeakMap::JSWeakMapVerify() { CHECK(IsJSWeakMap()); JSObjectVerify(); VerifyHeapPointer(table()); - CHECK(table()->IsHashTable() || table()->IsUndefined()); + CHECK(table()->IsHashTable() || table()->IsUndefined(GetIsolate())); } @@ -781,13 +783,14 @@ void JSWeakSet::JSWeakSetVerify() { CHECK(IsJSWeakSet()); JSObjectVerify(); VerifyHeapPointer(table()); - CHECK(table()->IsHashTable() || table()->IsUndefined()); + CHECK(table()->IsHashTable() || table()->IsUndefined(GetIsolate())); } void JSRegExp::JSRegExpVerify() { JSObjectVerify(); - CHECK(data()->IsUndefined() || data()->IsFixedArray()); + Isolate* isolate = GetIsolate(); + CHECK(data()->IsUndefined(isolate) || data()->IsFixedArray()); switch (TypeTag()) { case JSRegExp::ATOM: { FixedArray* arr = FixedArray::cast(data()); @@ -823,7 +826,7 @@ void JSRegExp::JSRegExpVerify() { } default: CHECK_EQ(JSRegExp::NOT_COMPILED, TypeTag()); - CHECK(data()->IsUndefined()); + CHECK(data()->IsUndefined(isolate)); break; } } @@ -833,10 +836,11 @@ void JSProxy::JSProxyVerify() { CHECK(IsJSProxy()); VerifyPointer(target()); VerifyPointer(handler()); + Isolate* isolate = GetIsolate(); CHECK_EQ(target()->IsCallable(), map()->is_callable()); CHECK_EQ(target()->IsConstructor(), map()->is_constructor()); - CHECK(hash()->IsSmi() || hash()->IsUndefined()); - CHECK(map()->prototype()->IsNull()); + CHECK(hash()->IsSmi() || hash()->IsUndefined(isolate)); + CHECK(map()->prototype()->IsNull(isolate)); // There should be no properties on a Proxy. CHECK_EQ(0, map()->NumberOfOwnDescriptors()); } @@ -846,8 +850,8 @@ void JSArrayBuffer::JSArrayBufferVerify() { CHECK(IsJSArrayBuffer()); JSObjectVerify(); VerifyPointer(byte_length()); - CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber() - || byte_length()->IsUndefined()); + CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber() || + byte_length()->IsUndefined(GetIsolate())); } @@ -855,16 +859,17 @@ void JSArrayBufferView::JSArrayBufferViewVerify() { CHECK(IsJSArrayBufferView()); JSObjectVerify(); VerifyPointer(buffer()); - CHECK(buffer()->IsJSArrayBuffer() || buffer()->IsUndefined() - || buffer() == Smi::FromInt(0)); + Isolate* isolate = GetIsolate(); + CHECK(buffer()->IsJSArrayBuffer() || buffer()->IsUndefined(isolate) || + buffer() == Smi::FromInt(0)); VerifyPointer(raw_byte_offset()); CHECK(raw_byte_offset()->IsSmi() || raw_byte_offset()->IsHeapNumber() || - raw_byte_offset()->IsUndefined()); + raw_byte_offset()->IsUndefined(isolate)); VerifyPointer(raw_byte_length()); CHECK(raw_byte_length()->IsSmi() || raw_byte_length()->IsHeapNumber() || - raw_byte_length()->IsUndefined()); + raw_byte_length()->IsUndefined(isolate)); } @@ -873,7 +878,7 @@ void JSTypedArray::JSTypedArrayVerify() { JSArrayBufferViewVerify(); VerifyPointer(raw_length()); CHECK(raw_length()->IsSmi() || raw_length()->IsHeapNumber() || - raw_length()->IsUndefined()); + raw_length()->IsUndefined(GetIsolate())); VerifyPointer(elements()); } @@ -921,6 +926,7 @@ void AccessorInfo::AccessorInfoVerify() { VerifyPointer(expected_receiver_type()); VerifyPointer(getter()); VerifyPointer(setter()); + VerifyPointer(js_getter()); VerifyPointer(data()); } @@ -934,9 +940,9 @@ void AccessorPair::AccessorPairVerify() { void AccessCheckInfo::AccessCheckInfoVerify() { CHECK(IsAccessCheckInfo()); - VerifyPointer(named_callback()); - VerifyPointer(indexed_callback()); VerifyPointer(callback()); + VerifyPointer(named_interceptor()); + VerifyPointer(indexed_interceptor()); VerifyPointer(data()); } @@ -986,7 +992,7 @@ void ObjectTemplateInfo::ObjectTemplateInfoVerify() { CHECK(IsObjectTemplateInfo()); TemplateInfoVerify(); VerifyPointer(constructor()); - VerifyPointer(internal_field_count()); + VerifyPointer(data()); } @@ -1014,12 +1020,13 @@ void Script::ScriptVerify() { void NormalizedMapCache::NormalizedMapCacheVerify() { FixedArray::cast(this)->FixedArrayVerify(); if (FLAG_enable_slow_asserts) { + Isolate* isolate = GetIsolate(); for (int i = 0; i < length(); i++) { Object* e = FixedArray::get(i); if (e->IsMap()) { Map::cast(e)->DictionaryMapVerify(); } else { - CHECK(e->IsUndefined()); + CHECK(e->IsUndefined(isolate)); } } } @@ -1029,7 +1036,7 @@ void NormalizedMapCache::NormalizedMapCacheVerify() { void DebugInfo::DebugInfoVerify() { CHECK(IsDebugInfo()); VerifyPointer(shared()); - VerifyPointer(abstract_code()); + VerifyPointer(debug_bytecode_array()); VerifyPointer(break_points()); } @@ -1073,9 +1080,9 @@ void JSObject::IncrementSpillStatistics(SpillInformation* info) { int holes = 0; FixedArray* e = FixedArray::cast(elements()); int len = e->length(); - Heap* heap = GetHeap(); + Isolate* isolate = GetIsolate(); for (int i = 0; i < len; i++) { - if (e->get(i) == heap->the_hole_value()) holes++; + if (e->get(i)->IsTheHole(isolate)) holes++; } info->number_of_fast_used_elements_ += len - holes; info->number_of_fast_unused_elements_ += holes; |