| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 return; | 75 return; |
| 76 } | 76 } |
| 77 | 77 |
| 78 switch (instance_type) { | 78 switch (instance_type) { |
| 79 case MAP_TYPE: | 79 case MAP_TYPE: |
| 80 Map::cast(this)->MapPrint(out); | 80 Map::cast(this)->MapPrint(out); |
| 81 break; | 81 break; |
| 82 case HEAP_NUMBER_TYPE: | 82 case HEAP_NUMBER_TYPE: |
| 83 HeapNumber::cast(this)->HeapNumberPrint(out); | 83 HeapNumber::cast(this)->HeapNumberPrint(out); |
| 84 break; | 84 break; |
| 85 case FIXED_DOUBLE_ARRAY_TYPE: |
| 86 FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(out); |
| 87 break; |
| 85 case FIXED_ARRAY_TYPE: | 88 case FIXED_ARRAY_TYPE: |
| 86 FixedArray::cast(this)->FixedArrayPrint(out); | 89 FixedArray::cast(this)->FixedArrayPrint(out); |
| 87 break; | 90 break; |
| 88 case BYTE_ARRAY_TYPE: | 91 case BYTE_ARRAY_TYPE: |
| 89 ByteArray::cast(this)->ByteArrayPrint(out); | 92 ByteArray::cast(this)->ByteArrayPrint(out); |
| 90 break; | 93 break; |
| 91 case FREE_SPACE_TYPE: | 94 case FREE_SPACE_TYPE: |
| 92 FreeSpace::cast(this)->FreeSpacePrint(out); | 95 FreeSpace::cast(this)->FreeSpacePrint(out); |
| 93 break; | 96 break; |
| 94 case EXTERNAL_PIXEL_ARRAY_TYPE: | 97 case EXTERNAL_PIXEL_ARRAY_TYPE: |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 | 237 |
| 235 void ExternalFloatArray::ExternalFloatArrayPrint(FILE* out) { | 238 void ExternalFloatArray::ExternalFloatArrayPrint(FILE* out) { |
| 236 PrintF(out, "external float array"); | 239 PrintF(out, "external float array"); |
| 237 } | 240 } |
| 238 | 241 |
| 239 | 242 |
| 240 void ExternalDoubleArray::ExternalDoubleArrayPrint(FILE* out) { | 243 void ExternalDoubleArray::ExternalDoubleArrayPrint(FILE* out) { |
| 241 PrintF(out, "external double array"); | 244 PrintF(out, "external double array"); |
| 242 } | 245 } |
| 243 | 246 |
| 247 static void PrintElementsKind(FILE* out, ElementsKind kind) { |
| 248 switch (kind) { |
| 249 case FAST_SMI_ONLY_ELEMENTS: |
| 250 PrintF(out, "FAST_SMI_ONLY_ELEMENTS"); |
| 251 break; |
| 252 case FAST_ELEMENTS: |
| 253 PrintF(out, "FAST_ELEMENTS"); |
| 254 break; |
| 255 case FAST_DOUBLE_ELEMENTS: |
| 256 PrintF(out, "FAST_DOUBLE_ELEMENTS"); |
| 257 break; |
| 258 case DICTIONARY_ELEMENTS: |
| 259 PrintF(out, "DICTIONARY_ELEMENTS"); |
| 260 break; |
| 261 case NON_STRICT_ARGUMENTS_ELEMENTS: |
| 262 PrintF(out, "NON_STRICT_ARGUMENTS_ELEMENTS"); |
| 263 break; |
| 264 case EXTERNAL_BYTE_ELEMENTS: |
| 265 PrintF(out, "EXTERNAL_BYTE_ELEMENTS"); |
| 266 break; |
| 267 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
| 268 PrintF(out, "EXTERNAL_UNSIGNED_BYTE_ELEMENTS"); |
| 269 break; |
| 270 case EXTERNAL_SHORT_ELEMENTS: |
| 271 PrintF(out, "EXTERNAL_SHORT_ELEMENTS"); |
| 272 break; |
| 273 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
| 274 PrintF(out, "EXTERNAL_UNSIGNED_SHORT_ELEMENTS"); |
| 275 break; |
| 276 case EXTERNAL_INT_ELEMENTS: |
| 277 PrintF(out, "EXTERNAL_INT_ELEMENTS"); |
| 278 break; |
| 279 case EXTERNAL_UNSIGNED_INT_ELEMENTS: |
| 280 PrintF(out, "EXTERNAL_UNSIGNED_INT_ELEMENTS"); |
| 281 break; |
| 282 case EXTERNAL_FLOAT_ELEMENTS: |
| 283 PrintF(out, "EXTERNAL_FLOAT_ELEMENTS"); |
| 284 break; |
| 285 case EXTERNAL_DOUBLE_ELEMENTS: |
| 286 PrintF(out, "EXTERNAL_DOUBLE_ELEMENTS"); |
| 287 break; |
| 288 case EXTERNAL_PIXEL_ELEMENTS: |
| 289 PrintF(out, "EXTERNAL_DOUBLE_ELEMENTS"); |
| 290 break; |
| 291 } |
| 292 } |
| 293 |
| 244 | 294 |
| 245 void JSObject::PrintProperties(FILE* out) { | 295 void JSObject::PrintProperties(FILE* out) { |
| 246 if (HasFastProperties()) { | 296 if (HasFastProperties()) { |
| 247 DescriptorArray* descs = map()->instance_descriptors(); | 297 DescriptorArray* descs = map()->instance_descriptors(); |
| 248 for (int i = 0; i < descs->number_of_descriptors(); i++) { | 298 for (int i = 0; i < descs->number_of_descriptors(); i++) { |
| 249 PrintF(out, " "); | 299 PrintF(out, " "); |
| 250 descs->GetKey(i)->StringPrint(out); | 300 descs->GetKey(i)->StringPrint(out); |
| 251 PrintF(out, ": "); | 301 PrintF(out, ": "); |
| 252 switch (descs->GetType(i)) { | 302 switch (descs->GetType(i)) { |
| 253 case FIELD: { | 303 case FIELD: { |
| 254 int index = descs->GetFieldIndex(i); | 304 int index = descs->GetFieldIndex(i); |
| 255 FastPropertyAt(index)->ShortPrint(out); | 305 FastPropertyAt(index)->ShortPrint(out); |
| 256 PrintF(out, " (field at offset %d)\n", index); | 306 PrintF(out, " (field at offset %d)\n", index); |
| 257 break; | 307 break; |
| 258 } | 308 } |
| 259 case CONSTANT_FUNCTION: | 309 case CONSTANT_FUNCTION: |
| 260 descs->GetConstantFunction(i)->ShortPrint(out); | 310 descs->GetConstantFunction(i)->ShortPrint(out); |
| 261 PrintF(out, " (constant function)\n"); | 311 PrintF(out, " (constant function)\n"); |
| 262 break; | 312 break; |
| 263 case CALLBACKS: | 313 case CALLBACKS: |
| 264 descs->GetCallbacksObject(i)->ShortPrint(out); | 314 descs->GetCallbacksObject(i)->ShortPrint(out); |
| 265 PrintF(out, " (callback)\n"); | 315 PrintF(out, " (callback)\n"); |
| 266 break; | 316 break; |
| 267 case ELEMENTS_TRANSITION: | 317 case ELEMENTS_TRANSITION: |
| 268 PrintF(out, " (elements transition)\n"); | 318 PrintF(out, "(elements transition to "); |
| 319 PrintElementsKind(out, |
| 320 Map::cast(descs->GetValue(i))->elements_kind()); |
| 321 PrintF(out, ")\n"); |
| 269 break; | 322 break; |
| 270 case MAP_TRANSITION: | 323 case MAP_TRANSITION: |
| 271 PrintF(out, " (map transition)\n"); | 324 PrintF(out, "(map transition)\n"); |
| 272 break; | 325 break; |
| 273 case CONSTANT_TRANSITION: | 326 case CONSTANT_TRANSITION: |
| 274 PrintF(out, " (constant transition)\n"); | 327 PrintF(out, "(constant transition)\n"); |
| 275 break; | 328 break; |
| 276 case NULL_DESCRIPTOR: | 329 case NULL_DESCRIPTOR: |
| 277 PrintF(out, " (null descriptor)\n"); | 330 PrintF(out, "(null descriptor)\n"); |
| 278 break; | 331 break; |
| 279 default: | 332 default: |
| 280 UNREACHABLE(); | 333 UNREACHABLE(); |
| 281 break; | 334 break; |
| 282 } | 335 } |
| 283 } | 336 } |
| 284 } else { | 337 } else { |
| 285 property_dictionary()->Print(out); | 338 property_dictionary()->Print(out); |
| 286 } | 339 } |
| 287 } | 340 } |
| 288 | 341 |
| 289 | 342 |
| 290 void JSObject::PrintElements(FILE* out) { | 343 void JSObject::PrintElements(FILE* out) { |
| 291 switch (GetElementsKind()) { | 344 // Don't call GetElementsKind, it's validate code can cause the printer to |
| 345 // fail when debugging. |
| 346 switch (map()->elements_kind()) { |
| 347 case FAST_SMI_ONLY_ELEMENTS: |
| 292 case FAST_ELEMENTS: { | 348 case FAST_ELEMENTS: { |
| 293 // Print in array notation for non-sparse arrays. | 349 // Print in array notation for non-sparse arrays. |
| 294 FixedArray* p = FixedArray::cast(elements()); | 350 FixedArray* p = FixedArray::cast(elements()); |
| 295 for (int i = 0; i < p->length(); i++) { | 351 for (int i = 0; i < p->length(); i++) { |
| 296 PrintF(out, " %d: ", i); | 352 PrintF(out, " %d: ", i); |
| 297 p->get(i)->ShortPrint(out); | 353 p->get(i)->ShortPrint(out); |
| 298 PrintF(out, "\n"); | 354 PrintF(out, "\n"); |
| 299 } | 355 } |
| 300 break; | 356 break; |
| 301 } | 357 } |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 PrintF(out, "\n"); | 445 PrintF(out, "\n"); |
| 390 } | 446 } |
| 391 break; | 447 break; |
| 392 } | 448 } |
| 393 } | 449 } |
| 394 } | 450 } |
| 395 | 451 |
| 396 | 452 |
| 397 void JSObject::JSObjectPrint(FILE* out) { | 453 void JSObject::JSObjectPrint(FILE* out) { |
| 398 PrintF(out, "%p: [JSObject]\n", reinterpret_cast<void*>(this)); | 454 PrintF(out, "%p: [JSObject]\n", reinterpret_cast<void*>(this)); |
| 399 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); | 455 PrintF(out, " - map = %p [", reinterpret_cast<void*>(map())); |
| 400 PrintF(out, " - prototype = %p\n", reinterpret_cast<void*>(GetPrototype())); | 456 // Don't call GetElementsKind, it's validate code can cause the printer to |
| 457 // fail when debugging. |
| 458 PrintElementsKind(out, this->map()->elements_kind()); |
| 459 PrintF(out, |
| 460 "]\n - prototype = %p\n", |
| 461 reinterpret_cast<void*>(GetPrototype())); |
| 401 PrintF(out, " {\n"); | 462 PrintF(out, " {\n"); |
| 402 PrintProperties(out); | 463 PrintProperties(out); |
| 403 PrintElements(out); | 464 PrintElements(out); |
| 404 PrintF(out, " }\n"); | 465 PrintF(out, " }\n"); |
| 405 } | 466 } |
| 406 | 467 |
| 407 | 468 |
| 408 static const char* TypeToString(InstanceType type) { | 469 static const char* TypeToString(InstanceType type) { |
| 409 switch (type) { | 470 switch (type) { |
| 410 case INVALID_TYPE: return "INVALID"; | 471 case INVALID_TYPE: return "INVALID"; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 HeapObject::PrintHeader(out, "FixedArray"); | 582 HeapObject::PrintHeader(out, "FixedArray"); |
| 522 PrintF(out, " - length: %d", length()); | 583 PrintF(out, " - length: %d", length()); |
| 523 for (int i = 0; i < length(); i++) { | 584 for (int i = 0; i < length(); i++) { |
| 524 PrintF(out, "\n [%d]: ", i); | 585 PrintF(out, "\n [%d]: ", i); |
| 525 get(i)->ShortPrint(out); | 586 get(i)->ShortPrint(out); |
| 526 } | 587 } |
| 527 PrintF(out, "\n"); | 588 PrintF(out, "\n"); |
| 528 } | 589 } |
| 529 | 590 |
| 530 | 591 |
| 592 void FixedDoubleArray::FixedDoubleArrayPrint(FILE* out) { |
| 593 HeapObject::PrintHeader(out, "FixedDoubleArray"); |
| 594 PrintF(out, " - length: %d", length()); |
| 595 for (int i = 0; i < length(); i++) { |
| 596 PrintF(out, "\n [%d]: %g", i, get_scalar(i)); |
| 597 } |
| 598 PrintF(out, "\n"); |
| 599 } |
| 600 |
| 601 |
| 531 void JSValue::JSValuePrint(FILE* out) { | 602 void JSValue::JSValuePrint(FILE* out) { |
| 532 HeapObject::PrintHeader(out, "ValueObject"); | 603 HeapObject::PrintHeader(out, "ValueObject"); |
| 533 value()->Print(out); | 604 value()->Print(out); |
| 534 } | 605 } |
| 535 | 606 |
| 536 | 607 |
| 537 void JSMessageObject::JSMessageObjectPrint(FILE* out) { | 608 void JSMessageObject::JSMessageObjectPrint(FILE* out) { |
| 538 HeapObject::PrintHeader(out, "JSMessageObject"); | 609 HeapObject::PrintHeader(out, "JSMessageObject"); |
| 539 PrintF(out, " - type: "); | 610 PrintF(out, " - type: "); |
| 540 type()->ShortPrint(out); | 611 type()->ShortPrint(out); |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 908 desc.Print(out); | 979 desc.Print(out); |
| 909 } | 980 } |
| 910 PrintF(out, "\n"); | 981 PrintF(out, "\n"); |
| 911 } | 982 } |
| 912 | 983 |
| 913 | 984 |
| 914 #endif // OBJECT_PRINT | 985 #endif // OBJECT_PRINT |
| 915 | 986 |
| 916 | 987 |
| 917 } } // namespace v8::internal | 988 } } // namespace v8::internal |
| OLD | NEW |