Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/objects-printer.cc

Issue 1410023013: Objects printing improved a bit. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@fix-subclass
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "src/disasm.h" 7 #include "src/disasm.h"
8 #include "src/disassembler.h" 8 #include "src/disassembler.h"
9 #include "src/interpreter/bytecodes.h" 9 #include "src/interpreter/bytecodes.h"
10 #include "src/objects-inl.h" 10 #include "src/objects-inl.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 TYPED_ARRAYS(PRINT_FIXED_TYPED_ARRAY) 88 TYPED_ARRAYS(PRINT_FIXED_TYPED_ARRAY)
89 #undef PRINT_FIXED_TYPED_ARRAY 89 #undef PRINT_FIXED_TYPED_ARRAY
90 90
91 case FILLER_TYPE: 91 case FILLER_TYPE:
92 os << "filler"; 92 os << "filler";
93 break; 93 break;
94 case JS_OBJECT_TYPE: // fall through 94 case JS_OBJECT_TYPE: // fall through
95 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: 95 case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
96 case JS_ARRAY_TYPE: 96 case JS_ARRAY_TYPE:
97 case JS_GENERATOR_OBJECT_TYPE: 97 case JS_GENERATOR_OBJECT_TYPE:
98 JSObject::cast(this)->JSObjectPrint(os);
99 break;
98 case JS_REGEXP_TYPE: 100 case JS_REGEXP_TYPE:
99 JSObject::cast(this)->JSObjectPrint(os); 101 JSRegExp::cast(this)->JSRegExpPrint(os);
100 break; 102 break;
101 case ODDBALL_TYPE: 103 case ODDBALL_TYPE:
102 Oddball::cast(this)->to_string()->Print(os); 104 Oddball::cast(this)->to_string()->Print(os);
103 break; 105 break;
104 case JS_MODULE_TYPE: 106 case JS_MODULE_TYPE:
105 JSModule::cast(this)->JSModulePrint(os); 107 JSModule::cast(this)->JSModulePrint(os);
106 break; 108 break;
107 case JS_FUNCTION_TYPE: 109 case JS_FUNCTION_TYPE:
108 JSFunction::cast(this)->JSFunctionPrint(os); 110 JSFunction::cast(this)->JSFunctionPrint(os);
109 break; 111 break;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 void FixedTypedArray<Traits>::FixedTypedArrayPrint( 264 void FixedTypedArray<Traits>::FixedTypedArrayPrint(
263 std::ostream& os) { // NOLINT 265 std::ostream& os) { // NOLINT
264 os << "fixed " << Traits::Designator(); 266 os << "fixed " << Traits::Designator();
265 } 267 }
266 268
267 269
268 void JSObject::PrintProperties(std::ostream& os) { // NOLINT 270 void JSObject::PrintProperties(std::ostream& os) { // NOLINT
269 if (HasFastProperties()) { 271 if (HasFastProperties()) {
270 DescriptorArray* descs = map()->instance_descriptors(); 272 DescriptorArray* descs = map()->instance_descriptors();
271 for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) { 273 for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) {
272 os << " "; 274 os << "\n ";
273 descs->GetKey(i)->NamePrint(os); 275 descs->GetKey(i)->NamePrint(os);
274 os << ": "; 276 os << ": ";
275 switch (descs->GetType(i)) { 277 switch (descs->GetType(i)) {
276 case DATA: { 278 case DATA: {
277 FieldIndex index = FieldIndex::ForDescriptor(map(), i); 279 FieldIndex index = FieldIndex::ForDescriptor(map(), i);
278 if (IsUnboxedDoubleField(index)) { 280 if (IsUnboxedDoubleField(index)) {
279 os << "<unboxed double> " << RawFastDoublePropertyAt(index); 281 os << "<unboxed double> " << RawFastDoublePropertyAt(index);
280 } else { 282 } else {
281 os << Brief(RawFastPropertyAt(index)); 283 os << Brief(RawFastPropertyAt(index));
282 } 284 }
283 os << " (data field at offset " << index.property_index() << ")\n"; 285 os << " (data field at offset " << index.property_index() << ")";
284 break; 286 break;
285 } 287 }
286 case ACCESSOR: { 288 case ACCESSOR: {
287 FieldIndex index = FieldIndex::ForDescriptor(map(), i); 289 FieldIndex index = FieldIndex::ForDescriptor(map(), i);
288 os << " (accessor field at offset " << index.property_index() 290 os << " (accessor field at offset " << index.property_index() << ")";
289 << ")\n";
290 break; 291 break;
291 } 292 }
292 case DATA_CONSTANT: 293 case DATA_CONSTANT:
293 os << Brief(descs->GetConstant(i)) << " (data constant)\n"; 294 os << Brief(descs->GetConstant(i)) << " (data constant)";
294 break; 295 break;
295 case ACCESSOR_CONSTANT: 296 case ACCESSOR_CONSTANT:
296 os << Brief(descs->GetCallbacksObject(i)) << " (accessor constant)\n"; 297 os << Brief(descs->GetCallbacksObject(i)) << " (accessor constant)";
297 break; 298 break;
298 } 299 }
299 } 300 }
300 } else if (IsJSGlobalObject()) { 301 } else if (IsJSGlobalObject()) {
301 global_dictionary()->Print(os); 302 global_dictionary()->Print(os);
302 } else { 303 } else {
303 property_dictionary()->Print(os); 304 property_dictionary()->Print(os);
304 } 305 }
305 } 306 }
306 307
307 308
308 template <class T> 309 template <class T>
309 static void DoPrintElements(std::ostream& os, Object* object) { // NOLINT 310 static void DoPrintElements(std::ostream& os, Object* object) { // NOLINT
310 T* p = T::cast(object); 311 T* p = T::cast(object);
311 for (int i = 0; i < p->length(); i++) { 312 for (int i = 0; i < p->length(); i++) {
312 os << " " << i << ": " << p->get_scalar(i) << "\n"; 313 os << "\n " << i << ": " << p->get_scalar(i);
313 } 314 }
314 } 315 }
315 316
316 317
317 void JSObject::PrintElements(std::ostream& os) { // NOLINT 318 void JSObject::PrintElements(std::ostream& os) { // NOLINT
318 // Don't call GetElementsKind, its validation code can cause the printer to 319 // Don't call GetElementsKind, its validation code can cause the printer to
319 // fail when debugging. 320 // fail when debugging.
320 switch (map()->elements_kind()) { 321 switch (map()->elements_kind()) {
321 case FAST_HOLEY_SMI_ELEMENTS: 322 case FAST_HOLEY_SMI_ELEMENTS:
322 case FAST_SMI_ELEMENTS: 323 case FAST_SMI_ELEMENTS:
323 case FAST_HOLEY_ELEMENTS: 324 case FAST_HOLEY_ELEMENTS:
324 case FAST_ELEMENTS: { 325 case FAST_ELEMENTS: {
325 // Print in array notation for non-sparse arrays. 326 // Print in array notation for non-sparse arrays.
326 FixedArray* p = FixedArray::cast(elements()); 327 FixedArray* p = FixedArray::cast(elements());
327 for (int i = 0; i < p->length(); i++) { 328 for (int i = 0; i < p->length(); i++) {
328 os << " " << i << ": " << Brief(p->get(i)) << "\n"; 329 os << "\n " << i << ": " << Brief(p->get(i));
329 } 330 }
330 break; 331 break;
331 } 332 }
332 case FAST_HOLEY_DOUBLE_ELEMENTS: 333 case FAST_HOLEY_DOUBLE_ELEMENTS:
333 case FAST_DOUBLE_ELEMENTS: { 334 case FAST_DOUBLE_ELEMENTS: {
334 // Print in array notation for non-sparse arrays. 335 // Print in array notation for non-sparse arrays.
335 if (elements()->length() > 0) { 336 if (elements()->length() > 0) {
336 FixedDoubleArray* p = FixedDoubleArray::cast(elements()); 337 FixedDoubleArray* p = FixedDoubleArray::cast(elements());
337 for (int i = 0; i < p->length(); i++) { 338 for (int i = 0; i < p->length(); i++) {
338 os << " " << i << ": "; 339 os << "\n " << i << ": ";
339 if (p->is_the_hole(i)) { 340 if (p->is_the_hole(i)) {
340 os << "<the hole>"; 341 os << "<the hole>";
341 } else { 342 } else {
342 os << p->get_scalar(i); 343 os << p->get_scalar(i);
343 } 344 }
344 os << "\n";
345 } 345 }
346 } 346 }
347 break; 347 break;
348 } 348 }
349 349
350 350
351 #define PRINT_ELEMENTS(Kind, Type) \ 351 #define PRINT_ELEMENTS(Kind, Type) \
352 case Kind: { \ 352 case Kind: { \
353 DoPrintElements<Type>(os, elements()); \ 353 DoPrintElements<Type>(os, elements()); \
354 break; \ 354 break; \
(...skipping 10 matching lines...) Expand all
365 PRINT_ELEMENTS(FLOAT64_ELEMENTS, FixedFloat64Array) 365 PRINT_ELEMENTS(FLOAT64_ELEMENTS, FixedFloat64Array)
366 366
367 #undef PRINT_ELEMENTS 367 #undef PRINT_ELEMENTS
368 368
369 case DICTIONARY_ELEMENTS: 369 case DICTIONARY_ELEMENTS:
370 elements()->Print(os); 370 elements()->Print(os);
371 break; 371 break;
372 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 372 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
373 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: { 373 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: {
374 FixedArray* p = FixedArray::cast(elements()); 374 FixedArray* p = FixedArray::cast(elements());
375 os << " parameter map:"; 375 os << "\n parameter map:";
376 for (int i = 2; i < p->length(); i++) { 376 for (int i = 2; i < p->length(); i++) {
377 os << " " << (i - 2) << ":" << Brief(p->get(i)); 377 os << " " << (i - 2) << ":" << Brief(p->get(i));
378 } 378 }
379 os << "\n context: " << Brief(p->get(0)) 379 os << "\n context: " << Brief(p->get(0))
380 << "\n arguments: " << Brief(p->get(1)) << "\n"; 380 << "\n arguments: " << Brief(p->get(1));
381 break; 381 break;
382 } 382 }
383 } 383 }
384 } 384 }
385 385
386 386
387 static void JSObjectPrintHeader(std::ostream& os, JSObject* obj, 387 static void JSObjectPrintHeader(std::ostream& os, JSObject* obj,
388 const char* id) { // NOLINT 388 const char* id) { // NOLINT
389 obj->PrintHeader(os, id); 389 obj->PrintHeader(os, id);
390 // Don't call GetElementsKind, its validation code can cause the printer to 390 // Don't call GetElementsKind, its validation code can cause the printer to
391 // fail when debugging. 391 // fail when debugging.
392 PrototypeIterator iter(obj->GetIsolate(), obj); 392 PrototypeIterator iter(obj->GetIsolate(), obj);
393 os << " - map = " << reinterpret_cast<void*>(obj->map()) << " [" 393 os << " - map = " << reinterpret_cast<void*>(obj->map()) << " ["
394 << ElementsKindToString(obj->map()->elements_kind()) 394 << ElementsKindToString(obj->map()->elements_kind())
395 << "]\n - prototype = " << reinterpret_cast<void*>(iter.GetCurrent()); 395 << "]\n - prototype = " << reinterpret_cast<void*>(iter.GetCurrent());
396 } 396 }
397 397
398 398
399 static void JSObjectPrintBody(std::ostream& os, JSObject* obj) { // NOLINT 399 static void JSObjectPrintBody(std::ostream& os, JSObject* obj, // NOLINT
400 os << "\n {\n"; 400 bool print_elements = true) {
401 os << "\n {";
401 obj->PrintProperties(os); 402 obj->PrintProperties(os);
402 obj->PrintTransitions(os); 403 obj->PrintTransitions(os);
403 obj->PrintElements(os); 404 if (print_elements) obj->PrintElements(os);
404 os << " }\n"; 405 os << "\n }\n";
405 } 406 }
406 407
407 408
408 void JSObject::JSObjectPrint(std::ostream& os) { // NOLINT 409 void JSObject::JSObjectPrint(std::ostream& os) { // NOLINT
409 JSObjectPrintHeader(os, this, "JSObject"); 410 JSObjectPrintHeader(os, this, "JSObject");
410 JSObjectPrintBody(os, this); 411 JSObjectPrintBody(os, this);
411 } 412 }
412 413
413 414
415 void JSRegExp::JSRegExpPrint(std::ostream& os) { // NOLINT
416 JSObjectPrintHeader(os, this, "JSRegExp");
417 os << "\n - data = " << Brief(data());
418 JSObjectPrintBody(os, this);
419 }
420
421
414 void JSModule::JSModulePrint(std::ostream& os) { // NOLINT 422 void JSModule::JSModulePrint(std::ostream& os) { // NOLINT
415 HeapObject::PrintHeader(os, "JSModule"); 423 JSObjectPrintHeader(os, this, "JSModule");
416 os << " - map = " << reinterpret_cast<void*>(map()) << "\n" 424 os << "\n - context = " << Brief(context());
417 << " - context = "; 425 os << " - scope_info = " << Brief(scope_info());
418 context()->Print(os); 426 JSObjectPrintBody(os, this);
419 os << " - scope_info = " << Brief(scope_info())
420 << ElementsKindToString(this->map()->elements_kind()) << " {\n";
421 PrintProperties(os);
422 PrintElements(os);
423 os << " }\n";
424 } 427 }
425 428
426 429
427 static const char* TypeToString(InstanceType type) { 430 static const char* TypeToString(InstanceType type) {
428 switch (type) { 431 switch (type) {
429 #define TYPE_TO_STRING(TYPE) case TYPE: return #TYPE; 432 #define TYPE_TO_STRING(TYPE) case TYPE: return #TYPE;
430 INSTANCE_TYPE_LIST(TYPE_TO_STRING) 433 INSTANCE_TYPE_LIST(TYPE_TO_STRING)
431 #undef TYPE_TO_STRING 434 #undef TYPE_TO_STRING
432 } 435 }
433 UNREACHABLE(); 436 UNREACHABLE();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 os << " - prototype info: " << Brief(prototype_info()); 477 os << " - prototype info: " << Brief(prototype_info());
475 } else { 478 } else {
476 os << " - back pointer: " << Brief(GetBackPointer()); 479 os << " - back pointer: " << Brief(GetBackPointer());
477 } 480 }
478 os << "\n - instance descriptors " << (owns_descriptors() ? "(own) " : "") 481 os << "\n - instance descriptors " << (owns_descriptors() ? "(own) " : "")
479 << "#" << NumberOfOwnDescriptors() << ": " 482 << "#" << NumberOfOwnDescriptors() << ": "
480 << Brief(instance_descriptors()); 483 << Brief(instance_descriptors());
481 if (FLAG_unbox_double_fields) { 484 if (FLAG_unbox_double_fields) {
482 os << "\n - layout descriptor: " << Brief(layout_descriptor()); 485 os << "\n - layout descriptor: " << Brief(layout_descriptor());
483 } 486 }
484 if (TransitionArray::NumberOfTransitions(raw_transitions()) > 0) { 487 int nof_transitions = TransitionArray::NumberOfTransitions(raw_transitions());
485 os << "\n - transitions: "; 488 if (nof_transitions > 0) {
486 TransitionArray::PrintTransitions(os, raw_transitions()); 489 os << "\n - transitions #" << nof_transitions << ": "
490 << Brief(raw_transitions());
491 TransitionArray::PrintTransitions(os, raw_transitions(), false);
487 } 492 }
488 os << "\n - prototype: " << Brief(prototype()); 493 os << "\n - prototype: " << Brief(prototype());
489 os << "\n - constructor: " << Brief(GetConstructor()); 494 os << "\n - constructor: " << Brief(GetConstructor());
490 os << "\n - code cache: " << Brief(code_cache()); 495 os << "\n - code cache: " << Brief(code_cache());
491 os << "\n - dependent code: " << Brief(dependent_code()); 496 os << "\n - dependent code: " << Brief(dependent_code());
492 os << "\n"; 497 os << "\n";
493 } 498 }
494 499
495 500
496 void CodeCache::CodeCachePrint(std::ostream& os) { // NOLINT 501 void CodeCache::CodeCachePrint(std::ostream& os) { // NOLINT
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 } 702 }
698 } 703 }
699 704
700 705
701 static const char* const weekdays[] = { 706 static const char* const weekdays[] = {
702 "???", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" 707 "???", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
703 }; 708 };
704 709
705 710
706 void JSDate::JSDatePrint(std::ostream& os) { // NOLINT 711 void JSDate::JSDatePrint(std::ostream& os) { // NOLINT
707 HeapObject::PrintHeader(os, "JSDate"); 712 JSObjectPrintHeader(os, this, "JSDate");
708 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 713 os << "\n - value = " << Brief(value());
709 os << " - value = ";
710 value()->Print(os);
711 if (!year()->IsSmi()) { 714 if (!year()->IsSmi()) {
712 os << " - time = NaN\n"; 715 os << "\n - time = NaN\n";
713 } else { 716 } else {
714 // TODO(svenpanne) Add some basic formatting to our streams. 717 // TODO(svenpanne) Add some basic formatting to our streams.
715 ScopedVector<char> buf(100); 718 ScopedVector<char> buf(100);
716 SNPrintF( 719 SNPrintF(
717 buf, " - time = %s %04d/%02d/%02d %02d:%02d:%02d\n", 720 buf, "\n - time = %s %04d/%02d/%02d %02d:%02d:%02d\n",
718 weekdays[weekday()->IsSmi() ? Smi::cast(weekday())->value() + 1 : 0], 721 weekdays[weekday()->IsSmi() ? Smi::cast(weekday())->value() + 1 : 0],
719 year()->IsSmi() ? Smi::cast(year())->value() : -1, 722 year()->IsSmi() ? Smi::cast(year())->value() : -1,
720 month()->IsSmi() ? Smi::cast(month())->value() : -1, 723 month()->IsSmi() ? Smi::cast(month())->value() : -1,
721 day()->IsSmi() ? Smi::cast(day())->value() : -1, 724 day()->IsSmi() ? Smi::cast(day())->value() : -1,
722 hour()->IsSmi() ? Smi::cast(hour())->value() : -1, 725 hour()->IsSmi() ? Smi::cast(hour())->value() : -1,
723 min()->IsSmi() ? Smi::cast(min())->value() : -1, 726 min()->IsSmi() ? Smi::cast(min())->value() : -1,
724 sec()->IsSmi() ? Smi::cast(sec())->value() : -1); 727 sec()->IsSmi() ? Smi::cast(sec())->value() : -1);
725 os << buf.start(); 728 os << buf.start();
726 } 729 }
730 JSObjectPrintBody(os, this);
727 } 731 }
728 732
729 733
730 void JSProxy::JSProxyPrint(std::ostream& os) { // NOLINT 734 void JSProxy::JSProxyPrint(std::ostream& os) { // NOLINT
731 HeapObject::PrintHeader(os, "JSProxy"); 735 HeapObject::PrintHeader(os, "JSProxy");
732 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 736 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
733 os << " - handler = "; 737 os << " - handler = ";
734 handler()->Print(os); 738 handler()->Print(os);
735 os << "\n - hash = "; 739 os << "\n - hash = ";
736 hash()->Print(os); 740 hash()->Print(os);
737 os << "\n"; 741 os << "\n";
738 } 742 }
739 743
740 744
741 void JSFunctionProxy::JSFunctionProxyPrint(std::ostream& os) { // NOLINT 745 void JSFunctionProxy::JSFunctionProxyPrint(std::ostream& os) { // NOLINT
742 HeapObject::PrintHeader(os, "JSFunctionProxy"); 746 HeapObject::PrintHeader(os, "JSFunctionProxy");
743 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 747 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
744 os << " - handler = "; 748 os << " - handler = ";
745 handler()->Print(os); 749 handler()->Print(os);
746 os << "\n - call_trap = "; 750 os << "\n - call_trap = ";
747 call_trap()->Print(os); 751 call_trap()->Print(os);
748 os << "\n - construct_trap = "; 752 os << "\n - construct_trap = ";
749 construct_trap()->Print(os); 753 construct_trap()->Print(os);
750 os << "\n"; 754 os << "\n";
751 } 755 }
752 756
753 757
754 void JSSet::JSSetPrint(std::ostream& os) { // NOLINT 758 void JSSet::JSSetPrint(std::ostream& os) { // NOLINT
755 HeapObject::PrintHeader(os, "JSSet"); 759 JSObjectPrintHeader(os, this, "JSSet");
756 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
757 os << " - table = " << Brief(table()); 760 os << " - table = " << Brief(table());
758 os << "\n"; 761 JSObjectPrintBody(os, this);
759 } 762 }
760 763
761 764
762 void JSMap::JSMapPrint(std::ostream& os) { // NOLINT 765 void JSMap::JSMapPrint(std::ostream& os) { // NOLINT
763 HeapObject::PrintHeader(os, "JSMap"); 766 JSObjectPrintHeader(os, this, "JSMap");
764 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
765 os << " - table = " << Brief(table()); 767 os << " - table = " << Brief(table());
766 os << "\n"; 768 JSObjectPrintBody(os, this);
767 } 769 }
768 770
769 771
770 template <class Derived, class TableType> 772 template <class Derived, class TableType>
771 void 773 void
772 OrderedHashTableIterator<Derived, TableType>::OrderedHashTableIteratorPrint( 774 OrderedHashTableIterator<Derived, TableType>::OrderedHashTableIteratorPrint(
773 std::ostream& os) { // NOLINT 775 std::ostream& os) { // NOLINT
774 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 776 os << "\n - table = " << Brief(table());
775 os << " - table = " << Brief(table());
776 os << "\n - index = " << Brief(index()); 777 os << "\n - index = " << Brief(index());
777 os << "\n - kind = " << Brief(kind()); 778 os << "\n - kind = " << Brief(kind());
778 os << "\n"; 779 os << "\n";
779 } 780 }
780 781
781 782
782 template void OrderedHashTableIterator< 783 template void OrderedHashTableIterator<
783 JSSetIterator, 784 JSSetIterator,
784 OrderedHashSet>::OrderedHashTableIteratorPrint(std::ostream& os); // NOLINT 785 OrderedHashSet>::OrderedHashTableIteratorPrint(std::ostream& os); // NOLINT
785 786
786 787
787 template void OrderedHashTableIterator< 788 template void OrderedHashTableIterator<
788 JSMapIterator, 789 JSMapIterator,
789 OrderedHashMap>::OrderedHashTableIteratorPrint(std::ostream& os); // NOLINT 790 OrderedHashMap>::OrderedHashTableIteratorPrint(std::ostream& os); // NOLINT
790 791
791 792
792 void JSSetIterator::JSSetIteratorPrint(std::ostream& os) { // NOLINT 793 void JSSetIterator::JSSetIteratorPrint(std::ostream& os) { // NOLINT
793 HeapObject::PrintHeader(os, "JSSetIterator"); 794 JSObjectPrintHeader(os, this, "JSSetIterator");
794 OrderedHashTableIteratorPrint(os); 795 OrderedHashTableIteratorPrint(os);
795 } 796 }
796 797
797 798
798 void JSMapIterator::JSMapIteratorPrint(std::ostream& os) { // NOLINT 799 void JSMapIterator::JSMapIteratorPrint(std::ostream& os) { // NOLINT
799 HeapObject::PrintHeader(os, "JSMapIterator"); 800 JSObjectPrintHeader(os, this, "JSMapIterator");
800 OrderedHashTableIteratorPrint(os); 801 OrderedHashTableIteratorPrint(os);
801 } 802 }
802 803
803 804
804 void JSIteratorResult::JSIteratorResultPrint(std::ostream& os) { // NOLINT 805 void JSIteratorResult::JSIteratorResultPrint(std::ostream& os) { // NOLINT
805 HeapObject::PrintHeader(os, "JSIteratorResult"); 806 JSObjectPrintHeader(os, this, "JSIteratorResult");
806 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 807 os << "\n - done = " << Brief(done());
807 os << " - done = " << Brief(done()) << "\n"; 808 os << "\n - value = " << Brief(value());
808 os << " - value = " << Brief(value()) << "\n";
809 os << "\n"; 809 os << "\n";
810 } 810 }
811 811
812 812
813 void JSWeakMap::JSWeakMapPrint(std::ostream& os) { // NOLINT 813 void JSWeakMap::JSWeakMapPrint(std::ostream& os) { // NOLINT
814 HeapObject::PrintHeader(os, "JSWeakMap"); 814 JSObjectPrintHeader(os, this, "JSWeakMap");
815 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 815 os << "\n - table = " << Brief(table());
816 os << " - table = " << Brief(table()); 816 JSObjectPrintBody(os, this);
817 os << "\n";
818 } 817 }
819 818
820 819
821 void JSWeakSet::JSWeakSetPrint(std::ostream& os) { // NOLINT 820 void JSWeakSet::JSWeakSetPrint(std::ostream& os) { // NOLINT
822 HeapObject::PrintHeader(os, "JSWeakSet"); 821 JSObjectPrintHeader(os, this, "JSWeakSet");
823 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 822 os << "\n - table = " << Brief(table());
824 os << " - table = " << Brief(table()); 823 JSObjectPrintBody(os, this);
825 os << "\n";
826 } 824 }
827 825
828 826
829 void JSArrayBuffer::JSArrayBufferPrint(std::ostream& os) { // NOLINT 827 void JSArrayBuffer::JSArrayBufferPrint(std::ostream& os) { // NOLINT
830 HeapObject::PrintHeader(os, "JSArrayBuffer"); 828 JSObjectPrintHeader(os, this, "JSArrayBuffer");
831 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 829 os << "\n - backing_store = " << backing_store();
832 os << " - backing_store = " << backing_store() << "\n"; 830 os << "\n - byte_length = " << Brief(byte_length());
833 os << " - byte_length = " << Brief(byte_length());
834 if (was_neutered()) os << " - neutered\n"; 831 if (was_neutered()) os << " - neutered\n";
835 os << "\n"; 832 JSObjectPrintBody(os, this, !was_neutered());
836 } 833 }
837 834
838 835
839 void JSTypedArray::JSTypedArrayPrint(std::ostream& os) { // NOLINT 836 void JSTypedArray::JSTypedArrayPrint(std::ostream& os) { // NOLINT
840 HeapObject::PrintHeader(os, "JSTypedArray"); 837 JSObjectPrintHeader(os, this, "JSTypedArray");
841 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 838 os << "\n - buffer = " << Brief(buffer());
842 os << " - buffer = " << Brief(buffer());
843 os << "\n - byte_offset = " << Brief(byte_offset()); 839 os << "\n - byte_offset = " << Brief(byte_offset());
844 os << "\n - byte_length = " << Brief(byte_length()); 840 os << "\n - byte_length = " << Brief(byte_length());
845 os << "\n - length = " << Brief(length()); 841 os << "\n - length = " << Brief(length());
846 if (WasNeutered()) os << " - neutered\n"; 842 if (WasNeutered()) os << " - neutered\n";
847 os << "\n"; 843 JSObjectPrintBody(os, this, !WasNeutered());
848 if (!WasNeutered()) PrintElements(os);
849 } 844 }
850 845
851 846
852 void JSDataView::JSDataViewPrint(std::ostream& os) { // NOLINT 847 void JSDataView::JSDataViewPrint(std::ostream& os) { // NOLINT
853 HeapObject::PrintHeader(os, "JSDataView"); 848 JSObjectPrintHeader(os, this, "JSDataView");
854 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 849 os << "\n - buffer =" << Brief(buffer());
855 os << " - buffer =" << Brief(buffer());
856 os << "\n - byte_offset = " << Brief(byte_offset()); 850 os << "\n - byte_offset = " << Brief(byte_offset());
857 os << "\n - byte_length = " << Brief(byte_length()); 851 os << "\n - byte_length = " << Brief(byte_length());
858 if (WasNeutered()) os << " - neutered\n"; 852 if (WasNeutered()) os << " - neutered\n";
859 os << "\n"; 853 JSObjectPrintBody(os, this, !WasNeutered());
860 } 854 }
861 855
862 856
863 void JSFunction::JSFunctionPrint(std::ostream& os) { // NOLINT 857 void JSFunction::JSFunctionPrint(std::ostream& os) { // NOLINT
864 HeapObject::PrintHeader(os, "Function"); 858 JSObjectPrintHeader(os, this, "Function");
865 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"; 859 os << "\n - initial_map = ";
866 os << " - initial_map = ";
867 if (has_initial_map()) os << Brief(initial_map()); 860 if (has_initial_map()) os << Brief(initial_map());
868 os << "\n - shared_info = " << Brief(shared()); 861 os << "\n - shared_info = " << Brief(shared());
869 os << "\n - name = " << Brief(shared()->name()); 862 os << "\n - name = " << Brief(shared()->name());
870 os << "\n - context = " << Brief(context()); 863 os << "\n - context = " << Brief(context());
871 if (shared()->bound()) { 864 if (shared()->bound()) {
872 os << "\n - bindings = " << Brief(function_bindings()); 865 os << "\n - bindings = " << Brief(function_bindings());
873 } else { 866 } else {
874 os << "\n - literals = " << Brief(literals()); 867 os << "\n - literals = " << Brief(literals());
875 } 868 }
876 os << "\n - code = " << Brief(code()); 869 os << "\n - code = " << Brief(code());
877 os << "\n"; 870 JSObjectPrintBody(os, this);
878 PrintProperties(os);
879 PrintElements(os);
880 os << "\n";
881 } 871 }
882 872
883 873
884 void SharedFunctionInfo::SharedFunctionInfoPrint(std::ostream& os) { // NOLINT 874 void SharedFunctionInfo::SharedFunctionInfoPrint(std::ostream& os) { // NOLINT
885 HeapObject::PrintHeader(os, "SharedFunctionInfo"); 875 HeapObject::PrintHeader(os, "SharedFunctionInfo");
886 os << " - name: " << Brief(name()); 876 os << " - name: " << Brief(name());
887 os << "\n - expected_nof_properties: " << expected_nof_properties(); 877 os << "\n - expected_nof_properties: " << expected_nof_properties();
888 os << "\n - ast_node_count: " << ast_node_count(); 878 os << "\n - ast_node_count: " << ast_node_count();
889 os << "\n - instance class name = "; 879 os << "\n - instance class name = ";
890 instance_class_name()->Print(os); 880 instance_class_name()->Print(os);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 void JSGlobalObject::JSGlobalObjectPrint(std::ostream& os) { // NOLINT 918 void JSGlobalObject::JSGlobalObjectPrint(std::ostream& os) { // NOLINT
929 os << "global "; 919 os << "global ";
930 JSObjectPrint(os); 920 JSObjectPrint(os);
931 os << "native context : " << Brief(native_context()); 921 os << "native context : " << Brief(native_context());
932 os << "\n"; 922 os << "\n";
933 } 923 }
934 924
935 925
936 void Cell::CellPrint(std::ostream& os) { // NOLINT 926 void Cell::CellPrint(std::ostream& os) { // NOLINT
937 HeapObject::PrintHeader(os, "Cell"); 927 HeapObject::PrintHeader(os, "Cell");
928 os << " - value: " << Brief(value());
929 os << "\n";
938 } 930 }
939 931
940 932
941 void PropertyCell::PropertyCellPrint(std::ostream& os) { // NOLINT 933 void PropertyCell::PropertyCellPrint(std::ostream& os) { // NOLINT
942 HeapObject::PrintHeader(os, "PropertyCell"); 934 HeapObject::PrintHeader(os, "PropertyCell");
935 os << " - value: " << Brief(value());
936 os << "\n - details: " << property_details();
937 os << "\n";
943 } 938 }
944 939
945 940
946 void WeakCell::WeakCellPrint(std::ostream& os) { // NOLINT 941 void WeakCell::WeakCellPrint(std::ostream& os) { // NOLINT
947 HeapObject::PrintHeader(os, "WeakCell"); 942 HeapObject::PrintHeader(os, "WeakCell");
948 if (cleared()) { 943 if (cleared()) {
949 os << "\n - cleared"; 944 os << "\n - cleared";
950 } else { 945 } else {
951 os << "\n - value: " << Brief(value()); 946 os << "\n - value: " << Brief(value());
952 } 947 }
948 os << "\n";
953 } 949 }
954 950
955 951
956 void Code::CodePrint(std::ostream& os) { // NOLINT 952 void Code::CodePrint(std::ostream& os) { // NOLINT
957 HeapObject::PrintHeader(os, "Code"); 953 HeapObject::PrintHeader(os, "Code");
958 #ifdef ENABLE_DISASSEMBLER 954 #ifdef ENABLE_DISASSEMBLER
959 if (FLAG_use_verbose_printer) { 955 if (FLAG_use_verbose_printer) {
960 Disassemble(NULL, os); 956 Disassemble(NULL, os);
961 } 957 }
962 #endif 958 #endif
963 } 959 }
964 960
965 961
966 void Foreign::ForeignPrint(std::ostream& os) { // NOLINT 962 void Foreign::ForeignPrint(std::ostream& os) { // NOLINT
967 os << "foreign address : " << foreign_address(); 963 os << "foreign address : " << foreign_address();
964 os << "\n";
968 } 965 }
969 966
970 967
971 void ExecutableAccessorInfo::ExecutableAccessorInfoPrint( 968 void ExecutableAccessorInfo::ExecutableAccessorInfoPrint(
972 std::ostream& os) { // NOLINT 969 std::ostream& os) { // NOLINT
973 HeapObject::PrintHeader(os, "ExecutableAccessorInfo"); 970 HeapObject::PrintHeader(os, "ExecutableAccessorInfo");
974 os << "\n - name: " << Brief(name()); 971 os << "\n - name: " << Brief(name());
975 os << "\n - flag: " << flag(); 972 os << "\n - flag: " << flag();
976 os << "\n - getter: " << Brief(getter()); 973 os << "\n - getter: " << Brief(getter());
977 os << "\n - setter: " << Brief(setter()); 974 os << "\n - setter: " << Brief(setter());
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 1251
1255 void DescriptorArray::Print() { 1252 void DescriptorArray::Print() {
1256 OFStream os(stdout); 1253 OFStream os(stdout);
1257 this->PrintDescriptors(os); 1254 this->PrintDescriptors(os);
1258 os << std::flush; 1255 os << std::flush;
1259 } 1256 }
1260 1257
1261 1258
1262 void DescriptorArray::PrintDescriptors(std::ostream& os) { // NOLINT 1259 void DescriptorArray::PrintDescriptors(std::ostream& os) { // NOLINT
1263 HandleScope scope(GetIsolate()); 1260 HandleScope scope(GetIsolate());
1264 os << "Descriptor array " << number_of_descriptors() << "\n"; 1261 os << "Descriptor array #" << number_of_descriptors();
1265 for (int i = 0; i < number_of_descriptors(); i++) { 1262 for (int i = 0; i < number_of_descriptors(); i++) {
1266 Descriptor desc; 1263 Descriptor desc;
1267 Get(i, &desc); 1264 Get(i, &desc);
1268 os << " " << i << ": " << desc << "\n"; 1265 os << "\n " << i << ": " << desc;
1269 } 1266 }
1270 os << "\n"; 1267 os << "\n";
1271 } 1268 }
1272 1269
1273 1270
1274 void TransitionArray::Print() { 1271 void TransitionArray::Print() {
1275 OFStream os(stdout); 1272 OFStream os(stdout);
1276 TransitionArray::PrintTransitions(os, this); 1273 TransitionArray::PrintTransitions(os, this);
1277 os << std::flush; 1274 os << "\n" << std::flush;
1278 } 1275 }
1279 1276
1280 1277
1281 void TransitionArray::PrintTransitions(std::ostream& os, Object* transitions, 1278 void TransitionArray::PrintTransitions(std::ostream& os, Object* transitions,
1282 bool print_header) { // NOLINT 1279 bool print_header) { // NOLINT
1283 int num_transitions = NumberOfTransitions(transitions); 1280 int num_transitions = NumberOfTransitions(transitions);
1284 if (print_header) { 1281 if (print_header) {
1285 os << "Transition array " << num_transitions << "\n"; 1282 os << "Transition array #" << num_transitions << ":";
1286 } 1283 }
1287 for (int i = 0; i < num_transitions; i++) { 1284 for (int i = 0; i < num_transitions; i++) {
1288 Name* key = GetKey(transitions, i); 1285 Name* key = GetKey(transitions, i);
1289 Map* target = GetTarget(transitions, i); 1286 Map* target = GetTarget(transitions, i);
1290 os << " "; 1287 os << "\n ";
1291 #ifdef OBJECT_PRINT 1288 #ifdef OBJECT_PRINT
1292 key->NamePrint(os); 1289 key->NamePrint(os);
1293 #else 1290 #else
1294 key->ShortPrint(os); 1291 key->ShortPrint(os);
1295 #endif 1292 #endif
1296 os << ": "; 1293 os << ": ";
1297 Heap* heap = key->GetHeap(); 1294 Heap* heap = key->GetHeap();
1298 if (key == heap->nonextensible_symbol()) { 1295 if (key == heap->nonextensible_symbol()) {
1299 os << " (transition to non-extensible)"; 1296 os << "(transition to non-extensible)";
1300 } else if (key == heap->sealed_symbol()) { 1297 } else if (key == heap->sealed_symbol()) {
1301 os << " (transition to sealed)"; 1298 os << "(transition to sealed)";
1302 } else if (key == heap->frozen_symbol()) { 1299 } else if (key == heap->frozen_symbol()) {
1303 os << " (transition to frozen)"; 1300 os << "(transition to frozen)";
1304 } else if (key == heap->elements_transition_symbol()) { 1301 } else if (key == heap->elements_transition_symbol()) {
1305 os << " (transition to " << ElementsKindToString(target->elements_kind()) 1302 os << "(transition to " << ElementsKindToString(target->elements_kind())
1306 << ")"; 1303 << ")";
1307 } else if (key == heap->observed_symbol()) { 1304 } else if (key == heap->observed_symbol()) {
1308 os << " (transition to Object.observe)"; 1305 os << " (transition to Object.observe)";
1309 } else { 1306 } else {
1310 PropertyDetails details = GetTargetDetails(key, target); 1307 PropertyDetails details = GetTargetDetails(key, target);
1311 os << " (transition to "; 1308 os << "(transition to ";
1312 if (details.location() == kDescriptor) { 1309 if (details.location() == kDescriptor) {
1313 os << "immutable "; 1310 os << "immutable ";
1314 } 1311 }
1315 os << (details.kind() == kData ? "data" : "accessor"); 1312 os << (details.kind() == kData ? "data" : "accessor");
1316 if (details.location() == kDescriptor) { 1313 if (details.location() == kDescriptor) {
1317 Object* value = 1314 Object* value =
1318 target->instance_descriptors()->GetValue(target->LastAdded()); 1315 target->instance_descriptors()->GetValue(target->LastAdded());
1319 os << " " << Brief(value); 1316 os << " " << Brief(value);
1320 } 1317 }
1321 os << "), attrs: " << details.attributes(); 1318 os << "), attrs: " << details.attributes();
1322 } 1319 }
1323 os << " -> " << Brief(target) << "\n"; 1320 os << " -> " << Brief(target);
1324 } 1321 }
1325 } 1322 }
1326 1323
1327 1324
1328 void JSObject::PrintTransitions(std::ostream& os) { // NOLINT 1325 void JSObject::PrintTransitions(std::ostream& os) { // NOLINT
1329 TransitionArray::PrintTransitions(os, map()->raw_transitions()); 1326 Object* transitions = map()->raw_transitions();
1327 int num_transitions = TransitionArray::NumberOfTransitions(transitions);
1328 if (num_transitions == 0) return;
1329 os << "\n - transitions";
1330 TransitionArray::PrintTransitions(os, transitions, false);
1330 } 1331 }
1331 #endif // defined(DEBUG) || defined(OBJECT_PRINT) 1332 #endif // defined(DEBUG) || defined(OBJECT_PRINT)
1332 } // namespace internal 1333 } // namespace internal
1333 } // namespace v8 1334 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698