13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved.
29fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// Redistribution and use in source and binary forms, with or without
39fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// modification, are permitted provided that the following conditions are
49fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// met:
59fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//
69fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//     * Redistributions of source code must retain the above copyright
79fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//       notice, this list of conditions and the following disclaimer.
89fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//     * Redistributions in binary form must reproduce the above
99fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//       copyright notice, this list of conditions and the following
109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//       disclaimer in the documentation and/or other materials provided
119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//       with the distribution.
129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//     * Neither the name of Google Inc. nor the names of its
139fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//       contributors may be used to endorse or promote products derived
149fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//       from this software without specific prior written permission.
159fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block//
169fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
179fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
239fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
249fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
259fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#include "v8.h"
299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
309fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#include "disassembler.h"
319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#include "disasm.h"
329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#include "jsregexp.h"
339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#include "objects-visiting.h"
349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blocknamespace v8 {
369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blocknamespace internal {
379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#ifdef OBJECT_PRINT
399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockstatic const char* TypeToString(InstanceType type);
419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid MaybeObject::Print(FILE* out) {
449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  Object* this_as_object;
459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (ToObject(&this_as_object)) {
469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    if (this_as_object->IsSmi()) {
479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      Smi::cast(this_as_object)->SmiPrint(out);
489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    } else {
499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      HeapObject::cast(this_as_object)->HeapObjectPrint(out);
509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  } else {
529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    Failure::cast(this)->FailurePrint(out);
539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
549fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  Flush(out);
559fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
569fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid MaybeObject::PrintLn(FILE* out) {
599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  Print(out);
609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
629fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
639fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
649fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid HeapObject::PrintHeader(FILE* out, const char* id) {
659fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "%p: [%s]\n", reinterpret_cast<void*>(this), id);
669fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
679fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
689fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
699fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid HeapObject::HeapObjectPrint(FILE* out) {
709fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  InstanceType instance_type = map()->instance_type();
719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HandleScope scope;
739fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (instance_type < FIRST_NONSTRING_TYPE) {
749fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    String::cast(this)->StringPrint(out);
759fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    return;
769fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
779fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  switch (instance_type) {
799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case MAP_TYPE:
809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      Map::cast(this)->MapPrint(out);
819fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case HEAP_NUMBER_TYPE:
839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      HeapNumber::cast(this)->HeapNumberPrint(out);
849fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case FIXED_DOUBLE_ARRAY_TYPE:
863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(out);
873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      break;
889fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case FIXED_ARRAY_TYPE:
899fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      FixedArray::cast(this)->FixedArrayPrint(out);
909fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
919fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case BYTE_ARRAY_TYPE:
929fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ByteArray::cast(this)->ByteArrayPrint(out);
939fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case FREE_SPACE_TYPE:
953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      FreeSpace::cast(this)->FreeSpacePrint(out);
963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      break;
9744f0eee88ff00398ff7f715fab053374d808c90dSteve Block    case EXTERNAL_PIXEL_ARRAY_TYPE:
9844f0eee88ff00398ff7f715fab053374d808c90dSteve Block      ExternalPixelArray::cast(this)->ExternalPixelArrayPrint(out);
999fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_BYTE_ARRAY_TYPE:
1019fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalByteArray::cast(this)->ExternalByteArrayPrint(out);
1029fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1039fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
1049fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalUnsignedByteArray::cast(this)
1059fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          ->ExternalUnsignedByteArrayPrint(out);
1069fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1079fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_SHORT_ARRAY_TYPE:
1089fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalShortArray::cast(this)->ExternalShortArrayPrint(out);
1099fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
1119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalUnsignedShortArray::cast(this)
1129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          ->ExternalUnsignedShortArrayPrint(out);
1139fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1149fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_INT_ARRAY_TYPE:
1159fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalIntArray::cast(this)->ExternalIntArrayPrint(out);
1169fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1179fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
1189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalUnsignedIntArray::cast(this)->ExternalUnsignedIntArrayPrint(out);
1199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_FLOAT_ARRAY_TYPE:
1219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalFloatArray::cast(this)->ExternalFloatArrayPrint(out);
1229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
123257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    case EXTERNAL_DOUBLE_ARRAY_TYPE:
124257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      ExternalDoubleArray::cast(this)->ExternalDoubleArrayPrint(out);
125257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      break;
1269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case FILLER_TYPE:
1279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      PrintF(out, "filler");
1289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_OBJECT_TYPE:  // fall through
1309fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
1319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_ARRAY_TYPE:
1329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_REGEXP_TYPE:
1339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      JSObject::cast(this)->JSObjectPrint(out);
1349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case ODDBALL_TYPE:
1369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      Oddball::cast(this)->to_string()->Print(out);
1379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_FUNCTION_TYPE:
1399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      JSFunction::cast(this)->JSFunctionPrint(out);
1409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_GLOBAL_PROXY_TYPE:
1429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      JSGlobalProxy::cast(this)->JSGlobalProxyPrint(out);
1439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_GLOBAL_OBJECT_TYPE:
1459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      JSGlobalObject::cast(this)->JSGlobalObjectPrint(out);
1469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_BUILTINS_OBJECT_TYPE:
1489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      JSBuiltinsObject::cast(this)->JSBuiltinsObjectPrint(out);
1499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_VALUE_TYPE:
1519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      PrintF(out, "Value wrapper around:");
1529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      JSValue::cast(this)->value()->Print(out);
1539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case JS_DATE_TYPE:
1553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      JSDate::cast(this)->value()->Print(out);
1563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      break;
1579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case CODE_TYPE:
1589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      Code::cast(this)->CodePrint(out);
1599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
160257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    case JS_PROXY_TYPE:
161257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      JSProxy::cast(this)->JSProxyPrint(out);
162257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      break;
163589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch    case JS_FUNCTION_PROXY_TYPE:
164589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch      JSFunctionProxy::cast(this)->JSFunctionProxyPrint(out);
165589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch      break;
16669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch    case JS_WEAK_MAP_TYPE:
16769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch      JSWeakMap::cast(this)->JSWeakMapPrint(out);
16869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch      break;
169257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    case FOREIGN_TYPE:
170257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      Foreign::cast(this)->ForeignPrint(out);
1719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case SHARED_FUNCTION_INFO_TYPE:
1739fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      SharedFunctionInfo::cast(this)->SharedFunctionInfoPrint(out);
1749fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1751e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case JS_MESSAGE_OBJECT_TYPE:
1761e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      JSMessageObject::cast(this)->JSMessageObjectPrint(out);
1771e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block      break;
1789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_GLOBAL_PROPERTY_CELL_TYPE:
1799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      JSGlobalPropertyCell::cast(this)->JSGlobalPropertyCellPrint(out);
1809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1819fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#define MAKE_STRUCT_CASE(NAME, Name, name) \
1829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  case NAME##_TYPE:                        \
1839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    Name::cast(this)->Name##Print(out);    \
1849fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    break;
1859fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  STRUCT_LIST(MAKE_STRUCT_CASE)
1869fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#undef MAKE_STRUCT_CASE
1879fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
1889fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    default:
1899fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      PrintF(out, "UNKNOWN TYPE %d", map()->instance_type());
1909fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      UNREACHABLE();
1919fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
1929fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
1939fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
1949fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
1959fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
1969fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ByteArray::ByteArrayPrint(FILE* out) {
1979fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "byte array, data starts at %p", GetDataStartAddress());
1989fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
1999fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid FreeSpace::FreeSpacePrint(FILE* out) {
2023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "free space, size %d", Size());
2033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
2043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
20644f0eee88ff00398ff7f715fab053374d808c90dSteve Blockvoid ExternalPixelArray::ExternalPixelArrayPrint(FILE* out) {
20744f0eee88ff00398ff7f715fab053374d808c90dSteve Block  PrintF(out, "external pixel array");
2089fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2099fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ExternalByteArray::ExternalByteArrayPrint(FILE* out) {
2129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "external byte array");
2139fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2149fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2159fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2169fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ExternalUnsignedByteArray::ExternalUnsignedByteArrayPrint(FILE* out) {
2179fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "external unsigned byte array");
2189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ExternalShortArray::ExternalShortArrayPrint(FILE* out) {
2229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "external short array");
2239fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2249fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2259fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ExternalUnsignedShortArray::ExternalUnsignedShortArrayPrint(FILE* out) {
2279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "external unsigned short array");
2289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2309fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ExternalIntArray::ExternalIntArrayPrint(FILE* out) {
2329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "external int array");
2339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ExternalUnsignedIntArray::ExternalUnsignedIntArrayPrint(FILE* out) {
2379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "external unsigned int array");
2389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ExternalFloatArray::ExternalFloatArrayPrint(FILE* out) {
2429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "external float array");
2439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
2449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
2459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
246257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid ExternalDoubleArray::ExternalDoubleArrayPrint(FILE* out) {
247257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  PrintF(out, "external double array");
248257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}
249257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch
250257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch
2519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSObject::PrintProperties(FILE* out) {
2529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (HasFastProperties()) {
2539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    DescriptorArray* descs = map()->instance_descriptors();
2549fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    for (int i = 0; i < descs->number_of_descriptors(); i++) {
2559fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      PrintF(out, "   ");
2569fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      descs->GetKey(i)->StringPrint(out);
2579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      PrintF(out, ": ");
2589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      switch (descs->GetType(i)) {
2599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        case FIELD: {
2609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          int index = descs->GetFieldIndex(i);
2619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          FastPropertyAt(index)->ShortPrint(out);
2629fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          PrintF(out, " (field at offset %d)\n", index);
2639fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          break;
2649fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        }
2659fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        case CONSTANT_FUNCTION:
2669fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          descs->GetConstantFunction(i)->ShortPrint(out);
2679fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          PrintF(out, " (constant function)\n");
2689fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          break;
2699fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        case CALLBACKS:
2709fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          descs->GetCallbacksObject(i)->ShortPrint(out);
2719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          PrintF(out, " (callback)\n");
2729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          break;
2733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        case ELEMENTS_TRANSITION: {
2743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          PrintF(out, "(elements transition to ");
2753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          Object* descriptor_contents = descs->GetValue(i);
2763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          if (descriptor_contents->IsMap()) {
2773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            Map* map = Map::cast(descriptor_contents);
2783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            PrintElementsKind(out, map->elements_kind());
2793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          } else {
2803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            FixedArray* map_array = FixedArray::cast(descriptor_contents);
2813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            for (int i = 0; i < map_array->length(); ++i) {
2823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch              Map* map = Map::cast(map_array->get(i));
2833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch              if (i != 0) {
2843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                PrintF(out, ", ");
2853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch              }
2863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch              PrintElementsKind(out, map->elements_kind());
2873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            }
2883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          }
2893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          PrintF(out, ")\n");
2903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          break;
2913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        }
2929fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        case MAP_TRANSITION:
2933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          PrintF(out, "(map transition)\n");
2949fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          break;
2959fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        case CONSTANT_TRANSITION:
2963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          PrintF(out, "(constant transition)\n");
2979fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          break;
2989fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        case NULL_DESCRIPTOR:
2993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          PrintF(out, "(null descriptor)\n");
3009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          break;
3013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        case NORMAL:  // only in slow mode
3023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        case HANDLER:  // only in lookup results, not in descriptors
3033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        case INTERCEPTOR:  // only in lookup results, not in descriptors
3049fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          UNREACHABLE();
3059fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          break;
3069fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3079fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3089fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  } else {
3099fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    property_dictionary()->Print(out);
3109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
3119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
3129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
3139fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
3149fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSObject::PrintElements(FILE* out) {
3153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  // Don't call GetElementsKind, its validation code can cause the printer to
3163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  // fail when debugging.
3173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  switch (map()->elements_kind()) {
3183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case FAST_SMI_ONLY_ELEMENTS:
3199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case FAST_ELEMENTS: {
3209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      // Print in array notation for non-sparse arrays.
3219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      FixedArray* p = FixedArray::cast(elements());
3229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
3239fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        PrintF(out, "   %d: ", i);
3249fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        p->get(i)->ShortPrint(out);
3259fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block        PrintF(out, "\n");
3269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
32969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch    case FAST_DOUBLE_ELEMENTS: {
33069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch      // Print in array notation for non-sparse arrays.
3315710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch      if (elements()->length() > 0) {
3325710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch        FixedDoubleArray* p = FixedDoubleArray::cast(elements());
3335710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch        for (int i = 0; i < p->length(); i++) {
3345710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch          if (p->is_the_hole(i)) {
3355710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch            PrintF(out, "   %d: <the hole>", i);
3365710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch          } else {
3375710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch            PrintF(out, "   %d: %g", i, p->get_scalar(i));
3385710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch          }
3395710ceac03e2cf7a164ad7393b5a6b6114ea45e6Ben Murdoch          PrintF(out, "\n");
34069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        }
34169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch      }
34269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch      break;
34369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch    }
34444f0eee88ff00398ff7f715fab053374d808c90dSteve Block    case EXTERNAL_PIXEL_ELEMENTS: {
34544f0eee88ff00398ff7f715fab053374d808c90dSteve Block      ExternalPixelArray* p = ExternalPixelArray::cast(elements());
3469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
34769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %d\n", i, p->get_scalar(i));
3489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_BYTE_ELEMENTS: {
3529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalByteArray* p = ExternalByteArray::cast(elements());
3539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
35469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
3559fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3569fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: {
3599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalUnsignedByteArray* p =
3609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          ExternalUnsignedByteArray::cast(elements());
3619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
36269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
3639fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3649fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3659fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3669fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_SHORT_ELEMENTS: {
3679fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalShortArray* p = ExternalShortArray::cast(elements());
3689fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
36969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
3709fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3739fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: {
3749fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalUnsignedShortArray* p =
3759fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          ExternalUnsignedShortArray::cast(elements());
3769fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
37769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
3789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3819fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_INT_ELEMENTS: {
3829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalIntArray* p = ExternalIntArray::cast(elements());
3839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
38469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
3859fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3869fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3879fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3889fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_INT_ELEMENTS: {
3899fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalUnsignedIntArray* p =
3909fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block          ExternalUnsignedIntArray::cast(elements());
3919fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
39269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
3939fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
3949fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
3959fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
3969fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_FLOAT_ELEMENTS: {
3979fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      ExternalFloatArray* p = ExternalFloatArray::cast(elements());
3989fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      for (int i = 0; i < p->length(); i++) {
39969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "   %d: %f\n", i, p->get_scalar(i));
4009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      }
4019fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
4029fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
403257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    case EXTERNAL_DOUBLE_ELEMENTS: {
404257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      ExternalDoubleArray* p = ExternalDoubleArray::cast(elements());
405257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      for (int i = 0; i < p->length(); i++) {
40669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch        PrintF(out, "  %d: %f\n", i, p->get_scalar(i));
407257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      }
408257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch      break;
409257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    }
4109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case DICTIONARY_ELEMENTS:
4119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      elements()->Print(out);
4129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      break;
4133fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch    case NON_STRICT_ARGUMENTS_ELEMENTS: {
4143fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      FixedArray* p = FixedArray::cast(elements());
4153fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      for (int i = 2; i < p->length(); i++) {
4163fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch        PrintF(out, "   %d: ", i);
4173fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch        p->get(i)->ShortPrint(out);
4183fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch        PrintF(out, "\n");
4193fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      }
4203fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      break;
4213fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch    }
4229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
4239fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
4249fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
4259fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
4269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSObject::JSObjectPrint(FILE* out) {
4279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "%p: [JSObject]\n", reinterpret_cast<void*>(this));
4283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, " - map = %p [", reinterpret_cast<void*>(map()));
4293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  // Don't call GetElementsKind, its validation code can cause the printer to
4303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  // fail when debugging.
4313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintElementsKind(out, this->map()->elements_kind());
4323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out,
4333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch         "]\n - prototype = %p\n",
4343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch         reinterpret_cast<void*>(GetPrototype()));
4359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " {\n");
4369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintProperties(out);
4379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintElements(out);
4389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " }\n");
4399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
4409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
4419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
4429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockstatic const char* TypeToString(InstanceType type) {
4439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  switch (type) {
4449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case INVALID_TYPE: return "INVALID";
4459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case MAP_TYPE: return "MAP";
4469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case HEAP_NUMBER_TYPE: return "HEAP_NUMBER";
4479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case SYMBOL_TYPE: return "SYMBOL";
4489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case ASCII_SYMBOL_TYPE: return "ASCII_SYMBOL";
4499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case CONS_SYMBOL_TYPE: return "CONS_SYMBOL";
4509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case CONS_ASCII_SYMBOL_TYPE: return "CONS_ASCII_SYMBOL";
4519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_ASCII_SYMBOL_TYPE:
4529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE:
4539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_SYMBOL_TYPE: return "EXTERNAL_SYMBOL";
4543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case SHORT_EXTERNAL_ASCII_SYMBOL_TYPE:
4553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case SHORT_EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE:
4563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case SHORT_EXTERNAL_SYMBOL_TYPE: return "SHORT_EXTERNAL_SYMBOL";
4579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case ASCII_STRING_TYPE: return "ASCII_STRING";
4589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case STRING_TYPE: return "TWO_BYTE_STRING";
4599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case CONS_STRING_TYPE:
4609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case CONS_ASCII_STRING_TYPE: return "CONS_STRING";
4619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_ASCII_STRING_TYPE:
4629fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_STRING_WITH_ASCII_DATA_TYPE:
4639fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_STRING_TYPE: return "EXTERNAL_STRING";
4643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case SHORT_EXTERNAL_ASCII_STRING_TYPE:
4653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case SHORT_EXTERNAL_STRING_WITH_ASCII_DATA_TYPE:
4663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case SHORT_EXTERNAL_STRING_TYPE: return "SHORT_EXTERNAL_STRING";
4679fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case FIXED_ARRAY_TYPE: return "FIXED_ARRAY";
4689fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case BYTE_ARRAY_TYPE: return "BYTE_ARRAY";
4693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    case FREE_SPACE_TYPE: return "FREE_SPACE";
47044f0eee88ff00398ff7f715fab053374d808c90dSteve Block    case EXTERNAL_PIXEL_ARRAY_TYPE: return "EXTERNAL_PIXEL_ARRAY";
4719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_BYTE_ARRAY_TYPE: return "EXTERNAL_BYTE_ARRAY";
4729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
4739fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      return "EXTERNAL_UNSIGNED_BYTE_ARRAY";
4749fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_SHORT_ARRAY_TYPE: return "EXTERNAL_SHORT_ARRAY";
4759fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
4769fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      return "EXTERNAL_UNSIGNED_SHORT_ARRAY";
4779fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_INT_ARRAY_TYPE: return "EXTERNAL_INT_ARRAY";
4789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
4799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      return "EXTERNAL_UNSIGNED_INT_ARRAY";
4809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case EXTERNAL_FLOAT_ARRAY_TYPE: return "EXTERNAL_FLOAT_ARRAY";
481257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    case EXTERNAL_DOUBLE_ARRAY_TYPE: return "EXTERNAL_DOUBLE_ARRAY";
4829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case FILLER_TYPE: return "FILLER";
4839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_OBJECT_TYPE: return "JS_OBJECT";
4849fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_CONTEXT_EXTENSION_OBJECT_TYPE: return "JS_CONTEXT_EXTENSION_OBJECT";
4859fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case ODDBALL_TYPE: return "ODDBALL";
4869fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_GLOBAL_PROPERTY_CELL_TYPE: return "JS_GLOBAL_PROPERTY_CELL";
4879fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case SHARED_FUNCTION_INFO_TYPE: return "SHARED_FUNCTION_INFO";
4889fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_FUNCTION_TYPE: return "JS_FUNCTION";
4899fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case CODE_TYPE: return "CODE";
4909fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_ARRAY_TYPE: return "JS_ARRAY";
491257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    case JS_PROXY_TYPE: return "JS_PROXY";
49269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch    case JS_WEAK_MAP_TYPE: return "JS_WEAK_MAP";
4939fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_REGEXP_TYPE: return "JS_REGEXP";
4949fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_VALUE_TYPE: return "JS_VALUE";
4959fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_GLOBAL_OBJECT_TYPE: return "JS_GLOBAL_OBJECT";
4969fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_BUILTINS_OBJECT_TYPE: return "JS_BUILTINS_OBJECT";
4979fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    case JS_GLOBAL_PROXY_TYPE: return "JS_GLOBAL_PROXY";
498257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    case FOREIGN_TYPE: return "FOREIGN";
4991e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block    case JS_MESSAGE_OBJECT_TYPE: return "JS_MESSAGE_OBJECT_TYPE";
5009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#define MAKE_STRUCT_CASE(NAME, Name, name) case NAME##_TYPE: return #NAME;
5019fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  STRUCT_LIST(MAKE_STRUCT_CASE)
5029fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#undef MAKE_STRUCT_CASE
503257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch    default: return "UNKNOWN";
5049fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5059fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
5069fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5079fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5089fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid Map::MapPrint(FILE* out) {
5099fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "Map");
5109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - type: %s\n", TypeToString(instance_type()));
5119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - instance size: %d\n", instance_size());
5129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - inobject properties: %d\n", inobject_properties());
5133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, " - elements kind: ");
5143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintElementsKind(out, elements_kind());
5153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n - pre-allocated property fields: %d\n",
5169fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      pre_allocated_property_fields());
5179fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - unused property fields: %d\n", unused_property_fields());
5189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (is_hidden_prototype()) {
5199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, " - hidden_prototype\n");
5209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (has_named_interceptor()) {
5229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, " - named_interceptor\n");
5239fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5249fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (has_indexed_interceptor()) {
5259fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, " - indexed_interceptor\n");
5269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (is_undetectable()) {
5289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, " - undetectable\n");
5299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5309fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (has_instance_call_handler()) {
5319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, " - instance_call_handler\n");
5329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (is_access_check_needed()) {
5349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, " - access_check_needed\n");
5359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - instance descriptors: ");
5379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  instance_descriptors()->ShortPrint(out);
5389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - prototype: ");
5399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  prototype()->ShortPrint(out);
5409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - constructor: ");
5419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  constructor()->ShortPrint(out);
5429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
5439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
5449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid CodeCache::CodeCachePrint(FILE* out) {
5479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "CodeCache");
5489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - default_cache: ");
5499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  default_cache()->ShortPrint(out);
5509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - normal_type_cache: ");
5519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  normal_type_cache()->ShortPrint(out);
5523fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch}
5533fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch
5543fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch
5553fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvoid PolymorphicCodeCache::PolymorphicCodeCachePrint(FILE* out) {
5563fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  HeapObject::PrintHeader(out, "PolymorphicCodeCache");
5573fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  PrintF(out, "\n - cache: ");
5583fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  cache()->ShortPrint(out);
5599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
5609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid TypeFeedbackInfo::TypeFeedbackInfoPrint(FILE* out) {
5633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  HeapObject::PrintHeader(out, "TypeFeedbackInfo");
5648f9999fcc44cfd4f5e1140c6678bbca4cf8ea1c7Ben Murdoch  PrintF(out, "\n - ic_total_count: %d, ic_with_type_info_count: %d",
5658f9999fcc44cfd4f5e1140c6678bbca4cf8ea1c7Ben Murdoch         ic_total_count(), ic_with_type_info_count());
5663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n - type_feedback_cells: ");
5673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  type_feedback_cells()->FixedArrayPrint(out);
5683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
5693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
5703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
5713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid AliasedArgumentsEntry::AliasedArgumentsEntryPrint(FILE* out) {
5723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  HeapObject::PrintHeader(out, "AliasedArgumentsEntry");
5733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n - aliased_context_slot: %d", aliased_context_slot());
5743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
5753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
5763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
5779fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid FixedArray::FixedArrayPrint(FILE* out) {
5789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "FixedArray");
5799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - length: %d", length());
5809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  for (int i = 0; i < length(); i++) {
5819fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, "\n  [%d]: ", i);
5829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    get(i)->ShortPrint(out);
5839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
5849fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
5859fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
5869fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5879fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
5883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid FixedDoubleArray::FixedDoubleArrayPrint(FILE* out) {
5893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  HeapObject::PrintHeader(out, "FixedDoubleArray");
5903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, " - length: %d", length());
5913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  for (int i = 0; i < length(); i++) {
5923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    if (is_the_hole(i)) {
5933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      PrintF(out, "\n  [%d]: <the hole>", i);
5943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    } else {
5953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      PrintF(out, "\n  [%d]: %g", i, get_scalar(i));
5963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
5973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
5983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n");
5993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
6003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
6013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
6029fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSValue::JSValuePrint(FILE* out) {
6039fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "ValueObject");
6049fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  value()->Print(out);
6059fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
6069fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
6079fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
6081e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockvoid JSMessageObject::JSMessageObjectPrint(FILE* out) {
6091e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  HeapObject::PrintHeader(out, "JSMessageObject");
6101e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, " - type: ");
6111e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  type()->ShortPrint(out);
6121e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, "\n - arguments: ");
6131e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  arguments()->ShortPrint(out);
6141e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, "\n - start_position: %d", start_position());
6151e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, "\n - end_position: %d", end_position());
6161e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, "\n - script: ");
6171e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  script()->ShortPrint(out);
6181e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, "\n - stack_trace: ");
6191e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  stack_trace()->ShortPrint(out);
6201e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, "\n - stack_frames: ");
6211e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  stack_frames()->ShortPrint(out);
6221e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  PrintF(out, "\n");
6231e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block}
6241e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
6251e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block
6269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid String::StringPrint(FILE* out) {
6279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (StringShape(this).IsSymbol()) {
6289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, "#");
6299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  } else if (StringShape(this).IsCons()) {
6309fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, "c\"");
6319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  } else {
6329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, "\"");
6339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
6349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
6359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  const char truncated_epilogue[] = "...<truncated>";
6369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  int len = length();
6379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (!FLAG_use_verbose_printer) {
6389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    if (len > 100) {
6399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block      len = 100 - sizeof(truncated_epilogue);
6409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    }
6419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
6429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  for (int i = 0; i < len; i++) {
6439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, "%c", Get(i));
6449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
6459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (len != length()) {
6469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, "%s", truncated_epilogue);
6479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
6489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
6499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (!StringShape(this).IsSymbol()) PrintF(out, "\"");
6509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
6519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
6529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
65369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// This method is only meant to be called from gdb for debugging purposes.
6543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Since the string can also be in two-byte encoding, non-ASCII characters
65569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// will be ignored in the output.
65669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochchar* String::ToAsciiArray() {
65769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  // Static so that subsequent calls frees previously allocated space.
65869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  // This also means that previous results will be overwritten.
65969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  static char* buffer = NULL;
66069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  if (buffer != NULL) free(buffer);
66169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  buffer = new char[length()+1];
66269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  WriteToFlat(this, buffer, 0, length());
66369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  buffer[length()] = 0;
66469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  return buffer;
66569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch}
66669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch
66769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch
6683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochstatic const char* const weekdays[] = {
6693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  "???", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
6703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch};
6713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
6723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid JSDate::JSDatePrint(FILE* out) {
6733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  HeapObject::PrintHeader(out, "JSDate");
6743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
6753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, " - value = ");
6763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  value()->Print(out);
6773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (!year()->IsSmi()) {
6783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    PrintF(out, " - time = NaN\n");
6793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } else {
6803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    PrintF(out, " - time = %s %04d/%02d/%02d %02d:%02d:%02d\n",
6813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch           weekdays[weekday()->IsSmi() ? Smi::cast(weekday())->value() + 1 : 0],
6823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch           year()->IsSmi() ? Smi::cast(year())->value() : -1,
6833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch           month()->IsSmi() ? Smi::cast(month())->value() : -1,
6843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch           day()->IsSmi() ? Smi::cast(day())->value() : -1,
6853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch           hour()->IsSmi() ? Smi::cast(hour())->value() : -1,
6863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch           min()->IsSmi() ? Smi::cast(min())->value() : -1,
6873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch           sec()->IsSmi() ? Smi::cast(sec())->value() : -1);
6883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
6893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
6903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
6913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
692257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid JSProxy::JSProxyPrint(FILE* out) {
693257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  HeapObject::PrintHeader(out, "JSProxy");
694257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
695257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  PrintF(out, " - handler = ");
696257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  handler()->Print(out);
6973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, " - hash = ");
6983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  hash()->Print(out);
699257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  PrintF(out, "\n");
700257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}
701257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch
702257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch
703589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdochvoid JSFunctionProxy::JSFunctionProxyPrint(FILE* out) {
704589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  HeapObject::PrintHeader(out, "JSFunctionProxy");
705589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
706589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  PrintF(out, " - handler = ");
707589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  handler()->Print(out);
708589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  PrintF(out, " - call_trap = ");
709589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  call_trap()->Print(out);
710589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  PrintF(out, " - construct_trap = ");
711589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  construct_trap()->Print(out);
712589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  PrintF(out, "\n");
713589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch}
714589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch
715589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch
71669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid JSWeakMap::JSWeakMapPrint(FILE* out) {
71769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  HeapObject::PrintHeader(out, "JSWeakMap");
71869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
71969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  PrintF(out, " - table = ");
72069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  table()->ShortPrint(out);
72169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch  PrintF(out, "\n");
72269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch}
72369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch
72469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch
7259fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSFunction::JSFunctionPrint(FILE* out) {
7269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "Function");
7279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
7289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - initial_map = ");
7299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (has_initial_map()) {
7309fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    initial_map()->ShortPrint(out);
7319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
7329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - shared_info = ");
7339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  shared()->ShortPrint(out);
7349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n   - name = ");
7359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  shared()->name()->Print(out);
7369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - context = ");
7379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  unchecked_context()->ShortPrint(out);
7389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - code = ");
7399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  code()->ShortPrint(out);
7409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
7419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintProperties(out);
7439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintElements(out);
7449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
7469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
7479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid SharedFunctionInfo::SharedFunctionInfoPrint(FILE* out) {
7509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "SharedFunctionInfo");
7519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, " - name: ");
7529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  name()->ShortPrint(out);
7539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - expected_nof_properties: %d", expected_nof_properties());
7549fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - instance class name = ");
7559fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  instance_class_name()->Print(out);
7569fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - code = ");
7579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  code()->ShortPrint(out);
7589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - source code = ");
7599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  GetSourceCode()->ShortPrint(out);
7609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  // Script files are often large, hard to read.
7619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  // PrintF(out, "\n - script =");
7629fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  // script()->Print(out);
7639fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - function token position = %d", function_token_position());
7649fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - start position = %d", start_position());
7659fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - end position = %d", end_position());
7669fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - is expression = %d", is_expression());
7679fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - debug info = ");
7689fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  debug_info()->ShortPrint(out);
7699fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - length = %d", length());
7709fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - has_only_simple_this_property_assignments = %d",
7719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block         has_only_simple_this_property_assignments());
7729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - this_property_assignments = ");
7739fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  this_property_assignments()->ShortPrint(out);
7749fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
7759fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
7769fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7779fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSGlobalProxy::JSGlobalProxyPrint(FILE* out) {
7799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "global_proxy");
7809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  JSObjectPrint(out);
7819fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "context : ");
7829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  context()->ShortPrint(out);
7839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
7849fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
7859fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7869fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7879fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSGlobalObject::JSGlobalObjectPrint(FILE* out) {
7889fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "global ");
7899fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  JSObjectPrint(out);
7909fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "global context : ");
7919fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  global_context()->ShortPrint(out);
7929fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
7939fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
7949fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7959fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
7969fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSBuiltinsObject::JSBuiltinsObjectPrint(FILE* out) {
7979fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "builtins ");
7989fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  JSObjectPrint(out);
7999fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8019fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8029fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid JSGlobalPropertyCell::JSGlobalPropertyCellPrint(FILE* out) {
8039fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "JSGlobalPropertyCell");
8049fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8059fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8069fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8079fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid Code::CodePrint(FILE* out) {
8089fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "Code");
8099fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#ifdef ENABLE_DISASSEMBLER
8109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  if (FLAG_use_verbose_printer) {
8119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    Disassemble(NULL, out);
8129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
8139fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#endif
8149fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8159fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8169fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
817257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid Foreign::ForeignPrint(FILE* out) {
8183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "foreign address : %p", foreign_address());
8199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid AccessorInfo::AccessorInfoPrint(FILE* out) {
8239fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "AccessorInfo");
8249fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - getter: ");
8259fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  getter()->ShortPrint(out);
8269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - setter: ");
8279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  setter()->ShortPrint(out);
8289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - name: ");
8299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  name()->ShortPrint(out);
8309fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - data: ");
8319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  data()->ShortPrint(out);
8329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - flag: ");
8339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  flag()->ShortPrint(out);
8349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid AccessorPair::AccessorPairPrint(FILE* out) {
8383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  HeapObject::PrintHeader(out, "AccessorPair");
8393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n - getter: ");
8403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  getter()->ShortPrint(out);
8413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n - setter: ");
8423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  setter()->ShortPrint(out);
8433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
8443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
8453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
8469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid AccessCheckInfo::AccessCheckInfoPrint(FILE* out) {
8479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "AccessCheckInfo");
8489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - named_callback: ");
8499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  named_callback()->ShortPrint(out);
8509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - indexed_callback: ");
8519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  indexed_callback()->ShortPrint(out);
8529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - data: ");
8539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  data()->ShortPrint(out);
8549fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8559fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8569fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid InterceptorInfo::InterceptorInfoPrint(FILE* out) {
8589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "InterceptorInfo");
8599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - getter: ");
8609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  getter()->ShortPrint(out);
8619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - setter: ");
8629fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  setter()->ShortPrint(out);
8639fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - query: ");
8649fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  query()->ShortPrint(out);
8659fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - deleter: ");
8669fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  deleter()->ShortPrint(out);
8679fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - enumerator: ");
8689fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  enumerator()->ShortPrint(out);
8699fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - data: ");
8709fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  data()->ShortPrint(out);
8719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8739fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8749fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid CallHandlerInfo::CallHandlerInfoPrint(FILE* out) {
8759fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "CallHandlerInfo");
8769fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - callback: ");
8779fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  callback()->ShortPrint(out);
8789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - data: ");
8799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  data()->ShortPrint(out);
8809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - call_stub_cache: ");
8819fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
8829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
8849fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid FunctionTemplateInfo::FunctionTemplateInfoPrint(FILE* out) {
8859fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "FunctionTemplateInfo");
8869fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - class name: ");
8879fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  class_name()->ShortPrint(out);
8889fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - tag: ");
8899fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  tag()->ShortPrint(out);
8909fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - property_list: ");
8919fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  property_list()->ShortPrint(out);
8929fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - serial_number: ");
8939fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  serial_number()->ShortPrint(out);
8949fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - call_code: ");
8959fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  call_code()->ShortPrint(out);
8969fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - property_accessors: ");
8979fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  property_accessors()->ShortPrint(out);
8989fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - prototype_template: ");
8999fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  prototype_template()->ShortPrint(out);
9009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - parent_template: ");
9019fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  parent_template()->ShortPrint(out);
9029fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - named_property_handler: ");
9039fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  named_property_handler()->ShortPrint(out);
9049fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - indexed_property_handler: ");
9059fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  indexed_property_handler()->ShortPrint(out);
9069fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - instance_template: ");
9079fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  instance_template()->ShortPrint(out);
9089fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - signature: ");
9099fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  signature()->ShortPrint(out);
9109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - access_check_info: ");
9119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  access_check_info()->ShortPrint(out);
9129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - hidden_prototype: %s",
9139fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block         hidden_prototype() ? "true" : "false");
9149fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - undetectable: %s", undetectable() ? "true" : "false");
9159fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - need_access_check: %s",
9169fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block         needs_access_check() ? "true" : "false");
9179fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
9189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid ObjectTemplateInfo::ObjectTemplateInfoPrint(FILE* out) {
9219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "ObjectTemplateInfo");
9223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, " - tag: ");
9233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  tag()->ShortPrint(out);
9243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n - property_list: ");
9253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  property_list()->ShortPrint(out);
9269fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - constructor: ");
9279fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  constructor()->ShortPrint(out);
9289fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - internal_field_count: ");
9299fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  internal_field_count()->ShortPrint(out);
9303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  PrintF(out, "\n");
9319fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
9329fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9339fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9349fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid SignatureInfo::SignatureInfoPrint(FILE* out) {
9359fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "SignatureInfo");
9369fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - receiver: ");
9379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  receiver()->ShortPrint(out);
9389fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - args: ");
9399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  args()->ShortPrint(out);
9409fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
9419fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9429fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9439fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid TypeSwitchInfo::TypeSwitchInfoPrint(FILE* out) {
9449fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "TypeSwitchInfo");
9459fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - types: ");
9469fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  types()->ShortPrint(out);
9479fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
9489fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9499fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9509fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid Script::ScriptPrint(FILE* out) {
9519fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "Script");
9529fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - source: ");
9539fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  source()->ShortPrint(out);
9549fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - name: ");
9559fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  name()->ShortPrint(out);
9569fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - line_offset: ");
9579fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  line_offset()->ShortPrint(out);
9589fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - column_offset: ");
9599fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  column_offset()->ShortPrint(out);
9609fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - type: ");
9619fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  type()->ShortPrint(out);
9629fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - id: ");
9639fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  id()->ShortPrint(out);
9649fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - data: ");
9659fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  data()->ShortPrint(out);
9669fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - context data: ");
9679fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  context_data()->ShortPrint(out);
9689fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - wrapper: ");
9699fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  wrapper()->ShortPrint(out);
9709fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - compilation type: ");
9719fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  compilation_type()->ShortPrint(out);
9729fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - line ends: ");
9739fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  line_ends()->ShortPrint(out);
9749fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - eval from shared: ");
9759fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  eval_from_shared()->ShortPrint(out);
9769fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - eval from instructions offset: ");
9779fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  eval_from_instructions_offset()->ShortPrint(out);
9789fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
9799fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
9809fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9819fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9829fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#ifdef ENABLE_DEBUGGER_SUPPORT
9839fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid DebugInfo::DebugInfoPrint(FILE* out) {
9849fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "DebugInfo");
9859fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - shared: ");
9869fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  shared()->ShortPrint(out);
9879fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - original_code: ");
9889fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  original_code()->ShortPrint(out);
9899fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - code: ");
9909fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  code()->ShortPrint(out);
9919fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - break_points: ");
9929fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  break_points()->Print(out);
9939fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
9949fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9959fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
9969fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid BreakPointInfo::BreakPointInfoPrint(FILE* out) {
9979fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  HeapObject::PrintHeader(out, "BreakPointInfo");
9989fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - code_position: %d", code_position()->value());
9999fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - source_position: %d", source_position()->value());
10009fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - statement_position: %d", statement_position()->value());
10019fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n - break_point_objects: ");
10029fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  break_point_objects()->ShortPrint(out);
10039fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
10049fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#endif  // ENABLE_DEBUGGER_SUPPORT
10059fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
10069fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
10079fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockvoid DescriptorArray::PrintDescriptors(FILE* out) {
10089fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "Descriptor array  %d\n", number_of_descriptors());
10099fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  for (int i = 0; i < number_of_descriptors(); i++) {
10109fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    PrintF(out, " %d: ", i);
10119fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    Descriptor desc;
10129fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    Get(i, &desc);
10139fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block    desc.Print(out);
10149fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  }
10159fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block  PrintF(out, "\n");
10169fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block}
10179fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
10189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
10199fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block#endif  // OBJECT_PRINT
10209fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
10219fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block
10229fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block} }  // namespace v8::internal
1023