| Index: src/objects-printer.cc
|
| diff --git a/src/objects-printer.cc b/src/objects-printer.cc
|
| index c8149bb3295d126256f6a27c75cbd92dd7fa970f..d9a8676efcc95344bd7df326bb2d341950985535 100644
|
| --- a/src/objects-printer.cc
|
| +++ b/src/objects-printer.cc
|
| @@ -347,39 +347,7 @@ void JSObject::PrintElements(std::ostream& os) { // NOLINT
|
|
|
| void JSObject::PrintTransitions(std::ostream& os) { // NOLINT
|
| if (!map()->HasTransitionArray()) return;
|
| - TransitionArray* transitions = map()->transitions();
|
| - for (int i = 0; i < transitions->number_of_transitions(); i++) {
|
| - Name* key = transitions->GetKey(i);
|
| - os << " ";
|
| - key->NamePrint(os);
|
| - os << ": ";
|
| - if (key == GetHeap()->frozen_symbol()) {
|
| - os << " (transition to frozen)\n";
|
| - } else if (key == GetHeap()->elements_transition_symbol()) {
|
| - os << " (transition to "
|
| - << ElementsKindToString(transitions->GetTarget(i)->elements_kind())
|
| - << ")\n";
|
| - } else if (key == GetHeap()->observed_symbol()) {
|
| - os << " (transition to Object.observe)\n";
|
| - } else {
|
| - switch (transitions->GetTargetDetails(i).type()) {
|
| - case FIELD: {
|
| - os << " (transition to field)\n";
|
| - break;
|
| - }
|
| - case CONSTANT:
|
| - os << " (transition to constant)\n";
|
| - break;
|
| - case CALLBACKS:
|
| - os << " (transition to callback)\n";
|
| - break;
|
| - // Values below are never in the target descriptor array.
|
| - case NORMAL:
|
| - UNREACHABLE();
|
| - break;
|
| - }
|
| - }
|
| - }
|
| + map()->transitions()->PrintTransitions(os, false);
|
| }
|
|
|
|
|
| @@ -442,6 +410,8 @@ void Map::MapPrint(std::ostream& os) { // NOLINT
|
| os << "\n - pre-allocated property fields: "
|
| << pre_allocated_property_fields() << "\n";
|
| os << " - unused property fields: " << unused_property_fields() << "\n";
|
| + if (is_dictionary_map()) os << " - dictionary_map\n";
|
| + if (is_prototype_map()) os << " - prototype_map\n";
|
| if (is_hidden_prototype()) os << " - hidden_prototype\n";
|
| if (has_named_interceptor()) os << " - named_interceptor\n";
|
| if (has_indexed_interceptor()) os << " - indexed_interceptor\n";
|
| @@ -605,10 +575,13 @@ void String::StringPrint(std::ostream& os) { // NOLINT
|
|
|
|
|
| void Name::NamePrint(std::ostream& os) { // NOLINT
|
| - if (IsString())
|
| + if (IsString()) {
|
| String::cast(this)->StringPrint(os);
|
| - else
|
| + } else if (IsSymbol()) {
|
| + Symbol::cast(this)->name()->Print(os);
|
| + } else {
|
| os << Brief(this);
|
| + }
|
| }
|
|
|
|
|
| @@ -1082,41 +1055,70 @@ void BreakPointInfo::BreakPointInfoPrint(std::ostream& os) { // NOLINT
|
| }
|
|
|
|
|
| +void DescriptorArray::Print() {
|
| + OFStream os(stdout);
|
| + this->PrintDescriptors(os);
|
| + os << std::flush;
|
| +}
|
| +
|
| +
|
| void DescriptorArray::PrintDescriptors(std::ostream& os) { // NOLINT
|
| - os << "Descriptor array " << number_of_descriptors() << "\n";
|
| + os << "Descriptor array " << number_of_descriptors() << "\n";
|
| for (int i = 0; i < number_of_descriptors(); i++) {
|
| Descriptor desc;
|
| Get(i, &desc);
|
| - os << " " << i << ": " << desc;
|
| + os << " " << i << ": " << desc << "\n";
|
| }
|
| os << "\n";
|
| }
|
|
|
|
|
| -void TransitionArray::PrintTransitions(std::ostream& os) { // NOLINT
|
| - os << "Transition array %d\n", number_of_transitions();
|
| +void TransitionArray::Print() {
|
| + OFStream os(stdout);
|
| + this->PrintTransitions(os);
|
| + os << std::flush;
|
| +}
|
| +
|
| +
|
| +void TransitionArray::PrintTransitions(std::ostream& os,
|
| + bool print_header) { // NOLINT
|
| + if (print_header) {
|
| + os << "Transition array " << number_of_transitions() << "\n";
|
| + }
|
| for (int i = 0; i < number_of_transitions(); i++) {
|
| - os << " " << i << ": ";
|
| - GetKey(i)->NamePrint(os);
|
| + Name* key = GetKey(i);
|
| + os << " ";
|
| + key->NamePrint(os);
|
| os << ": ";
|
| - switch (GetTargetDetails(i).type()) {
|
| - case FIELD: {
|
| - os << " (transition to field)\n";
|
| - break;
|
| + if (key == GetHeap()->frozen_symbol()) {
|
| + os << " (transition to frozen)";
|
| + } else if (key == GetHeap()->elements_transition_symbol()) {
|
| + os << " (transition to "
|
| + << ElementsKindToString(GetTarget(i)->elements_kind()) << ")";
|
| + } else if (key == GetHeap()->observed_symbol()) {
|
| + os << " (transition to Object.observe)";
|
| + } else {
|
| + PropertyDetails details = GetTargetDetails(i);
|
| + switch (details.type()) {
|
| + case FIELD: {
|
| + os << " (transition to field)";
|
| + break;
|
| + }
|
| + case CONSTANT:
|
| + os << " (transition to constant " << Brief(GetTargetValue(i)) << ")";
|
| + break;
|
| + case CALLBACKS:
|
| + os << " (transition to callback " << Brief(GetTargetValue(i)) << ")";
|
| + break;
|
| + // Values below are never in the target descriptor array.
|
| + case NORMAL:
|
| + UNREACHABLE();
|
| + break;
|
| }
|
| - case CONSTANT:
|
| - os << " (transition to constant)\n";
|
| - break;
|
| - case CALLBACKS:
|
| - os << " (transition to callback)\n";
|
| - break;
|
| - // Values below are never in the target descriptor array.
|
| - case NORMAL:
|
| - UNREACHABLE();
|
| - break;
|
| + os << ", attrs: " << details.attributes();
|
| }
|
| + os << " -> " << Brief(GetTarget(i)) << "\n";
|
| }
|
| - os << "\n";
|
| }
|
|
|
|
|
|
|