 Chromium Code Reviews
 Chromium Code Reviews Issue 2627003005:
  [printing] Remove duplicate code that prints property details.  (Closed)
    
  
    Issue 2627003005:
  [printing] Remove duplicate code that prints property details.  (Closed) 
  | 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 |