Index: src/property.cc |
diff --git a/src/property.cc b/src/property.cc |
index 81966d4017fe976935b0e20eff2b0a5705491907..e9e4b64690777aede7c4595e8bd122e07a8bc3ac 100644 |
--- a/src/property.cc |
+++ b/src/property.cc |
@@ -31,9 +31,43 @@ std::ostream& operator<<(std::ostream& os, const LookupResult& r) { |
} |
+std::ostream& operator<<(std::ostream& os, |
+ const PropertyAttributes& attributes) { |
+ os << "["; |
+ os << (((attributes & READ_ONLY) == 0) ? "W" : "_"); // writable |
+ os << (((attributes & DONT_ENUM) == 0) ? "E" : "_"); // enumerable |
+ os << (((attributes & DONT_DELETE) == 0) ? "C" : "_"); // configurable |
+ os << "]"; |
+ return os; |
+} |
+ |
+ |
+std::ostream& operator<<(std::ostream& os, const PropertyDetails& details) { |
+ os << "("; |
+ switch (details.type()) { |
+ case NORMAL: |
+ os << "normal: dictionary_index: " << details.dictionary_index(); |
+ break; |
+ case CONSTANT: |
+ os << "constant: p: " << details.pointer(); |
+ break; |
+ case FIELD: |
+ os << "field: " << details.representation().Mnemonic() |
+ << ", field_index: " << details.field_index() |
+ << ", p: " << details.pointer(); |
+ break; |
+ case CALLBACKS: |
+ os << "callbacks: p: " << details.pointer(); |
+ break; |
+ } |
+ os << ", attrs: " << details.attributes() << ")"; |
+ return os; |
+} |
+ |
+ |
std::ostream& operator<<(std::ostream& os, const Descriptor& d) { |
return os << "Descriptor " << Brief(*d.GetKey()) << " @ " |
- << Brief(*d.GetValue()); |
+ << Brief(*d.GetValue()) << " " << d.GetDetails(); |
} |
} } // namespace v8::internal |