OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/objects.h" | 5 #include "src/objects.h" |
6 | 6 |
7 #include <iomanip> | 7 #include <iomanip> |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/disasm.h" | 10 #include "src/disasm.h" |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 } | 504 } |
505 os << "]"; | 505 os << "]"; |
506 if (obj->GetInternalFieldCount() > 0) { | 506 if (obj->GetInternalFieldCount() > 0) { |
507 os << "\n - internal fields: " << obj->GetInternalFieldCount(); | 507 os << "\n - internal fields: " << obj->GetInternalFieldCount(); |
508 } | 508 } |
509 } | 509 } |
510 | 510 |
511 | 511 |
512 static void JSObjectPrintBody(std::ostream& os, JSObject* obj, // NOLINT | 512 static void JSObjectPrintBody(std::ostream& os, JSObject* obj, // NOLINT |
513 bool print_elements = true) { | 513 bool print_elements = true) { |
514 os << "\n - properties = {"; | 514 os << "\n - properties = " << Brief(obj->properties()) << " {"; |
515 obj->PrintProperties(os); | 515 obj->PrintProperties(os); |
516 os << "\n }\n"; | 516 os << "\n }\n"; |
517 if (print_elements && obj->elements()->length() > 0) { | 517 if (print_elements && obj->elements()->length() > 0) { |
518 os << " - elements = {"; | 518 os << " - elements = {"; |
519 obj->PrintElements(os); | 519 obj->PrintElements(os); |
520 os << "\n }\n"; | 520 os << "\n }\n"; |
521 } | 521 } |
522 int internal_fields = obj->GetInternalFieldCount(); | 522 int internal_fields = obj->GetInternalFieldCount(); |
523 if (internal_fields > 0) { | 523 if (internal_fields > 0) { |
524 os << " - internal fields = {"; | 524 os << " - internal fields = {"; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 if (is_prototype_map()) { | 590 if (is_prototype_map()) { |
591 os << "\n - prototype_map"; | 591 os << "\n - prototype_map"; |
592 os << "\n - prototype info: " << Brief(prototype_info()); | 592 os << "\n - prototype info: " << Brief(prototype_info()); |
593 } else { | 593 } else { |
594 os << "\n - back pointer: " << Brief(GetBackPointer()); | 594 os << "\n - back pointer: " << Brief(GetBackPointer()); |
595 } | 595 } |
596 os << "\n - instance descriptors " << (owns_descriptors() ? "(own) " : "") | 596 os << "\n - instance descriptors " << (owns_descriptors() ? "(own) " : "") |
597 << "#" << NumberOfOwnDescriptors() << ": " | 597 << "#" << NumberOfOwnDescriptors() << ": " |
598 << Brief(instance_descriptors()); | 598 << Brief(instance_descriptors()); |
599 if (FLAG_unbox_double_fields) { | 599 if (FLAG_unbox_double_fields) { |
600 os << "\n - layout descriptor: " << Brief(layout_descriptor()); | 600 os << "\n - layout descriptor: "; |
| 601 layout_descriptor()->ShortPrint(os); |
601 } | 602 } |
602 int nof_transitions = TransitionArray::NumberOfTransitions(raw_transitions()); | 603 int nof_transitions = TransitionArray::NumberOfTransitions(raw_transitions()); |
603 if (nof_transitions > 0) { | 604 if (nof_transitions > 0) { |
604 os << "\n - transitions #" << nof_transitions << ": " | 605 os << "\n - transitions #" << nof_transitions << ": " |
605 << Brief(raw_transitions()); | 606 << Brief(raw_transitions()); |
606 TransitionArray::PrintTransitions(os, raw_transitions(), false); | 607 TransitionArray::PrintTransitions(os, raw_transitions(), false); |
607 } | 608 } |
608 os << "\n - prototype: " << Brief(prototype()); | 609 os << "\n - prototype: " << Brief(prototype()); |
609 os << "\n - constructor: " << Brief(GetConstructor()); | 610 os << "\n - constructor: " << Brief(GetConstructor()); |
610 os << "\n - code cache: " << Brief(code_cache()); | 611 os << "\n - code cache: " << Brief(code_cache()); |
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1442 } | 1443 } |
1443 } | 1444 } |
1444 | 1445 |
1445 | 1446 |
1446 void LayoutDescriptor::Print() { | 1447 void LayoutDescriptor::Print() { |
1447 OFStream os(stdout); | 1448 OFStream os(stdout); |
1448 this->Print(os); | 1449 this->Print(os); |
1449 os << std::flush; | 1450 os << std::flush; |
1450 } | 1451 } |
1451 | 1452 |
| 1453 void LayoutDescriptor::ShortPrint(std::ostream& os) { |
| 1454 if (IsSmi()) { |
| 1455 os << this; // Print tagged value for easy use with "jld" gdb macro. |
| 1456 } else { |
| 1457 os << Brief(this); |
| 1458 } |
| 1459 } |
1452 | 1460 |
1453 void LayoutDescriptor::Print(std::ostream& os) { // NOLINT | 1461 void LayoutDescriptor::Print(std::ostream& os) { // NOLINT |
1454 os << "Layout descriptor: "; | 1462 os << "Layout descriptor: "; |
1455 if (IsOddball() && IsUninitialized(HeapObject::cast(this)->GetIsolate())) { | 1463 if (IsFastPointerLayout()) { |
1456 os << "<uninitialized>"; | |
1457 } else if (IsFastPointerLayout()) { | |
1458 os << "<all tagged>"; | 1464 os << "<all tagged>"; |
1459 } else if (IsSmi()) { | 1465 } else if (IsSmi()) { |
1460 os << "fast"; | 1466 os << "fast"; |
1461 PrintBitMask(os, static_cast<uint32_t>(Smi::cast(this)->value())); | 1467 PrintBitMask(os, static_cast<uint32_t>(Smi::cast(this)->value())); |
| 1468 } else if (IsOddball() && |
| 1469 IsUninitialized(HeapObject::cast(this)->GetIsolate())) { |
| 1470 os << "<uninitialized>"; |
1462 } else { | 1471 } else { |
1463 os << "slow"; | 1472 os << "slow"; |
1464 int len = length(); | 1473 int len = length(); |
1465 for (int i = 0; i < len; i++) { | 1474 for (int i = 0; i < len; i++) { |
1466 if (i > 0) os << " |"; | 1475 if (i > 0) os << " |"; |
1467 PrintBitMask(os, get_scalar(i)); | 1476 PrintBitMask(os, get_scalar(i)); |
1468 } | 1477 } |
1469 } | 1478 } |
1470 os << "\n"; | 1479 os << "\n"; |
1471 } | 1480 } |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1631 } | 1640 } |
1632 | 1641 |
1633 extern void _v8_internal_Print_DescriptorArray(void* object) { | 1642 extern void _v8_internal_Print_DescriptorArray(void* object) { |
1634 if (reinterpret_cast<i::Object*>(object)->IsSmi()) { | 1643 if (reinterpret_cast<i::Object*>(object)->IsSmi()) { |
1635 printf("Not a descriptor array\n"); | 1644 printf("Not a descriptor array\n"); |
1636 } else { | 1645 } else { |
1637 reinterpret_cast<i::DescriptorArray*>(object)->Print(); | 1646 reinterpret_cast<i::DescriptorArray*>(object)->Print(); |
1638 } | 1647 } |
1639 } | 1648 } |
1640 | 1649 |
| 1650 extern void _v8_internal_Print_LayoutDescriptor(void* object) { |
| 1651 i::Object* o = reinterpret_cast<i::Object*>(object); |
| 1652 if (!o->IsLayoutDescriptor()) { |
| 1653 printf("Not a layout descriptor\n"); |
| 1654 } else { |
| 1655 reinterpret_cast<i::LayoutDescriptor*>(object)->Print(); |
| 1656 } |
| 1657 } |
| 1658 |
1641 extern void _v8_internal_Print_TransitionArray(void* object) { | 1659 extern void _v8_internal_Print_TransitionArray(void* object) { |
1642 if (reinterpret_cast<i::Object*>(object)->IsSmi()) { | 1660 if (reinterpret_cast<i::Object*>(object)->IsSmi()) { |
1643 printf("Not a transition array\n"); | 1661 printf("Not a transition array\n"); |
1644 } else { | 1662 } else { |
1645 reinterpret_cast<i::TransitionArray*>(object)->Print(); | 1663 reinterpret_cast<i::TransitionArray*>(object)->Print(); |
1646 } | 1664 } |
1647 } | 1665 } |
1648 | 1666 |
1649 extern void _v8_internal_Print_StackTrace() { | 1667 extern void _v8_internal_Print_StackTrace() { |
1650 i::Isolate* isolate = i::Isolate::Current(); | 1668 i::Isolate* isolate = i::Isolate::Current(); |
1651 isolate->PrintStack(stdout); | 1669 isolate->PrintStack(stdout); |
1652 } | 1670 } |
OLD | NEW |