Chromium Code Reviews| Index: src/property.cc |
| diff --git a/src/property.cc b/src/property.cc |
| index d5848bf44c0278c351a6421dd3e8ce51b15fce83..564d5548c4770a1c5b11e66f82e46e63b52ec504 100644 |
| --- a/src/property.cc |
| +++ b/src/property.cc |
| @@ -29,66 +29,49 @@ Descriptor Descriptor::DataField(Handle<Name> key, int field_index, |
| representation, field_index); |
| } |
| -struct FastPropertyDetails { |
| - explicit FastPropertyDetails(const PropertyDetails& v) : details(v) {} |
| - const PropertyDetails details; |
| -}; |
| - |
| - |
| // Outputs PropertyDetails as a dictionary details. |
| -std::ostream& operator<<(std::ostream& os, const PropertyDetails& details) { |
| +void PropertyDetails::PrintAsSlowTo(std::ostream& os) { |
| os << "("; |
| - if (details.location() == kDescriptor) { |
| - os << "immutable "; |
| - } |
| - os << (details.kind() == kData ? "data" : "accessor"); |
| - return os << ", dictionary_index: " << details.dictionary_index() |
| - << ", attrs: " << details.attributes() << ")"; |
| + os << (kind() == kData ? "data" : "accessor"); |
| + os << ", dictionary_index: " << dictionary_index(); |
| + os << ", attrs: " << attributes() << ")"; |
| } |
| - |
| // Outputs PropertyDetails as a descriptor array details. |
| -std::ostream& operator<<(std::ostream& os, |
| - const FastPropertyDetails& details_fast) { |
| - const PropertyDetails& details = details_fast.details; |
| +void PropertyDetails::PrintAsFastTo(std::ostream& os, PrintMode mode) { |
| os << "("; |
| - if (details.location() == kDescriptor) { |
| - os << "immutable "; |
| + os << (kind() == kData ? "data" : "accessor"); |
| + if (location() == kField) { |
| + os << " field"; |
| + if (mode & kPrintFieldIndex) { |
| + os << " " << field_index(); |
| + } |
| + if (mode & kPrintRepresentation) { |
| + os << ":" << representation().Mnemonic(); |
|
Jakob Kummerow
2017/01/12 15:53:20
nit: might want a space after ':'
Igor Sheludko
2017/01/12 15:56:00
It looks better without a space.
|
| + } |
| + } else { |
| + os << " descriptor"; |
| + } |
| + if (mode & kPrintPointer) { |
| + os << ", p: " << pointer(); |
| } |
| - os << (details.kind() == kData ? "data" : "accessor"); |
| - os << ": " << details.representation().Mnemonic(); |
| - if (details.location() == kField) { |
| - os << ", field_index: " << details.field_index(); |
| + if (mode & kPrintAttributes) { |
| + os << ", attrs: " << attributes(); |
| } |
| - return os << ", p: " << details.pointer() |
| - << ", attrs: " << details.attributes() << ")"; |
| + os << ")"; |
| } |
| - |
| #ifdef OBJECT_PRINT |
| void PropertyDetails::Print(bool dictionary_mode) { |
| OFStream os(stdout); |
| if (dictionary_mode) { |
| - os << *this; |
| + PrintAsSlowTo(os); |
| } else { |
| - os << FastPropertyDetails(*this); |
| + PrintAsFastTo(os, PrintMode::kPrintFull); |
| } |
| os << "\n" << std::flush; |
| } |
| #endif |
| - |
| -std::ostream& operator<<(std::ostream& os, const Descriptor& d) { |
| - Object* value = *d.GetValue(); |
| - os << "Descriptor " << Brief(*d.GetKey()) << " @ " << Brief(value) << " "; |
| - if (value->IsAccessorPair()) { |
| - AccessorPair* pair = AccessorPair::cast(value); |
| - os << "(get: " << Brief(pair->getter()) |
| - << ", set: " << Brief(pair->setter()) << ") "; |
| - } |
| - os << FastPropertyDetails(d.GetDetails()); |
| - return os; |
| -} |
| - |
| } // namespace internal |
| } // namespace v8 |