Index: src/objects-printer.cc |
diff --git a/src/objects-printer.cc b/src/objects-printer.cc |
index 7d8f133e88edcf3f3c2245d66c2f769ca8483ea2..9c7874e526d2b85c23d7001cbcbddda4757f86be 100644 |
--- a/src/objects-printer.cc |
+++ b/src/objects-printer.cc |
@@ -82,6 +82,9 @@ void HeapObject::HeapObjectPrint(FILE* out) { |
case HEAP_NUMBER_TYPE: |
HeapNumber::cast(this)->HeapNumberPrint(out); |
break; |
+ case FIXED_DOUBLE_ARRAY_TYPE: |
+ FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(out); |
+ break; |
case FIXED_ARRAY_TYPE: |
FixedArray::cast(this)->FixedArrayPrint(out); |
break; |
@@ -242,6 +245,54 @@ void ExternalDoubleArray::ExternalDoubleArrayPrint(FILE* out) { |
} |
+static void PrintElementsKind(FILE* out, ElementsKind kind) { |
+ switch (kind) { |
+ case FAST_SMI_ONLY_ELEMENTS: |
+ PrintF(out, "FAST_SMI_ONLY_ELEMENTS"); |
+ break; |
+ case FAST_ELEMENTS: |
+ PrintF(out, "FAST_ELEMENTS"); |
+ break; |
+ case FAST_DOUBLE_ELEMENTS: |
+ PrintF(out, "FAST_DOUBLE_ELEMENTS"); |
+ break; |
+ case DICTIONARY_ELEMENTS: |
+ PrintF(out, "DICTIONARY_ELEMENTS"); |
+ break; |
+ case NON_STRICT_ARGUMENTS_ELEMENTS: |
+ PrintF(out, "NON_STRICT_ARGUMENTS_ELEMENTS"); |
+ break; |
+ case EXTERNAL_BYTE_ELEMENTS: |
+ PrintF(out, "EXTERNAL_BYTE_ELEMENTS"); |
+ break; |
+ case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
+ PrintF(out, "EXTERNAL_UNSIGNED_BYTE_ELEMENTS"); |
+ break; |
+ case EXTERNAL_SHORT_ELEMENTS: |
+ PrintF(out, "EXTERNAL_SHORT_ELEMENTS"); |
+ break; |
+ case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
+ PrintF(out, "EXTERNAL_UNSIGNED_SHORT_ELEMENTS"); |
+ break; |
+ case EXTERNAL_INT_ELEMENTS: |
+ PrintF(out, "EXTERNAL_INT_ELEMENTS"); |
+ break; |
+ case EXTERNAL_UNSIGNED_INT_ELEMENTS: |
+ PrintF(out, "EXTERNAL_UNSIGNED_INT_ELEMENTS"); |
+ break; |
+ case EXTERNAL_FLOAT_ELEMENTS: |
+ PrintF(out, "EXTERNAL_FLOAT_ELEMENTS"); |
+ break; |
+ case EXTERNAL_DOUBLE_ELEMENTS: |
+ PrintF(out, "EXTERNAL_DOUBLE_ELEMENTS"); |
+ break; |
+ case EXTERNAL_PIXEL_ELEMENTS: |
+ PrintF(out, "EXTERNAL_DOUBLE_ELEMENTS"); |
+ break; |
+ } |
+} |
+ |
+ |
void JSObject::PrintProperties(FILE* out) { |
if (HasFastProperties()) { |
DescriptorArray* descs = map()->instance_descriptors(); |
@@ -265,16 +316,19 @@ void JSObject::PrintProperties(FILE* out) { |
PrintF(out, " (callback)\n"); |
break; |
case ELEMENTS_TRANSITION: |
- PrintF(out, " (elements transition)\n"); |
+ PrintF(out, "(elements transition to "); |
+ PrintElementsKind(out, |
+ Map::cast(descs->GetValue(i))->elements_kind()); |
+ PrintF(out, ")\n"); |
break; |
case MAP_TRANSITION: |
- PrintF(out, " (map transition)\n"); |
+ PrintF(out, "(map transition)\n"); |
break; |
case CONSTANT_TRANSITION: |
- PrintF(out, " (constant transition)\n"); |
+ PrintF(out, "(constant transition)\n"); |
break; |
case NULL_DESCRIPTOR: |
- PrintF(out, " (null descriptor)\n"); |
+ PrintF(out, "(null descriptor)\n"); |
break; |
default: |
UNREACHABLE(); |
@@ -288,7 +342,10 @@ void JSObject::PrintProperties(FILE* out) { |
void JSObject::PrintElements(FILE* out) { |
- switch (GetElementsKind()) { |
+ // Don't call GetElementsKind, it's validate code can cause the printer to |
+ // fail when debugging. |
+ switch (map()->elements_kind()) { |
+ case FAST_SMI_ONLY_ELEMENTS: |
case FAST_ELEMENTS: { |
// Print in array notation for non-sparse arrays. |
FixedArray* p = FixedArray::cast(elements()); |
@@ -396,8 +453,13 @@ void JSObject::PrintElements(FILE* out) { |
void JSObject::JSObjectPrint(FILE* out) { |
PrintF(out, "%p: [JSObject]\n", reinterpret_cast<void*>(this)); |
- PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); |
- PrintF(out, " - prototype = %p\n", reinterpret_cast<void*>(GetPrototype())); |
+ PrintF(out, " - map = %p [", reinterpret_cast<void*>(map())); |
+ // Don't call GetElementsKind, it's validate code can cause the printer to |
+ // fail when debugging. |
+ PrintElementsKind(out, this->map()->elements_kind()); |
+ PrintF(out, |
+ "]\n - prototype = %p\n", |
+ reinterpret_cast<void*>(GetPrototype())); |
PrintF(out, " {\n"); |
PrintProperties(out); |
PrintElements(out); |
@@ -528,6 +590,16 @@ void FixedArray::FixedArrayPrint(FILE* out) { |
} |
+void FixedDoubleArray::FixedDoubleArrayPrint(FILE* out) { |
+ HeapObject::PrintHeader(out, "FixedDoubleArray"); |
+ PrintF(out, " - length: %d", length()); |
+ for (int i = 0; i < length(); i++) { |
+ PrintF(out, "\n [%d]: %g", i, get_scalar(i)); |
+ } |
+ PrintF(out, "\n"); |
+} |
+ |
+ |
void JSValue::JSValuePrint(FILE* out) { |
HeapObject::PrintHeader(out, "ValueObject"); |
value()->Print(out); |