Index: src/objects-printer.cc |
diff --git a/src/objects-printer.cc b/src/objects-printer.cc |
index def2cd85ba151fc7311fd0a409dcb065e8c517cf..f63bfc415a7ea326aa858bf0ea1efaa41a8c10bc 100644 |
--- a/src/objects-printer.cc |
+++ b/src/objects-printer.cc |
@@ -33,7 +33,13 @@ void Object::Print(std::ostream& os) { // NOLINT |
void HeapObject::PrintHeader(std::ostream& os, const char* id) { // NOLINT |
- os << reinterpret_cast<void*>(this) << ": [" << id << "]"; |
+ os << reinterpret_cast<void*>(this) << ": ["; |
+ if (id != nullptr) { |
+ os << id; |
+ } else { |
+ os << map()->instance_type(); |
+ } |
+ os << "]"; |
} |
@@ -97,11 +103,13 @@ void HeapObject::HeapObjectPrint(std::ostream& os) { // NOLINT |
case JS_OBJECT_TYPE: // fall through |
case JS_SPECIAL_API_OBJECT_TYPE: |
case JS_CONTEXT_EXTENSION_OBJECT_TYPE: |
- case JS_ARRAY_TYPE: |
case JS_GENERATOR_OBJECT_TYPE: |
case JS_PROMISE_TYPE: |
JSObject::cast(this)->JSObjectPrint(os); |
break; |
+ case JS_ARRAY_TYPE: |
+ JSArray::cast(this)->JSArrayPrint(os); |
+ break; |
case JS_REGEXP_TYPE: |
JSRegExp::cast(this)->JSRegExpPrint(os); |
break; |
@@ -396,16 +404,20 @@ static void JSObjectPrintHeader(std::ostream& os, JSObject* obj, |
obj->PrintHeader(os, id); |
// Don't call GetElementsKind, its validation code can cause the printer to |
// fail when debugging. |
- os << "\n - map = " << reinterpret_cast<void*>(obj->map()) << " [" |
- << ElementsKindToString(obj->map()->elements_kind()); |
- if (obj->elements()->map() == obj->GetHeap()->fixed_cow_array_map()) { |
- os << " (COW)"; |
+ os << "\n - map = " << reinterpret_cast<void*>(obj->map()) << " ["; |
+ if (obj->HasFastProperties()) { |
+ os << "FastProperties"; |
+ } else { |
+ os << "DictionaryProperties"; |
} |
PrototypeIterator iter(obj->GetIsolate(), obj); |
os << "]\n - prototype = " << reinterpret_cast<void*>(iter.GetCurrent()); |
- if (obj->elements()->length() > 0) { |
- os << "\n - elements = " << Brief(obj->elements()); |
+ os << "\n - elements = " << Brief(obj->elements()) << " [" |
+ << ElementsKindToString(obj->map()->elements_kind()); |
+ if (obj->elements()->map() == obj->GetHeap()->fixed_cow_array_map()) { |
+ os << " (COW)"; |
} |
+ os << "]"; |
} |
@@ -413,14 +425,19 @@ static void JSObjectPrintBody(std::ostream& os, JSObject* obj, // NOLINT |
bool print_elements = true) { |
os << "\n {"; |
obj->PrintProperties(os); |
- obj->PrintTransitions(os); |
if (print_elements) obj->PrintElements(os); |
os << "\n }\n"; |
} |
void JSObject::JSObjectPrint(std::ostream& os) { // NOLINT |
- JSObjectPrintHeader(os, this, "JSObject"); |
+ JSObjectPrintHeader(os, this, nullptr); |
+ JSObjectPrintBody(os, this); |
+} |
+ |
+void JSArray::JSArrayPrint(std::ostream& os) { // NOLINT |
+ JSObjectPrintHeader(os, this, "JSArray"); |
+ os << "\n - length = " << Brief(this->length()); |
JSObjectPrintBody(os, this); |
} |
@@ -1279,7 +1296,7 @@ void TransitionArray::PrintTransitions(std::ostream& os, Object* transitions, |
for (int i = 0; i < num_transitions; i++) { |
Name* key = GetKey(transitions, i); |
Map* target = GetTarget(transitions, i); |
- os << "\n "; |
+ os << "\n "; |
#ifdef OBJECT_PRINT |
key->NamePrint(os); |
#else |