v8  3.14.5(node0.10.28)
V8 is Google's open source JavaScript engine
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
objects-printer.cc
Go to the documentation of this file.
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 
28 #include "v8.h"
29 
30 #include "disassembler.h"
31 #include "disasm.h"
32 #include "jsregexp.h"
33 #include "objects-visiting.h"
34 
35 namespace v8 {
36 namespace internal {
37 
38 #ifdef OBJECT_PRINT
39 
40 static const char* TypeToString(InstanceType type);
41 
42 
43 void MaybeObject::Print(FILE* out) {
44  Object* this_as_object;
45  if (ToObject(&this_as_object)) {
46  if (this_as_object->IsSmi()) {
47  Smi::cast(this_as_object)->SmiPrint(out);
48  } else {
49  HeapObject::cast(this_as_object)->HeapObjectPrint(out);
50  }
51  } else {
52  Failure::cast(this)->FailurePrint(out);
53  }
54  Flush(out);
55 }
56 
57 
58 void MaybeObject::PrintLn(FILE* out) {
59  Print(out);
60  PrintF(out, "\n");
61 }
62 
63 
64 void HeapObject::PrintHeader(FILE* out, const char* id) {
65  PrintF(out, "%p: [%s]\n", reinterpret_cast<void*>(this), id);
66 }
67 
68 
69 void HeapObject::HeapObjectPrint(FILE* out) {
70  InstanceType instance_type = map()->instance_type();
71 
72  HandleScope scope;
73  if (instance_type < FIRST_NONSTRING_TYPE) {
74  String::cast(this)->StringPrint(out);
75  return;
76  }
77 
78  switch (instance_type) {
79  case MAP_TYPE:
80  Map::cast(this)->MapPrint(out);
81  break;
82  case HEAP_NUMBER_TYPE:
84  break;
86  FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(out);
87  break;
88  case FIXED_ARRAY_TYPE:
89  FixedArray::cast(this)->FixedArrayPrint(out);
90  break;
91  case BYTE_ARRAY_TYPE:
92  ByteArray::cast(this)->ByteArrayPrint(out);
93  break;
94  case FREE_SPACE_TYPE:
95  FreeSpace::cast(this)->FreeSpacePrint(out);
96  break;
98  ExternalPixelArray::cast(this)->ExternalPixelArrayPrint(out);
99  break;
101  ExternalByteArray::cast(this)->ExternalByteArrayPrint(out);
102  break;
105  ->ExternalUnsignedByteArrayPrint(out);
106  break;
108  ExternalShortArray::cast(this)->ExternalShortArrayPrint(out);
109  break;
112  ->ExternalUnsignedShortArrayPrint(out);
113  break;
115  ExternalIntArray::cast(this)->ExternalIntArrayPrint(out);
116  break;
118  ExternalUnsignedIntArray::cast(this)->ExternalUnsignedIntArrayPrint(out);
119  break;
121  ExternalFloatArray::cast(this)->ExternalFloatArrayPrint(out);
122  break;
124  ExternalDoubleArray::cast(this)->ExternalDoubleArrayPrint(out);
125  break;
126  case FILLER_TYPE:
127  PrintF(out, "filler");
128  break;
129  case JS_OBJECT_TYPE: // fall through
131  case JS_ARRAY_TYPE:
132  case JS_REGEXP_TYPE:
133  JSObject::cast(this)->JSObjectPrint(out);
134  break;
135  case ODDBALL_TYPE:
136  Oddball::cast(this)->to_string()->Print(out);
137  break;
138  case JS_MODULE_TYPE:
139  JSModule::cast(this)->JSModulePrint(out);
140  break;
141  case JS_FUNCTION_TYPE:
142  JSFunction::cast(this)->JSFunctionPrint(out);
143  break;
145  JSGlobalProxy::cast(this)->JSGlobalProxyPrint(out);
146  break;
148  JSGlobalObject::cast(this)->JSGlobalObjectPrint(out);
149  break;
151  JSBuiltinsObject::cast(this)->JSBuiltinsObjectPrint(out);
152  break;
153  case JS_VALUE_TYPE:
154  PrintF(out, "Value wrapper around:");
155  JSValue::cast(this)->value()->Print(out);
156  break;
157  case JS_DATE_TYPE:
158  JSDate::cast(this)->JSDatePrint(out);
159  break;
160  case CODE_TYPE:
161  Code::cast(this)->CodePrint(out);
162  break;
163  case JS_PROXY_TYPE:
164  JSProxy::cast(this)->JSProxyPrint(out);
165  break;
167  JSFunctionProxy::cast(this)->JSFunctionProxyPrint(out);
168  break;
169  case JS_WEAK_MAP_TYPE:
170  JSWeakMap::cast(this)->JSWeakMapPrint(out);
171  break;
172  case FOREIGN_TYPE:
173  Foreign::cast(this)->ForeignPrint(out);
174  break;
176  SharedFunctionInfo::cast(this)->SharedFunctionInfoPrint(out);
177  break;
179  JSMessageObject::cast(this)->JSMessageObjectPrint(out);
180  break;
182  JSGlobalPropertyCell::cast(this)->JSGlobalPropertyCellPrint(out);
183  break;
184 #define MAKE_STRUCT_CASE(NAME, Name, name) \
185  case NAME##_TYPE: \
186  Name::cast(this)->Name##Print(out); \
187  break;
189 #undef MAKE_STRUCT_CASE
190 
191  default:
192  PrintF(out, "UNKNOWN TYPE %d", map()->instance_type());
193  UNREACHABLE();
194  break;
195  }
196 }
197 
198 
199 void ByteArray::ByteArrayPrint(FILE* out) {
200  PrintF(out, "byte array, data starts at %p", GetDataStartAddress());
201 }
202 
203 
204 void FreeSpace::FreeSpacePrint(FILE* out) {
205  PrintF(out, "free space, size %d", Size());
206 }
207 
208 
209 void ExternalPixelArray::ExternalPixelArrayPrint(FILE* out) {
210  PrintF(out, "external pixel array");
211 }
212 
213 
214 void ExternalByteArray::ExternalByteArrayPrint(FILE* out) {
215  PrintF(out, "external byte array");
216 }
217 
218 
219 void ExternalUnsignedByteArray::ExternalUnsignedByteArrayPrint(FILE* out) {
220  PrintF(out, "external unsigned byte array");
221 }
222 
223 
224 void ExternalShortArray::ExternalShortArrayPrint(FILE* out) {
225  PrintF(out, "external short array");
226 }
227 
228 
229 void ExternalUnsignedShortArray::ExternalUnsignedShortArrayPrint(FILE* out) {
230  PrintF(out, "external unsigned short array");
231 }
232 
233 
234 void ExternalIntArray::ExternalIntArrayPrint(FILE* out) {
235  PrintF(out, "external int array");
236 }
237 
238 
239 void ExternalUnsignedIntArray::ExternalUnsignedIntArrayPrint(FILE* out) {
240  PrintF(out, "external unsigned int array");
241 }
242 
243 
244 void ExternalFloatArray::ExternalFloatArrayPrint(FILE* out) {
245  PrintF(out, "external float array");
246 }
247 
248 
249 void ExternalDoubleArray::ExternalDoubleArrayPrint(FILE* out) {
250  PrintF(out, "external double array");
251 }
252 
253 
254 void JSObject::PrintProperties(FILE* out) {
255  if (HasFastProperties()) {
256  DescriptorArray* descs = map()->instance_descriptors();
257  for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) {
258  PrintF(out, " ");
259  descs->GetKey(i)->StringPrint(out);
260  PrintF(out, ": ");
261  switch (descs->GetType(i)) {
262  case FIELD: {
263  int index = descs->GetFieldIndex(i);
264  FastPropertyAt(index)->ShortPrint(out);
265  PrintF(out, " (field at offset %d)\n", index);
266  break;
267  }
268  case CONSTANT_FUNCTION:
269  descs->GetConstantFunction(i)->ShortPrint(out);
270  PrintF(out, " (constant function)\n");
271  break;
272  case CALLBACKS:
273  descs->GetCallbacksObject(i)->ShortPrint(out);
274  PrintF(out, " (callback)\n");
275  break;
276  case NORMAL: // only in slow mode
277  case HANDLER: // only in lookup results, not in descriptors
278  case INTERCEPTOR: // only in lookup results, not in descriptors
279  // There are no transitions in the descriptor array.
280  case TRANSITION:
281  case NONEXISTENT:
282  UNREACHABLE();
283  break;
284  }
285  }
286  } else {
287  property_dictionary()->Print(out);
288  }
289 }
290 
291 
292 void JSObject::PrintElements(FILE* out) {
293  // Don't call GetElementsKind, its validation code can cause the printer to
294  // fail when debugging.
295  switch (map()->elements_kind()) {
297  case FAST_SMI_ELEMENTS:
298  case FAST_HOLEY_ELEMENTS:
299  case FAST_ELEMENTS: {
300  // Print in array notation for non-sparse arrays.
301  FixedArray* p = FixedArray::cast(elements());
302  for (int i = 0; i < p->length(); i++) {
303  PrintF(out, " %d: ", i);
304  p->get(i)->ShortPrint(out);
305  PrintF(out, "\n");
306  }
307  break;
308  }
310  case FAST_DOUBLE_ELEMENTS: {
311  // Print in array notation for non-sparse arrays.
312  if (elements()->length() > 0) {
313  FixedDoubleArray* p = FixedDoubleArray::cast(elements());
314  for (int i = 0; i < p->length(); i++) {
315  if (p->is_the_hole(i)) {
316  PrintF(out, " %d: <the hole>", i);
317  } else {
318  PrintF(out, " %d: %g", i, p->get_scalar(i));
319  }
320  PrintF(out, "\n");
321  }
322  }
323  break;
324  }
326  ExternalPixelArray* p = ExternalPixelArray::cast(elements());
327  for (int i = 0; i < p->length(); i++) {
328  PrintF(out, " %d: %d\n", i, p->get_scalar(i));
329  }
330  break;
331  }
332  case EXTERNAL_BYTE_ELEMENTS: {
333  ExternalByteArray* p = ExternalByteArray::cast(elements());
334  for (int i = 0; i < p->length(); i++) {
335  PrintF(out, " %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
336  }
337  break;
338  }
340  ExternalUnsignedByteArray* p =
342  for (int i = 0; i < p->length(); i++) {
343  PrintF(out, " %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
344  }
345  break;
346  }
348  ExternalShortArray* p = ExternalShortArray::cast(elements());
349  for (int i = 0; i < p->length(); i++) {
350  PrintF(out, " %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
351  }
352  break;
353  }
355  ExternalUnsignedShortArray* p =
357  for (int i = 0; i < p->length(); i++) {
358  PrintF(out, " %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
359  }
360  break;
361  }
362  case EXTERNAL_INT_ELEMENTS: {
363  ExternalIntArray* p = ExternalIntArray::cast(elements());
364  for (int i = 0; i < p->length(); i++) {
365  PrintF(out, " %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
366  }
367  break;
368  }
370  ExternalUnsignedIntArray* p =
371  ExternalUnsignedIntArray::cast(elements());
372  for (int i = 0; i < p->length(); i++) {
373  PrintF(out, " %d: %d\n", i, static_cast<int>(p->get_scalar(i)));
374  }
375  break;
376  }
378  ExternalFloatArray* p = ExternalFloatArray::cast(elements());
379  for (int i = 0; i < p->length(); i++) {
380  PrintF(out, " %d: %f\n", i, p->get_scalar(i));
381  }
382  break;
383  }
385  ExternalDoubleArray* p = ExternalDoubleArray::cast(elements());
386  for (int i = 0; i < p->length(); i++) {
387  PrintF(out, " %d: %f\n", i, p->get_scalar(i));
388  }
389  break;
390  }
391  case DICTIONARY_ELEMENTS:
392  elements()->Print(out);
393  break;
395  FixedArray* p = FixedArray::cast(elements());
396  for (int i = 2; i < p->length(); i++) {
397  PrintF(out, " %d: ", i);
398  p->get(i)->ShortPrint(out);
399  PrintF(out, "\n");
400  }
401  break;
402  }
403  }
404 }
405 
406 
407 void JSObject::PrintTransitions(FILE* out) {
408  if (!map()->HasTransitionArray()) return;
409  TransitionArray* transitions = map()->transitions();
410  for (int i = 0; i < transitions->number_of_transitions(); i++) {
411  PrintF(out, " ");
412  transitions->GetKey(i)->StringPrint(out);
413  PrintF(out, ": ");
414  switch (transitions->GetTargetDetails(i).type()) {
415  case FIELD: {
416  PrintF(out, " (transition to field)\n");
417  break;
418  }
419  case CONSTANT_FUNCTION:
420  PrintF(out, " (transition to constant function)\n");
421  break;
422  case CALLBACKS:
423  PrintF(out, " (transition to callback)\n");
424  break;
425  // Values below are never in the target descriptor array.
426  case NORMAL:
427  case HANDLER:
428  case INTERCEPTOR:
429  case TRANSITION:
430  case NONEXISTENT:
431  UNREACHABLE();
432  break;
433  }
434  }
435 }
436 
437 
438 void JSObject::JSObjectPrint(FILE* out) {
439  PrintF(out, "%p: [JSObject]\n", reinterpret_cast<void*>(this));
440  PrintF(out, " - map = %p [", reinterpret_cast<void*>(map()));
441  // Don't call GetElementsKind, its validation code can cause the printer to
442  // fail when debugging.
443  PrintElementsKind(out, this->map()->elements_kind());
444  PrintF(out,
445  "]\n - prototype = %p\n",
446  reinterpret_cast<void*>(GetPrototype()));
447  PrintF(out, " {\n");
448  PrintProperties(out);
449  PrintTransitions(out);
450  PrintElements(out);
451  PrintF(out, " }\n");
452 }
453 
454 
455 void JSModule::JSModulePrint(FILE* out) {
456  HeapObject::PrintHeader(out, "JSModule");
457  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
458  PrintF(out, " - context = ");
459  context()->Print(out);
460  PrintF(out, " - scope_info = ");
461  scope_info()->ShortPrint(out);
462  PrintElementsKind(out, this->map()->elements_kind());
463  PrintF(out, " {\n");
464  PrintProperties(out);
465  PrintElements(out);
466  PrintF(out, " }\n");
467 }
468 
469 
470 static const char* TypeToString(InstanceType type) {
471  switch (type) {
472  case INVALID_TYPE: return "INVALID";
473  case MAP_TYPE: return "MAP";
474  case HEAP_NUMBER_TYPE: return "HEAP_NUMBER";
475  case SYMBOL_TYPE: return "SYMBOL";
476  case ASCII_SYMBOL_TYPE: return "ASCII_SYMBOL";
477  case CONS_SYMBOL_TYPE: return "CONS_SYMBOL";
478  case CONS_ASCII_SYMBOL_TYPE: return "CONS_ASCII_SYMBOL";
481  case EXTERNAL_SYMBOL_TYPE: return "EXTERNAL_SYMBOL";
484  case SHORT_EXTERNAL_SYMBOL_TYPE: return "SHORT_EXTERNAL_SYMBOL";
485  case ASCII_STRING_TYPE: return "ASCII_STRING";
486  case STRING_TYPE: return "TWO_BYTE_STRING";
487  case CONS_STRING_TYPE:
488  case CONS_ASCII_STRING_TYPE: return "CONS_STRING";
491  case EXTERNAL_STRING_TYPE: return "EXTERNAL_STRING";
494  case SHORT_EXTERNAL_STRING_TYPE: return "SHORT_EXTERNAL_STRING";
495  case FIXED_ARRAY_TYPE: return "FIXED_ARRAY";
496  case BYTE_ARRAY_TYPE: return "BYTE_ARRAY";
497  case FREE_SPACE_TYPE: return "FREE_SPACE";
498  case EXTERNAL_PIXEL_ARRAY_TYPE: return "EXTERNAL_PIXEL_ARRAY";
499  case EXTERNAL_BYTE_ARRAY_TYPE: return "EXTERNAL_BYTE_ARRAY";
501  return "EXTERNAL_UNSIGNED_BYTE_ARRAY";
502  case EXTERNAL_SHORT_ARRAY_TYPE: return "EXTERNAL_SHORT_ARRAY";
504  return "EXTERNAL_UNSIGNED_SHORT_ARRAY";
505  case EXTERNAL_INT_ARRAY_TYPE: return "EXTERNAL_INT_ARRAY";
507  return "EXTERNAL_UNSIGNED_INT_ARRAY";
508  case EXTERNAL_FLOAT_ARRAY_TYPE: return "EXTERNAL_FLOAT_ARRAY";
509  case EXTERNAL_DOUBLE_ARRAY_TYPE: return "EXTERNAL_DOUBLE_ARRAY";
510  case FILLER_TYPE: return "FILLER";
511  case JS_OBJECT_TYPE: return "JS_OBJECT";
512  case JS_CONTEXT_EXTENSION_OBJECT_TYPE: return "JS_CONTEXT_EXTENSION_OBJECT";
513  case ODDBALL_TYPE: return "ODDBALL";
514  case JS_GLOBAL_PROPERTY_CELL_TYPE: return "JS_GLOBAL_PROPERTY_CELL";
515  case SHARED_FUNCTION_INFO_TYPE: return "SHARED_FUNCTION_INFO";
516  case JS_MODULE_TYPE: return "JS_MODULE";
517  case JS_FUNCTION_TYPE: return "JS_FUNCTION";
518  case CODE_TYPE: return "CODE";
519  case JS_ARRAY_TYPE: return "JS_ARRAY";
520  case JS_PROXY_TYPE: return "JS_PROXY";
521  case JS_WEAK_MAP_TYPE: return "JS_WEAK_MAP";
522  case JS_REGEXP_TYPE: return "JS_REGEXP";
523  case JS_VALUE_TYPE: return "JS_VALUE";
524  case JS_GLOBAL_OBJECT_TYPE: return "JS_GLOBAL_OBJECT";
525  case JS_BUILTINS_OBJECT_TYPE: return "JS_BUILTINS_OBJECT";
526  case JS_GLOBAL_PROXY_TYPE: return "JS_GLOBAL_PROXY";
527  case FOREIGN_TYPE: return "FOREIGN";
528  case JS_MESSAGE_OBJECT_TYPE: return "JS_MESSAGE_OBJECT_TYPE";
529 #define MAKE_STRUCT_CASE(NAME, Name, name) case NAME##_TYPE: return #NAME;
531 #undef MAKE_STRUCT_CASE
532  default: return "UNKNOWN";
533  }
534 }
535 
536 
537 void Map::MapPrint(FILE* out) {
538  HeapObject::PrintHeader(out, "Map");
539  PrintF(out, " - type: %s\n", TypeToString(instance_type()));
540  PrintF(out, " - instance size: %d\n", instance_size());
541  PrintF(out, " - inobject properties: %d\n", inobject_properties());
542  PrintF(out, " - elements kind: ");
544  PrintF(out, "\n - pre-allocated property fields: %d\n",
546  PrintF(out, " - unused property fields: %d\n", unused_property_fields());
547  if (is_hidden_prototype()) {
548  PrintF(out, " - hidden_prototype\n");
549  }
550  if (has_named_interceptor()) {
551  PrintF(out, " - named_interceptor\n");
552  }
553  if (has_indexed_interceptor()) {
554  PrintF(out, " - indexed_interceptor\n");
555  }
556  if (is_undetectable()) {
557  PrintF(out, " - undetectable\n");
558  }
560  PrintF(out, " - instance_call_handler\n");
561  }
562  if (is_access_check_needed()) {
563  PrintF(out, " - access_check_needed\n");
564  }
565  PrintF(out, " - back pointer: ");
566  GetBackPointer()->ShortPrint(out);
567  PrintF(out, "\n - instance descriptors %i #%i: ",
570  instance_descriptors()->ShortPrint(out);
571  if (HasTransitionArray()) {
572  PrintF(out, "\n - transitions: ");
573  transitions()->ShortPrint(out);
574  }
575  PrintF(out, "\n - prototype: ");
576  prototype()->ShortPrint(out);
577  PrintF(out, "\n - constructor: ");
578  constructor()->ShortPrint(out);
579  PrintF(out, "\n - code cache: ");
580  code_cache()->ShortPrint(out);
581  PrintF(out, "\n");
582 }
583 
584 
585 void CodeCache::CodeCachePrint(FILE* out) {
586  HeapObject::PrintHeader(out, "CodeCache");
587  PrintF(out, "\n - default_cache: ");
588  default_cache()->ShortPrint(out);
589  PrintF(out, "\n - normal_type_cache: ");
590  normal_type_cache()->ShortPrint(out);
591 }
592 
593 
594 void PolymorphicCodeCache::PolymorphicCodeCachePrint(FILE* out) {
595  HeapObject::PrintHeader(out, "PolymorphicCodeCache");
596  PrintF(out, "\n - cache: ");
597  cache()->ShortPrint(out);
598 }
599 
600 
601 void TypeFeedbackInfo::TypeFeedbackInfoPrint(FILE* out) {
602  HeapObject::PrintHeader(out, "TypeFeedbackInfo");
603  PrintF(out, " - ic_total_count: %d, ic_with_type_info_count: %d\n",
605  PrintF(out, " - type_feedback_cells: ");
606  type_feedback_cells()->FixedArrayPrint(out);
607 }
608 
609 
610 void AliasedArgumentsEntry::AliasedArgumentsEntryPrint(FILE* out) {
611  HeapObject::PrintHeader(out, "AliasedArgumentsEntry");
612  PrintF(out, "\n - aliased_context_slot: %d", aliased_context_slot());
613 }
614 
615 
616 void FixedArray::FixedArrayPrint(FILE* out) {
617  HeapObject::PrintHeader(out, "FixedArray");
618  PrintF(out, " - length: %d", length());
619  for (int i = 0; i < length(); i++) {
620  PrintF(out, "\n [%d]: ", i);
621  get(i)->ShortPrint(out);
622  }
623  PrintF(out, "\n");
624 }
625 
626 
627 void FixedDoubleArray::FixedDoubleArrayPrint(FILE* out) {
628  HeapObject::PrintHeader(out, "FixedDoubleArray");
629  PrintF(out, " - length: %d", length());
630  for (int i = 0; i < length(); i++) {
631  if (is_the_hole(i)) {
632  PrintF(out, "\n [%d]: <the hole>", i);
633  } else {
634  PrintF(out, "\n [%d]: %g", i, get_scalar(i));
635  }
636  }
637  PrintF(out, "\n");
638 }
639 
640 
641 void JSValue::JSValuePrint(FILE* out) {
642  HeapObject::PrintHeader(out, "ValueObject");
643  value()->Print(out);
644 }
645 
646 
647 void JSMessageObject::JSMessageObjectPrint(FILE* out) {
648  HeapObject::PrintHeader(out, "JSMessageObject");
649  PrintF(out, " - type: ");
650  type()->ShortPrint(out);
651  PrintF(out, "\n - arguments: ");
652  arguments()->ShortPrint(out);
653  PrintF(out, "\n - start_position: %d", start_position());
654  PrintF(out, "\n - end_position: %d", end_position());
655  PrintF(out, "\n - script: ");
656  script()->ShortPrint(out);
657  PrintF(out, "\n - stack_trace: ");
658  stack_trace()->ShortPrint(out);
659  PrintF(out, "\n - stack_frames: ");
660  stack_frames()->ShortPrint(out);
661  PrintF(out, "\n");
662 }
663 
664 
665 void String::StringPrint(FILE* out) {
666  if (StringShape(this).IsSymbol()) {
667  PrintF(out, "#");
668  } else if (StringShape(this).IsCons()) {
669  PrintF(out, "c\"");
670  } else {
671  PrintF(out, "\"");
672  }
673 
674  const char truncated_epilogue[] = "...<truncated>";
675  int len = length();
676  if (!FLAG_use_verbose_printer) {
677  if (len > 100) {
678  len = 100 - sizeof(truncated_epilogue);
679  }
680  }
681  for (int i = 0; i < len; i++) {
682  PrintF(out, "%c", Get(i));
683  }
684  if (len != length()) {
685  PrintF(out, "%s", truncated_epilogue);
686  }
687 
688  if (!StringShape(this).IsSymbol()) PrintF(out, "\"");
689 }
690 
691 
692 // This method is only meant to be called from gdb for debugging purposes.
693 // Since the string can also be in two-byte encoding, non-ASCII characters
694 // will be ignored in the output.
695 char* String::ToAsciiArray() {
696  // Static so that subsequent calls frees previously allocated space.
697  // This also means that previous results will be overwritten.
698  static char* buffer = NULL;
699  if (buffer != NULL) free(buffer);
700  buffer = new char[length()+1];
701  WriteToFlat(this, buffer, 0, length());
702  buffer[length()] = 0;
703  return buffer;
704 }
705 
706 
707 static const char* const weekdays[] = {
708  "???", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
709 };
710 
711 void JSDate::JSDatePrint(FILE* out) {
712  HeapObject::PrintHeader(out, "JSDate");
713  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
714  PrintF(out, " - value = ");
715  value()->Print(out);
716  if (!year()->IsSmi()) {
717  PrintF(out, " - time = NaN\n");
718  } else {
719  PrintF(out, " - time = %s %04d/%02d/%02d %02d:%02d:%02d\n",
720  weekdays[weekday()->IsSmi() ? Smi::cast(weekday())->value() + 1 : 0],
721  year()->IsSmi() ? Smi::cast(year())->value() : -1,
722  month()->IsSmi() ? Smi::cast(month())->value() : -1,
723  day()->IsSmi() ? Smi::cast(day())->value() : -1,
724  hour()->IsSmi() ? Smi::cast(hour())->value() : -1,
725  min()->IsSmi() ? Smi::cast(min())->value() : -1,
726  sec()->IsSmi() ? Smi::cast(sec())->value() : -1);
727  }
728 }
729 
730 
731 void JSProxy::JSProxyPrint(FILE* out) {
732  HeapObject::PrintHeader(out, "JSProxy");
733  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
734  PrintF(out, " - handler = ");
735  handler()->Print(out);
736  PrintF(out, " - hash = ");
737  hash()->Print(out);
738  PrintF(out, "\n");
739 }
740 
741 
742 void JSFunctionProxy::JSFunctionProxyPrint(FILE* out) {
743  HeapObject::PrintHeader(out, "JSFunctionProxy");
744  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
745  PrintF(out, " - handler = ");
746  handler()->Print(out);
747  PrintF(out, " - call_trap = ");
748  call_trap()->Print(out);
749  PrintF(out, " - construct_trap = ");
750  construct_trap()->Print(out);
751  PrintF(out, "\n");
752 }
753 
754 
755 void JSWeakMap::JSWeakMapPrint(FILE* out) {
756  HeapObject::PrintHeader(out, "JSWeakMap");
757  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
758  PrintF(out, " - table = ");
759  table()->ShortPrint(out);
760  PrintF(out, "\n");
761 }
762 
763 
764 void JSFunction::JSFunctionPrint(FILE* out) {
765  HeapObject::PrintHeader(out, "Function");
766  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
767  PrintF(out, " - initial_map = ");
768  if (has_initial_map()) {
769  initial_map()->ShortPrint(out);
770  }
771  PrintF(out, "\n - shared_info = ");
772  shared()->ShortPrint(out);
773  PrintF(out, "\n - name = ");
774  shared()->name()->Print(out);
775  PrintF(out, "\n - context = ");
777  PrintF(out, "\n - literals = ");
778  literals()->ShortPrint(out);
779  PrintF(out, "\n - code = ");
780  code()->ShortPrint(out);
781  PrintF(out, "\n");
782 
783  PrintProperties(out);
784  PrintElements(out);
785 
786  PrintF(out, "\n");
787 }
788 
789 
790 void SharedFunctionInfo::SharedFunctionInfoPrint(FILE* out) {
791  HeapObject::PrintHeader(out, "SharedFunctionInfo");
792  PrintF(out, " - name: ");
793  name()->ShortPrint(out);
794  PrintF(out, "\n - expected_nof_properties: %d", expected_nof_properties());
795  PrintF(out, "\n - instance class name = ");
796  instance_class_name()->Print(out);
797  PrintF(out, "\n - code = ");
798  code()->ShortPrint(out);
799  if (HasSourceCode()) {
800  PrintF(out, "\n - source code = ");
801  String* source = String::cast(Script::cast(script())->source());
802  int start = start_position();
803  int length = end_position() - start;
804  SmartArrayPointer<char> source_string =
805  source->ToCString(DISALLOW_NULLS,
807  start, length, NULL);
808  PrintF(out, "%s", *source_string);
809  }
810  // Script files are often large, hard to read.
811  // PrintF(out, "\n - script =");
812  // script()->Print(out);
813  PrintF(out, "\n - function token position = %d", function_token_position());
814  PrintF(out, "\n - start position = %d", start_position());
815  PrintF(out, "\n - end position = %d", end_position());
816  PrintF(out, "\n - is expression = %d", is_expression());
817  PrintF(out, "\n - debug info = ");
818  debug_info()->ShortPrint(out);
819  PrintF(out, "\n - length = %d", length());
820  PrintF(out, "\n - has_only_simple_this_property_assignments = %d",
822  PrintF(out, "\n - this_property_assignments = ");
823  this_property_assignments()->ShortPrint(out);
824  PrintF(out, "\n");
825 }
826 
827 
828 void JSGlobalProxy::JSGlobalProxyPrint(FILE* out) {
829  PrintF(out, "global_proxy ");
830  JSObjectPrint(out);
831  PrintF(out, "native context : ");
832  native_context()->ShortPrint(out);
833  PrintF(out, "\n");
834 }
835 
836 
837 void JSGlobalObject::JSGlobalObjectPrint(FILE* out) {
838  PrintF(out, "global ");
839  JSObjectPrint(out);
840  PrintF(out, "native context : ");
841  native_context()->ShortPrint(out);
842  PrintF(out, "\n");
843 }
844 
845 
846 void JSBuiltinsObject::JSBuiltinsObjectPrint(FILE* out) {
847  PrintF(out, "builtins ");
848  JSObjectPrint(out);
849 }
850 
851 
852 void JSGlobalPropertyCell::JSGlobalPropertyCellPrint(FILE* out) {
853  HeapObject::PrintHeader(out, "JSGlobalPropertyCell");
854 }
855 
856 
857 void Code::CodePrint(FILE* out) {
858  HeapObject::PrintHeader(out, "Code");
859 #ifdef ENABLE_DISASSEMBLER
860  if (FLAG_use_verbose_printer) {
861  Disassemble(NULL, out);
862  }
863 #endif
864 }
865 
866 
867 void Foreign::ForeignPrint(FILE* out) {
868  PrintF(out, "foreign address : %p", foreign_address());
869 }
870 
871 
872 void AccessorInfo::AccessorInfoPrint(FILE* out) {
873  HeapObject::PrintHeader(out, "AccessorInfo");
874  PrintF(out, "\n - getter: ");
875  getter()->ShortPrint(out);
876  PrintF(out, "\n - setter: ");
877  setter()->ShortPrint(out);
878  PrintF(out, "\n - name: ");
879  name()->ShortPrint(out);
880  PrintF(out, "\n - data: ");
881  data()->ShortPrint(out);
882  PrintF(out, "\n - flag: ");
883  flag()->ShortPrint(out);
884 }
885 
886 
887 void AccessorPair::AccessorPairPrint(FILE* out) {
888  HeapObject::PrintHeader(out, "AccessorPair");
889  PrintF(out, "\n - getter: ");
890  getter()->ShortPrint(out);
891  PrintF(out, "\n - setter: ");
892  setter()->ShortPrint(out);
893 }
894 
895 
896 void AccessCheckInfo::AccessCheckInfoPrint(FILE* out) {
897  HeapObject::PrintHeader(out, "AccessCheckInfo");
898  PrintF(out, "\n - named_callback: ");
899  named_callback()->ShortPrint(out);
900  PrintF(out, "\n - indexed_callback: ");
901  indexed_callback()->ShortPrint(out);
902  PrintF(out, "\n - data: ");
903  data()->ShortPrint(out);
904 }
905 
906 
907 void InterceptorInfo::InterceptorInfoPrint(FILE* out) {
908  HeapObject::PrintHeader(out, "InterceptorInfo");
909  PrintF(out, "\n - getter: ");
910  getter()->ShortPrint(out);
911  PrintF(out, "\n - setter: ");
912  setter()->ShortPrint(out);
913  PrintF(out, "\n - query: ");
914  query()->ShortPrint(out);
915  PrintF(out, "\n - deleter: ");
916  deleter()->ShortPrint(out);
917  PrintF(out, "\n - enumerator: ");
918  enumerator()->ShortPrint(out);
919  PrintF(out, "\n - data: ");
920  data()->ShortPrint(out);
921 }
922 
923 
924 void CallHandlerInfo::CallHandlerInfoPrint(FILE* out) {
925  HeapObject::PrintHeader(out, "CallHandlerInfo");
926  PrintF(out, "\n - callback: ");
927  callback()->ShortPrint(out);
928  PrintF(out, "\n - data: ");
929  data()->ShortPrint(out);
930  PrintF(out, "\n - call_stub_cache: ");
931 }
932 
933 
934 void FunctionTemplateInfo::FunctionTemplateInfoPrint(FILE* out) {
935  HeapObject::PrintHeader(out, "FunctionTemplateInfo");
936  PrintF(out, "\n - class name: ");
937  class_name()->ShortPrint(out);
938  PrintF(out, "\n - tag: ");
939  tag()->ShortPrint(out);
940  PrintF(out, "\n - property_list: ");
941  property_list()->ShortPrint(out);
942  PrintF(out, "\n - serial_number: ");
943  serial_number()->ShortPrint(out);
944  PrintF(out, "\n - call_code: ");
945  call_code()->ShortPrint(out);
946  PrintF(out, "\n - property_accessors: ");
947  property_accessors()->ShortPrint(out);
948  PrintF(out, "\n - prototype_template: ");
949  prototype_template()->ShortPrint(out);
950  PrintF(out, "\n - parent_template: ");
951  parent_template()->ShortPrint(out);
952  PrintF(out, "\n - named_property_handler: ");
953  named_property_handler()->ShortPrint(out);
954  PrintF(out, "\n - indexed_property_handler: ");
955  indexed_property_handler()->ShortPrint(out);
956  PrintF(out, "\n - instance_template: ");
957  instance_template()->ShortPrint(out);
958  PrintF(out, "\n - signature: ");
959  signature()->ShortPrint(out);
960  PrintF(out, "\n - access_check_info: ");
961  access_check_info()->ShortPrint(out);
962  PrintF(out, "\n - hidden_prototype: %s",
963  hidden_prototype() ? "true" : "false");
964  PrintF(out, "\n - undetectable: %s", undetectable() ? "true" : "false");
965  PrintF(out, "\n - need_access_check: %s",
966  needs_access_check() ? "true" : "false");
967 }
968 
969 
970 void ObjectTemplateInfo::ObjectTemplateInfoPrint(FILE* out) {
971  HeapObject::PrintHeader(out, "ObjectTemplateInfo");
972  PrintF(out, " - tag: ");
973  tag()->ShortPrint(out);
974  PrintF(out, "\n - property_list: ");
975  property_list()->ShortPrint(out);
976  PrintF(out, "\n - constructor: ");
977  constructor()->ShortPrint(out);
978  PrintF(out, "\n - internal_field_count: ");
979  internal_field_count()->ShortPrint(out);
980  PrintF(out, "\n");
981 }
982 
983 
984 void SignatureInfo::SignatureInfoPrint(FILE* out) {
985  HeapObject::PrintHeader(out, "SignatureInfo");
986  PrintF(out, "\n - receiver: ");
987  receiver()->ShortPrint(out);
988  PrintF(out, "\n - args: ");
989  args()->ShortPrint(out);
990 }
991 
992 
993 void TypeSwitchInfo::TypeSwitchInfoPrint(FILE* out) {
994  HeapObject::PrintHeader(out, "TypeSwitchInfo");
995  PrintF(out, "\n - types: ");
996  types()->ShortPrint(out);
997 }
998 
999 
1000 void Script::ScriptPrint(FILE* out) {
1001  HeapObject::PrintHeader(out, "Script");
1002  PrintF(out, "\n - source: ");
1003  source()->ShortPrint(out);
1004  PrintF(out, "\n - name: ");
1005  name()->ShortPrint(out);
1006  PrintF(out, "\n - line_offset: ");
1007  line_offset()->ShortPrint(out);
1008  PrintF(out, "\n - column_offset: ");
1009  column_offset()->ShortPrint(out);
1010  PrintF(out, "\n - type: ");
1011  type()->ShortPrint(out);
1012  PrintF(out, "\n - id: ");
1013  id()->ShortPrint(out);
1014  PrintF(out, "\n - data: ");
1015  data()->ShortPrint(out);
1016  PrintF(out, "\n - context data: ");
1017  context_data()->ShortPrint(out);
1018  PrintF(out, "\n - wrapper: ");
1019  wrapper()->ShortPrint(out);
1020  PrintF(out, "\n - compilation type: ");
1021  compilation_type()->ShortPrint(out);
1022  PrintF(out, "\n - line ends: ");
1023  line_ends()->ShortPrint(out);
1024  PrintF(out, "\n - eval from shared: ");
1025  eval_from_shared()->ShortPrint(out);
1026  PrintF(out, "\n - eval from instructions offset: ");
1027  eval_from_instructions_offset()->ShortPrint(out);
1028  PrintF(out, "\n");
1029 }
1030 
1031 
1032 #ifdef ENABLE_DEBUGGER_SUPPORT
1033 void DebugInfo::DebugInfoPrint(FILE* out) {
1034  HeapObject::PrintHeader(out, "DebugInfo");
1035  PrintF(out, "\n - shared: ");
1036  shared()->ShortPrint(out);
1037  PrintF(out, "\n - original_code: ");
1038  original_code()->ShortPrint(out);
1039  PrintF(out, "\n - code: ");
1040  code()->ShortPrint(out);
1041  PrintF(out, "\n - break_points: ");
1042  break_points()->Print(out);
1043 }
1044 
1045 
1046 void BreakPointInfo::BreakPointInfoPrint(FILE* out) {
1047  HeapObject::PrintHeader(out, "BreakPointInfo");
1048  PrintF(out, "\n - code_position: %d", code_position()->value());
1049  PrintF(out, "\n - source_position: %d", source_position()->value());
1050  PrintF(out, "\n - statement_position: %d", statement_position()->value());
1051  PrintF(out, "\n - break_point_objects: ");
1052  break_point_objects()->ShortPrint(out);
1053 }
1054 #endif // ENABLE_DEBUGGER_SUPPORT
1055 
1056 
1057 void DescriptorArray::PrintDescriptors(FILE* out) {
1058  PrintF(out, "Descriptor array %d\n", number_of_descriptors());
1059  for (int i = 0; i < number_of_descriptors(); i++) {
1060  PrintF(out, " %d: ", i);
1061  Descriptor desc;
1062  Get(i, &desc);
1063  desc.Print(out);
1064  }
1065  PrintF(out, "\n");
1066 }
1067 
1068 
1069 void TransitionArray::PrintTransitions(FILE* out) {
1070  PrintF(out, "Transition array %d\n", number_of_transitions());
1071  for (int i = 0; i < number_of_transitions(); i++) {
1072  PrintF(out, " %d: ", i);
1073  GetKey(i)->StringPrint(out);
1074  PrintF(out, ": ");
1075  switch (GetTargetDetails(i).type()) {
1076  case FIELD: {
1077  PrintF(out, " (transition to field)\n");
1078  break;
1079  }
1080  case CONSTANT_FUNCTION:
1081  PrintF(out, " (transition to constant function)\n");
1082  break;
1083  case CALLBACKS:
1084  PrintF(out, " (transition to callback)\n");
1085  break;
1086  // Values below are never in the target descriptor array.
1087  case NORMAL:
1088  case HANDLER:
1089  case INTERCEPTOR:
1090  case TRANSITION:
1091  case NONEXISTENT:
1092  UNREACHABLE();
1093  break;
1094  }
1095  }
1096  PrintF(out, "\n");
1097 }
1098 
1099 
1100 #endif // OBJECT_PRINT
1101 
1102 
1103 } } // namespace v8::internal
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset kAccessCheckInfoOffset eval_from_instructions_offset
Definition: objects-inl.h:3892
bool is_hidden_prototype()
Definition: objects.h:4725
void PrintF(const char *format,...)
Definition: v8utils.cc:40
static String * cast(Object *obj)
int unused_property_fields()
Definition: objects-inl.h:3019
int NumberOfOwnDescriptors()
Definition: objects.h:4944
static HeapObject * cast(Object *obj)
bool is_access_check_needed()
Definition: objects-inl.h:3082
static JSBuiltinsObject * cast(Object *obj)
void Get(int descriptor_number, Descriptor *desc)
Definition: objects-inl.h:2164
static Map * cast(Object *obj)
static ByteArray * cast(Object *obj)
static FreeSpace * cast(Object *obj)
static Foreign * cast(Object *obj)
FixedArray * literals()
Definition: objects-inl.h:4494
v8::Handle< v8::Value > Print(const v8::Arguments &args)
static ExternalUnsignedShortArray * cast(Object *obj)
static Script * cast(Object *obj)
kPropertyAccessorsOffset kNamedPropertyHandlerOffset instance_template
Definition: objects-inl.h:3860
static SharedFunctionInfo * cast(Object *obj)
static Code * cast(Object *obj)
static Smi * cast(Object *object)
static ExternalShortArray * cast(Object *obj)
bool has_instance_call_handler()
Definition: objects.h:4766
static JSFunctionProxy * cast(Object *obj)
#define UNREACHABLE()
Definition: checks.h:50
static JSGlobalProxy * cast(Object *obj)
static ExternalIntArray * cast(Object *obj)
int pre_allocated_property_fields()
Definition: objects-inl.h:2949
static Failure * cast(MaybeObject *object)
Definition: objects-inl.h:496
static Oddball * cast(Object *obj)
static ExternalUnsignedByteArray * cast(Object *obj)
kPropertyAccessorsOffset named_property_handler
Definition: objects-inl.h:3856
static FixedDoubleArray * cast(Object *obj)
Object * FastPropertyAt(int index)
Definition: objects-inl.h:1566
static ExternalPixelArray * cast(Object *obj)
double get_scalar(int index)
Definition: objects-inl.h:1783
static JSMessageObject * cast(Object *obj)
Definition: objects-inl.h:4634
String * GetKey(int transition_number)
static JSDate * cast(Object *obj)
Definition: objects-inl.h:4618
bool HasTransitionArray()
Definition: objects-inl.h:3675
static ExternalDoubleArray * cast(Object *obj)
static ExternalFloatArray * cast(Object *obj)
void PrintElementsKind(FILE *out, ElementsKind kind)
bool has_named_interceptor()
Definition: objects.h:4734
static HeapNumber * cast(Object *obj)
static void WriteToFlat(String *source, sinkchar *sink, int from, int to)
Definition: objects.cc:6891
#define STRUCT_LIST(V)
Definition: objects.h:448
static JSGlobalPropertyCell * cast(Object *obj)
bool has_indexed_interceptor()
Definition: objects.h:4743
Object * GetBackPointer()
Definition: objects-inl.h:3659
static JSValue * cast(Object *obj)
Definition: objects-inl.h:4600
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset kAccessCheckInfoOffset kEvalFrominstructionsOffsetOffset kInstanceClassNameOffset hidden_prototype
Definition: objects-inl.h:3923
bool is_undetectable()
Definition: objects.h:4757
static JSWeakMap * cast(Object *obj)
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset kAccessCheckInfoOffset kEvalFrominstructionsOffsetOffset instance_class_name
Definition: objects-inl.h:3912
InstanceType instance_type()
Definition: objects-inl.h:3009
static JSProxy * cast(Object *obj)
static FixedArray * cast(Object *obj)
ElementsKind elements_kind()
Definition: objects.h:4781
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if NULL
Definition: flags.cc:301
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
static ExternalByteArray * cast(Object *obj)
int aliased_context_slot()
void Flush(FILE *out)
Definition: v8utils.cc:65
static JSModule * cast(Object *obj)
Definition: objects-inl.h:4590
static ExternalUnsignedIntArray * cast(Object *obj)
StringDictionary * property_dictionary()
Definition: objects-inl.h:4899
static JSObject * cast(Object *obj)
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset access_check_info
Definition: objects-inl.h:3866
#define MAKE_STRUCT_CASE(NAME, Name, name)
PropertyDetails GetTargetDetails(int transition_number)
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset kAccessCheckInfoOffset kEvalFrominstructionsOffsetOffset kInstanceClassNameOffset flag
Definition: objects-inl.h:3923
static JSGlobalObject * cast(Object *obj)
static JSFunction * cast(Object *obj)