| 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
|
|
|