Index: src/objects-printer.cc |
diff --git a/src/objects-printer.cc b/src/objects-printer.cc |
index 2fb924cfc99a19b94d964ddd364c7545d16f3d81..bc5ffca78eed6c6d572ef183bd7f1d998c7cc9a7 100644 |
--- a/src/objects-printer.cc |
+++ b/src/objects-printer.cc |
@@ -233,8 +233,12 @@ void JSObject::PrintProperties(std::ostream& os) { // NOLINT |
switch (descs->GetType(i)) { |
case FIELD: { |
FieldIndex index = FieldIndex::ForDescriptor(map(), i); |
- os << Brief(RawFastPropertyAt(index)) << " (field at offset " |
- << index.property_index() << ")\n"; |
+ if (IsUnboxedDoubleField(index)) { |
+ os << "<unboxed double> " << RawFastDoublePropertyAt(index); |
+ } else { |
+ os << Brief(RawFastPropertyAt(index)); |
+ } |
+ os << " (field at offset " << index.property_index() << ")\n"; |
break; |
} |
case CONSTANT: |
@@ -430,6 +434,9 @@ void Map::MapPrint(std::ostream& os) { // NOLINT |
os << "\n - instance descriptors " << (owns_descriptors() ? "(own) " : "") |
<< "#" << NumberOfOwnDescriptors() << ": " |
<< Brief(instance_descriptors()); |
+ if (FLAG_unbox_double_fields) { |
+ os << "\n - layout descriptor: " << Brief(layout_descriptor()); |
+ } |
if (HasTransitionArray()) { |
os << "\n - transitions: " << Brief(transitions()); |
} |
@@ -1076,6 +1083,43 @@ void DescriptorArray::PrintDescriptors(std::ostream& os) { // NOLINT |
} |
+static void PrintBitMask(std::ostream& os, uint32_t value) { // NOLINT |
+ for (int i = 0; i < 32; i++) { |
+ if ((i & 7) == 0) os << " "; |
+ os << (((value & 1) == 0) ? "_" : "x"); |
+ value >>= 1; |
+ } |
+} |
+ |
+ |
+void LayoutDescriptor::Print() { |
+ OFStream os(stdout); |
+ this->Print(os); |
+ os << std::flush; |
+} |
+ |
+ |
+void LayoutDescriptor::Print(std::ostream& os) { // NOLINT |
+ os << "Layout descriptor: "; |
+ if (IsUninitialized()) { |
+ os << "<uninitialized>"; |
+ } else if (IsFastPointerLayout()) { |
+ os << "<all tagged>"; |
+ } else if (IsSmi()) { |
+ os << "fast"; |
+ PrintBitMask(os, static_cast<uint32_t>(Smi::cast(this)->value())); |
+ } else { |
+ os << "slow"; |
+ int len = length(); |
+ for (int i = 0; i < len; i++) { |
+ if (i > 0) os << " |"; |
+ PrintBitMask(os, get_scalar(i)); |
+ } |
+ } |
+ os << "\n"; |
+} |
+ |
+ |
void TransitionArray::Print() { |
OFStream os(stdout); |
this->PrintTransitions(os); |