v8  3.11.10(node0.8.26)
V8 is Google's open source JavaScript engine
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
string-stream.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 "factory.h"
31 #include "string-stream.h"
32 
33 #include "allocation-inl.h"
34 
35 namespace v8 {
36 namespace internal {
37 
38 static const int kMentionedObjectCacheMaxSize = 256;
39 
40 char* HeapStringAllocator::allocate(unsigned bytes) {
41  space_ = NewArray<char>(bytes);
42  return space_;
43 }
44 
45 
47  unsigned size) {
48  size_ = size;
49  space_ = memory;
50 }
51 
52 
53 bool StringStream::Put(char c) {
54  if (full()) return false;
55  ASSERT(length_ < capacity_);
56  // Since the trailing '\0' is not accounted for in length_ fullness is
57  // indicated by a difference of 1 between length_ and capacity_. Thus when
58  // reaching a difference of 2 we need to grow the buffer.
59  if (length_ == capacity_ - 2) {
60  unsigned new_capacity = capacity_;
61  char* new_buffer = allocator_->grow(&new_capacity);
62  if (new_capacity > capacity_) {
63  capacity_ = new_capacity;
64  buffer_ = new_buffer;
65  } else {
66  // Reached the end of the available buffer.
67  ASSERT(capacity_ >= 5);
68  length_ = capacity_ - 1; // Indicate fullness of the stream.
69  buffer_[length_ - 4] = '.';
70  buffer_[length_ - 3] = '.';
71  buffer_[length_ - 2] = '.';
72  buffer_[length_ - 1] = '\n';
73  buffer_[length_] = '\0';
74  return false;
75  }
76  }
77  buffer_[length_] = c;
78  buffer_[length_ + 1] = '\0';
79  length_++;
80  return true;
81 }
82 
83 
84 // A control character is one that configures a format element. For
85 // instance, in %.5s, .5 are control characters.
86 static bool IsControlChar(char c) {
87  switch (c) {
88  case '0': case '1': case '2': case '3': case '4': case '5':
89  case '6': case '7': case '8': case '9': case '.': case '-':
90  return true;
91  default:
92  return false;
93  }
94 }
95 
96 
98  // If we already ran out of space then return immediately.
99  if (full()) return;
100  int offset = 0;
101  int elm = 0;
102  while (offset < format.length()) {
103  if (format[offset] != '%' || elm == elms.length()) {
104  Put(format[offset]);
105  offset++;
106  continue;
107  }
108  // Read this formatting directive into a temporary buffer
110  int format_length = 0;
111  // Skip over the whole control character sequence until the
112  // format element type
113  temp[format_length++] = format[offset++];
114  while (offset < format.length() && IsControlChar(format[offset]))
115  temp[format_length++] = format[offset++];
116  if (offset >= format.length())
117  return;
118  char type = format[offset];
119  temp[format_length++] = type;
120  temp[format_length] = '\0';
121  offset++;
122  FmtElm current = elms[elm++];
123  switch (type) {
124  case 's': {
125  ASSERT_EQ(FmtElm::C_STR, current.type_);
126  const char* value = current.data_.u_c_str_;
127  Add(value);
128  break;
129  }
130  case 'w': {
131  ASSERT_EQ(FmtElm::LC_STR, current.type_);
132  Vector<const uc16> value = *current.data_.u_lc_str_;
133  for (int i = 0; i < value.length(); i++)
134  Put(static_cast<char>(value[i]));
135  break;
136  }
137  case 'o': {
138  ASSERT_EQ(FmtElm::OBJ, current.type_);
139  Object* obj = current.data_.u_obj_;
140  PrintObject(obj);
141  break;
142  }
143  case 'k': {
144  ASSERT_EQ(FmtElm::INT, current.type_);
145  int value = current.data_.u_int_;
146  if (0x20 <= value && value <= 0x7F) {
147  Put(value);
148  } else if (value <= 0xff) {
149  Add("\\x%02x", value);
150  } else {
151  Add("\\u%04x", value);
152  }
153  break;
154  }
155  case 'i': case 'd': case 'u': case 'x': case 'c': case 'X': {
156  int value = current.data_.u_int_;
157  EmbeddedVector<char, 24> formatted;
158  int length = OS::SNPrintF(formatted, temp.start(), value);
159  Add(Vector<const char>(formatted.start(), length));
160  break;
161  }
162  case 'f': case 'g': case 'G': case 'e': case 'E': {
163  double value = current.data_.u_double_;
164  EmbeddedVector<char, 28> formatted;
165  OS::SNPrintF(formatted, temp.start(), value);
166  Add(formatted.start());
167  break;
168  }
169  case 'p': {
170  void* value = current.data_.u_pointer_;
171  EmbeddedVector<char, 20> formatted;
172  OS::SNPrintF(formatted, temp.start(), value);
173  Add(formatted.start());
174  break;
175  }
176  default:
177  UNREACHABLE();
178  break;
179  }
180  }
181 
182  // Verify that the buffer is 0-terminated
183  ASSERT(buffer_[length_] == '\0');
184 }
185 
186 
187 void StringStream::PrintObject(Object* o) {
188  o->ShortPrint(this);
189  if (o->IsString()) {
191  return;
192  }
193  } else if (o->IsNumber() || o->IsOddball()) {
194  return;
195  }
196  if (o->IsHeapObject()) {
197  DebugObjectCache* debug_object_cache = Isolate::Current()->
198  string_stream_debug_object_cache();
199  for (int i = 0; i < debug_object_cache->length(); i++) {
200  if ((*debug_object_cache)[i] == o) {
201  Add("#%d#", i);
202  return;
203  }
204  }
205  if (debug_object_cache->length() < kMentionedObjectCacheMaxSize) {
206  Add("#%d#", debug_object_cache->length());
207  debug_object_cache->Add(HeapObject::cast(o));
208  } else {
209  Add("@%p", o);
210  }
211  }
212 }
213 
214 
215 void StringStream::Add(const char* format) {
216  Add(CStrVector(format));
217 }
218 
219 
221  Add(format, Vector<FmtElm>::empty());
222 }
223 
224 
225 void StringStream::Add(const char* format, FmtElm arg0) {
226  const char argc = 1;
227  FmtElm argv[argc] = { arg0 };
228  Add(CStrVector(format), Vector<FmtElm>(argv, argc));
229 }
230 
231 
232 void StringStream::Add(const char* format, FmtElm arg0, FmtElm arg1) {
233  const char argc = 2;
234  FmtElm argv[argc] = { arg0, arg1 };
235  Add(CStrVector(format), Vector<FmtElm>(argv, argc));
236 }
237 
238 
239 void StringStream::Add(const char* format, FmtElm arg0, FmtElm arg1,
240  FmtElm arg2) {
241  const char argc = 3;
242  FmtElm argv[argc] = { arg0, arg1, arg2 };
243  Add(CStrVector(format), Vector<FmtElm>(argv, argc));
244 }
245 
246 
247 void StringStream::Add(const char* format, FmtElm arg0, FmtElm arg1,
248  FmtElm arg2, FmtElm arg3) {
249  const char argc = 4;
250  FmtElm argv[argc] = { arg0, arg1, arg2, arg3 };
251  Add(CStrVector(format), Vector<FmtElm>(argv, argc));
252 }
253 
254 
256  char* str = NewArray<char>(length_ + 1);
257  memcpy(str, buffer_, length_);
258  str[length_] = '\0';
259  return SmartArrayPointer<const char>(str);
260 }
261 
262 
264  LOG(ISOLATE, StringEvent("StackDump", buffer_));
265 }
266 
267 
268 void StringStream::OutputToFile(FILE* out) {
269  // Dump the output to stdout, but make sure to break it up into
270  // manageable chunks to avoid losing parts of the output in the OS
271  // printing code. This is a problem on Windows in particular; see
272  // the VPrint() function implementations in platform-win32.cc.
273  unsigned position = 0;
274  for (unsigned next; (next = position + 2048) < length_; position = next) {
275  char save = buffer_[next];
276  buffer_[next] = '\0';
277  internal::PrintF(out, "%s", &buffer_[position]);
278  buffer_[next] = save;
279  }
280  internal::PrintF(out, "%s", &buffer_[position]);
281 }
282 
283 
285  return FACTORY->NewStringFromUtf8(Vector<const char>(buffer_, length_));
286 }
287 
288 
290  Isolate* isolate = Isolate::Current();
291  isolate->set_string_stream_current_security_token(NULL);
292  if (isolate->string_stream_debug_object_cache() == NULL) {
293  isolate->set_string_stream_debug_object_cache(
295  }
296  isolate->string_stream_debug_object_cache()->Clear();
297 }
298 
299 
300 #ifdef DEBUG
301 bool StringStream::IsMentionedObjectCacheClear() {
302  return (
303  Isolate::Current()->string_stream_debug_object_cache()->length() == 0);
304 }
305 #endif
306 
307 
309  return Put(str, 0, str->length());
310 }
311 
312 
313 bool StringStream::Put(String* str, int start, int end) {
314  StringInputBuffer name_buffer(str);
315  name_buffer.Seek(start);
316  for (int i = start; i < end && name_buffer.has_more(); i++) {
317  int c = name_buffer.GetNext();
318  if (c >= 127 || c < 32) {
319  c = '?';
320  }
321  if (!Put(c)) {
322  return false; // Output was truncated.
323  }
324  }
325  return true;
326 }
327 
328 
330  if (name->IsString()) {
331  String* str = String::cast(name);
332  if (str->length() > 0) {
333  Put(str);
334  } else {
335  Add("/* anonymous */");
336  }
337  } else {
338  Add("%o", name);
339  }
340 }
341 
342 
344  Map* map = js_object->map();
345  if (!HEAP->Contains(map) ||
346  !map->IsHeapObject() ||
347  !map->IsMap()) {
348  Add("<Invalid map>\n");
349  return;
350  }
351  DescriptorArray* descs = map->instance_descriptors();
352  for (int i = 0; i < descs->number_of_descriptors(); i++) {
353  if (descs->GetType(i) == FIELD) {
354  Object* key = descs->GetKey(i);
355  if (key->IsString() || key->IsNumber()) {
356  int len = 3;
357  if (key->IsString()) {
358  len = String::cast(key)->length();
359  }
360  for (; len < 18; len++)
361  Put(' ');
362  if (key->IsString()) {
363  Put(String::cast(key));
364  } else {
365  key->ShortPrint();
366  }
367  Add(": ");
368  Object* value = js_object->FastPropertyAt(descs->GetFieldIndex(i));
369  Add("%o\n", value);
370  }
371  }
372  }
373 }
374 
375 
376 void StringStream::PrintFixedArray(FixedArray* array, unsigned int limit) {
377  Heap* heap = HEAP;
378  for (unsigned int i = 0; i < 10 && i < limit; i++) {
379  Object* element = array->get(i);
380  if (element != heap->the_hole_value()) {
381  for (int len = 1; len < 18; len++)
382  Put(' ');
383  Add("%d: %o\n", i, array->get(i));
384  }
385  }
386  if (limit >= 10) {
387  Add(" ...\n");
388  }
389 }
390 
391 
393  unsigned int limit = byte_array->length();
394  for (unsigned int i = 0; i < 10 && i < limit; i++) {
395  byte b = byte_array->get(i);
396  Add(" %d: %3d 0x%02x", i, b, b);
397  if (b >= ' ' && b <= '~') {
398  Add(" '%c'", b);
399  } else if (b == '\n') {
400  Add(" '\n'");
401  } else if (b == '\r') {
402  Add(" '\r'");
403  } else if (b >= 1 && b <= 26) {
404  Add(" ^%c", b + 'A' - 1);
405  }
406  Add("\n");
407  }
408  if (limit >= 10) {
409  Add(" ...\n");
410  }
411 }
412 
413 
415  DebugObjectCache* debug_object_cache =
416  Isolate::Current()->string_stream_debug_object_cache();
417  Add("==== Key ============================================\n\n");
418  for (int i = 0; i < debug_object_cache->length(); i++) {
419  HeapObject* printee = (*debug_object_cache)[i];
420  Add(" #%d# %p: ", i, printee);
421  printee->ShortPrint(this);
422  Add("\n");
423  if (printee->IsJSObject()) {
424  if (printee->IsJSValue()) {
425  Add(" value(): %o\n", JSValue::cast(printee)->value());
426  }
427  PrintUsingMap(JSObject::cast(printee));
428  if (printee->IsJSArray()) {
429  JSArray* array = JSArray::cast(printee);
430  if (array->HasFastObjectElements()) {
431  unsigned int limit = FixedArray::cast(array->elements())->length();
432  unsigned int length =
433  static_cast<uint32_t>(JSArray::cast(array)->length()->Number());
434  if (length < limit) limit = length;
435  PrintFixedArray(FixedArray::cast(array->elements()), limit);
436  }
437  }
438  } else if (printee->IsByteArray()) {
440  } else if (printee->IsFixedArray()) {
441  unsigned int limit = FixedArray::cast(printee)->length();
442  PrintFixedArray(FixedArray::cast(printee), limit);
443  }
444  }
445 }
446 
447 
449  Isolate* isolate = Isolate::Current();
450  Heap* heap = isolate->heap();
451  if (!f->IsHeapObject() || !heap->Contains(HeapObject::cast(f))) {
452  return;
453  }
454  Map* map = HeapObject::cast(f)->map();
455  if (!map->IsHeapObject() ||
456  !heap->Contains(map) ||
457  !map->IsMap() ||
458  !f->IsJSFunction()) {
459  return;
460  }
461 
462  JSFunction* fun = JSFunction::cast(f);
463  Object* perhaps_context = fun->unchecked_context();
464  if (perhaps_context->IsHeapObject() &&
465  heap->Contains(HeapObject::cast(perhaps_context)) &&
466  perhaps_context->IsContext()) {
467  Context* context = fun->context();
468  if (!heap->Contains(context)) {
469  Add("(Function context is outside heap)\n");
470  return;
471  }
472  Object* token = context->global_context()->security_token();
473  if (token != isolate->string_stream_current_security_token()) {
474  Add("Security context: %o\n", token);
475  isolate->set_string_stream_current_security_token(token);
476  }
477  } else {
478  Add("(Function context is corrupt)\n");
479  }
480 }
481 
482 
483 void StringStream::PrintFunction(Object* f, Object* receiver, Code** code) {
484  if (f->IsHeapObject() &&
485  HEAP->Contains(HeapObject::cast(f)) &&
486  HEAP->Contains(HeapObject::cast(f)->map()) &&
487  HeapObject::cast(f)->map()->IsMap()) {
488  if (f->IsJSFunction()) {
489  JSFunction* fun = JSFunction::cast(f);
490  // Common case: on-stack function present and resolved.
491  PrintPrototype(fun, receiver);
492  *code = fun->code();
493  } else if (f->IsSymbol()) {
494  // Unresolved and megamorphic calls: Instead of the function
495  // we have the function name on the stack.
496  PrintName(f);
497  Add("/* unresolved */ ");
498  } else {
499  // Unless this is the frame of a built-in function, we should always have
500  // the callee function or name on the stack. If we don't, we have a
501  // problem or a change of the stack frame layout.
502  Add("%o", f);
503  Add("/* warning: no JSFunction object or function name found */ ");
504  }
505  /* } else if (is_trampoline()) {
506  Print("trampoline ");
507  */
508  } else {
509  if (!f->IsHeapObject()) {
510  Add("/* warning: 'function' was not a heap object */ ");
511  return;
512  }
513  if (!HEAP->Contains(HeapObject::cast(f))) {
514  Add("/* warning: 'function' was not on the heap */ ");
515  return;
516  }
517  if (!HEAP->Contains(HeapObject::cast(f)->map())) {
518  Add("/* warning: function's map was not on the heap */ ");
519  return;
520  }
521  if (!HeapObject::cast(f)->map()->IsMap()) {
522  Add("/* warning: function's map was not a valid map */ ");
523  return;
524  }
525  Add("/* warning: Invalid JSFunction object found */ ");
526  }
527 }
528 
529 
531  Object* name = fun->shared()->name();
532  bool print_name = false;
533  Heap* heap = HEAP;
534  for (Object* p = receiver; p != heap->null_value(); p = p->GetPrototype()) {
535  if (p->IsJSObject()) {
536  Object* key = JSObject::cast(p)->SlowReverseLookup(fun);
537  if (key != heap->undefined_value()) {
538  if (!name->IsString() ||
539  !key->IsString() ||
540  !String::cast(name)->Equals(String::cast(key))) {
541  print_name = true;
542  }
543  if (name->IsString() && String::cast(name)->length() == 0) {
544  print_name = false;
545  }
546  name = key;
547  }
548  } else {
549  print_name = true;
550  }
551  }
552  PrintName(name);
553  // Also known as - if the name in the function doesn't match the name under
554  // which it was looked up.
555  if (print_name) {
556  Add("(aka ");
557  PrintName(fun->shared()->name());
558  Put(')');
559  }
560 }
561 
562 
563 char* HeapStringAllocator::grow(unsigned* bytes) {
564  unsigned new_bytes = *bytes * 2;
565  // Check for overflow.
566  if (new_bytes <= *bytes) {
567  return space_;
568  }
569  char* new_space = NewArray<char>(new_bytes);
570  if (new_space == NULL) {
571  return space_;
572  }
573  memcpy(new_space, space_, *bytes);
574  *bytes = new_bytes;
575  DeleteArray(space_);
576  space_ = new_space;
577  return new_space;
578 }
579 
580 
581 // Only grow once to the maximum allowable size.
582 char* NoAllocationStringAllocator::grow(unsigned* bytes) {
583  ASSERT(size_ >= *bytes);
584  *bytes = size_;
585  return space_;
586 }
587 
588 
589 } } // namespace v8::internal
char * allocate(unsigned bytes)
virtual void Seek(unsigned pos)
Definition: objects.cc:6604
void PrintF(const char *format,...)
Definition: v8utils.cc:40
static String * cast(Object *obj)
#define LOG(isolate, Call)
Definition: log.h:81
value format" "after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false, "print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false, "print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false, "report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true, "garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true, "flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true, "use incremental marking") DEFINE_bool(incremental_marking_steps, true, "do incremental marking steps") DEFINE_bool(trace_incremental_marking, false, "trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true, "Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false, "Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true, "use inline caching") DEFINE_bool(native_code_counters, false, "generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false, "Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true, "Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false, "Never perform compaction on full GC-testing only") DEFINE_bool(compact_code_space, true, "Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true, "Flush inline caches prior to mark compact collection and" "flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0, "Default seed for initializing random generator" "(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true, "allows verbose printing") DEFINE_bool(allow_natives_syntax, false, "allow natives syntax") DEFINE_bool(trace_sim, false, "Trace simulator execution") DEFINE_bool(check_icache, false, "Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8, "Stack alingment in bytes in simulator(4 or 8, 8 is default)") DEFINE_bool(trace_exception, false, "print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false, "preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true, "randomize hashes to avoid predictable hash collisions" "(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0, "Fixed seed to use to hash property keys(0 means random)" "(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false, "activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true, "generate optimized regexp code") DEFINE_bool(testing_bool_flag, true, "testing_bool_flag") DEFINE_int(testing_int_flag, 13, "testing_int_flag") DEFINE_float(testing_float_flag, 2.5, "float-flag") DEFINE_string(testing_string_flag, "Hello, world!", "string-flag") DEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness") DEFINE_string(testing_serialization_file, "/tmp/serdes", "file in which to serialize heap") DEFINE_bool(help, false, "Print usage message, including flags, on console") DEFINE_bool(dump_counters, false, "Dump counters on exit") DEFINE_string(map_counters, "", "Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT, "Pass all remaining arguments to the script.Alias for\"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#43"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2#define FLAG_MODE_DEFINE_DEFAULTS#1"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flag-definitions.h"1#define FLAG_FULL(ftype, ctype, nam, def, cmt)#define FLAG_READONLY(ftype, ctype, nam, def, cmt)#define DEFINE_implication(whenflag, thenflag)#define DEFINE_bool(nam, def, cmt)#define DEFINE_int(nam, def, cmt)#define DEFINE_float(nam, def, cmt)#define DEFINE_string(nam, def, cmt)#define DEFINE_args(nam, def, cmt)#define FLAG DEFINE_bool(use_strict, false,"enforce strict mode") DEFINE_bool(es5_readonly, false,"activate correct semantics for inheriting readonliness") DEFINE_bool(es52_globals, false,"activate new semantics for global var declarations") DEFINE_bool(harmony_typeof, false,"enable harmony semantics for typeof") DEFINE_bool(harmony_scoping, false,"enable harmony block scoping") DEFINE_bool(harmony_modules, false,"enable harmony modules (implies block scoping)") DEFINE_bool(harmony_proxies, false,"enable harmony proxies") DEFINE_bool(harmony_collections, false,"enable harmony collections (sets, maps, and weak maps)") DEFINE_bool(harmony, false,"enable all harmony features (except typeof)") DEFINE_implication(harmony, harmony_scoping) DEFINE_implication(harmony, harmony_modules) DEFINE_implication(harmony, harmony_proxies) DEFINE_implication(harmony, harmony_collections) DEFINE_implication(harmony_modules, harmony_scoping) DEFINE_bool(packed_arrays, false,"optimizes arrays that have no holes") DEFINE_bool(smi_only_arrays, true,"tracks arrays with only smi values") DEFINE_bool(clever_optimizations, true,"Optimize object size, Array shift, DOM strings and string +") DEFINE_bool(unbox_double_arrays, true,"automatically unbox arrays of doubles") DEFINE_bool(string_slices, true,"use string slices") DEFINE_bool(crankshaft, true,"use crankshaft") DEFINE_string(hydrogen_filter,"","optimization filter") DEFINE_bool(use_range, true,"use hydrogen range analysis") DEFINE_bool(eliminate_dead_phis, true,"eliminate dead phis") DEFINE_bool(use_gvn, true,"use hydrogen global value numbering") DEFINE_bool(use_canonicalizing, true,"use hydrogen instruction canonicalizing") DEFINE_bool(use_inlining, true,"use function inlining") DEFINE_int(max_inlined_source_size, 600,"maximum source size in bytes considered for a single inlining") DEFINE_int(max_inlined_nodes, 196,"maximum number of AST nodes considered for a single inlining") DEFINE_int(max_inlined_nodes_cumulative, 196,"maximum cumulative number of AST nodes considered for inlining") DEFINE_bool(loop_invariant_code_motion, true,"loop invariant code motion") DEFINE_bool(collect_megamorphic_maps_from_stub_cache, true,"crankshaft harvests type feedback from stub cache") DEFINE_bool(hydrogen_stats, false,"print statistics for hydrogen") DEFINE_bool(trace_hydrogen, false,"trace generated hydrogen to file") DEFINE_string(trace_phase,"Z","trace generated IR for specified phases") DEFINE_bool(trace_inlining, false,"trace inlining decisions") DEFINE_bool(trace_alloc, false,"trace register allocator") DEFINE_bool(trace_all_uses, false,"trace all use positions") DEFINE_bool(trace_range, false,"trace range analysis") DEFINE_bool(trace_gvn, false,"trace global value numbering") DEFINE_bool(trace_representation, false,"trace representation types") DEFINE_bool(stress_pointer_maps, false,"pointer map for every instruction") DEFINE_bool(stress_environments, false,"environment for every instruction") DEFINE_int(deopt_every_n_times, 0,"deoptimize every n times a deopt point is passed") DEFINE_bool(trap_on_deopt, false,"put a break point before deoptimizing") DEFINE_bool(deoptimize_uncommon_cases, true,"deoptimize uncommon cases") DEFINE_bool(polymorphic_inlining, true,"polymorphic inlining") DEFINE_bool(use_osr, true,"use on-stack replacement") DEFINE_bool(array_bounds_checks_elimination, false,"perform array bounds checks elimination") DEFINE_bool(array_index_dehoisting, false,"perform array index dehoisting") DEFINE_bool(trace_osr, false,"trace on-stack replacement") DEFINE_int(stress_runs, 0,"number of stress runs") DEFINE_bool(optimize_closures, true,"optimize closures") DEFINE_bool(inline_construct, true,"inline constructor calls") DEFINE_bool(inline_arguments, true,"inline functions with arguments object") DEFINE_int(loop_weight, 1,"loop weight for representation inference") DEFINE_bool(optimize_for_in, true,"optimize functions containing for-in loops") DEFINE_bool(experimental_profiler, true,"enable all profiler experiments") DEFINE_bool(watch_ic_patching, false,"profiler considers IC stability") DEFINE_int(frame_count, 1,"number of stack frames inspected by the profiler") DEFINE_bool(self_optimization, false,"primitive functions trigger their own optimization") DEFINE_bool(direct_self_opt, false,"call recompile stub directly when self-optimizing") DEFINE_bool(retry_self_opt, false,"re-try self-optimization if it failed") DEFINE_bool(count_based_interrupts, false,"trigger profiler ticks based on counting instead of timing") DEFINE_bool(interrupt_at_exit, false,"insert an interrupt check at function exit") DEFINE_bool(weighted_back_edges, false,"weight back edges by jump distance for interrupt triggering") DEFINE_int(interrupt_budget, 5900,"execution budget before interrupt is triggered") DEFINE_int(type_info_threshold, 15,"percentage of ICs that must have type info to allow optimization") DEFINE_int(self_opt_count, 130,"call count before self-optimization") DEFINE_implication(experimental_profiler, watch_ic_patching) DEFINE_implication(experimental_profiler, self_optimization) DEFINE_implication(experimental_profiler, retry_self_opt) DEFINE_implication(experimental_profiler, count_based_interrupts) DEFINE_implication(experimental_profiler, interrupt_at_exit) DEFINE_implication(experimental_profiler, weighted_back_edges) DEFINE_bool(trace_opt_verbose, false,"extra verbose compilation tracing") DEFINE_implication(trace_opt_verbose, trace_opt) DEFINE_bool(debug_code, false,"generate extra code (assertions) for debugging") DEFINE_bool(code_comments, false,"emit comments in code disassembly") DEFINE_bool(enable_sse2, true,"enable use of SSE2 instructions if available") DEFINE_bool(enable_sse3, true,"enable use of SSE3 instructions if available") DEFINE_bool(enable_sse4_1, true,"enable use of SSE4.1 instructions if available") DEFINE_bool(enable_cmov, true,"enable use of CMOV instruction if available") DEFINE_bool(enable_rdtsc, true,"enable use of RDTSC instruction if available") DEFINE_bool(enable_sahf, true,"enable use of SAHF instruction if available (X64 only)") DEFINE_bool(enable_vfp3, true,"enable use of VFP3 instructions if available - this implies ""enabling ARMv7 instructions (ARM only)") DEFINE_bool(enable_armv7, true,"enable use of ARMv7 instructions if available (ARM only)") DEFINE_bool(enable_fpu, true,"enable use of MIPS FPU instructions if available (MIPS only)") DEFINE_string(expose_natives_as, NULL,"expose natives in global object") DEFINE_string(expose_debug_as, NULL,"expose debug in global object") DEFINE_bool(expose_gc, false,"expose gc extension") DEFINE_bool(expose_externalize_string, false,"expose externalize string extension") DEFINE_int(stack_trace_limit, 10,"number of stack frames to capture") DEFINE_bool(builtins_in_stack_traces, false,"show built-in functions in stack traces") DEFINE_bool(disable_native_files, false,"disable builtin natives files") DEFINE_bool(inline_new, true,"use fast inline allocation") DEFINE_bool(stack_trace_on_abort, true,"print a stack trace if an assertion failure occurs") DEFINE_bool(trace, false,"trace function calls") DEFINE_bool(mask_constants_with_cookie, true,"use random jit cookie to mask large constants") DEFINE_bool(lazy, true,"use lazy compilation") DEFINE_bool(trace_opt, false,"trace lazy optimization") DEFINE_bool(trace_opt_stats, false,"trace lazy optimization statistics") DEFINE_bool(opt, true,"use adaptive optimizations") DEFINE_bool(always_opt, false,"always try to optimize functions") DEFINE_bool(prepare_always_opt, false,"prepare for turning on always opt") DEFINE_bool(trace_deopt, false,"trace deoptimization") DEFINE_int(min_preparse_length, 1024,"minimum length for automatic enable preparsing") DEFINE_bool(always_full_compiler, false,"try to use the dedicated run-once backend for all code") DEFINE_bool(trace_bailout, false,"print reasons for falling back to using the classic V8 backend") DEFINE_bool(compilation_cache, true,"enable compilation cache") DEFINE_bool(cache_prototype_transitions, true,"cache prototype transitions") DEFINE_bool(trace_debug_json, false,"trace debugging JSON request/response") DEFINE_bool(debugger_auto_break, true,"automatically set the debug break flag when debugger commands are ""in the queue") DEFINE_bool(enable_liveedit, true,"enable liveedit experimental feature") DEFINE_bool(break_on_abort, true,"always cause a debug break before aborting") DEFINE_int(stack_size, kPointerSize *123,"default size of stack region v8 is allowed to use (in kBytes)") DEFINE_int(max_stack_trace_source_length, 300,"maximum length of function source code printed in a stack trace.") DEFINE_bool(always_inline_smi_code, false,"always inline smi code in non-opt code") DEFINE_int(max_new_space_size, 0,"max size of the new generation (in kBytes)") DEFINE_int(max_old_space_size, 0,"max size of the old generation (in Mbytes)") DEFINE_int(max_executable_size, 0,"max size of executable memory (in Mbytes)") DEFINE_bool(gc_global, false,"always perform global GCs") DEFINE_int(gc_interval,-1,"garbage collect after <n> allocations") DEFINE_bool(trace_gc, false,"print one trace line following each garbage collection") DEFINE_bool(trace_gc_nvp, false,"print one detailed trace line in name=value format ""after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false,"print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false,"print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false,"report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true,"garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true,"flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true,"use incremental marking") DEFINE_bool(incremental_marking_steps, true,"do incremental marking steps") DEFINE_bool(trace_incremental_marking, false,"trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true,"Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false,"Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true,"use inline caching") DEFINE_bool(native_code_counters, false,"generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false,"Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true,"Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false,"Never perform compaction on full GC - testing only") DEFINE_bool(compact_code_space, true,"Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true,"Flush inline caches prior to mark compact collection and ""flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0,"Default seed for initializing random generator ""(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true,"allows verbose printing") DEFINE_bool(allow_natives_syntax, false,"allow natives syntax") DEFINE_bool(trace_sim, false,"Trace simulator execution") DEFINE_bool(check_icache, false,"Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0,"Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8,"Stack alingment in bytes in simulator (4 or 8, 8 is default)") DEFINE_bool(trace_exception, false,"print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false,"preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true,"randomize hashes to avoid predictable hash collisions ""(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0,"Fixed seed to use to hash property keys (0 means random)""(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false,"activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true,"generate optimized regexp code") DEFINE_bool(testing_bool_flag, true,"testing_bool_flag") DEFINE_int(testing_int_flag, 13,"testing_int_flag") DEFINE_float(testing_float_flag, 2.5,"float-flag") DEFINE_string(testing_string_flag,"Hello, world!","string-flag") DEFINE_int(testing_prng_seed, 42,"Seed used for threading test randomness") DEFINE_string(testing_serialization_file,"/tmp/serdes","file in which to serialize heap") DEFINE_bool(help, false,"Print usage message, including flags, on console") DEFINE_bool(dump_counters, false,"Dump counters on exit") DEFINE_string(map_counters,"","Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT,"Pass all remaining arguments to the script. Alias for \"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#47"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2 namespace{struct Flag{enum FlagType{TYPE_BOOL, TYPE_INT, TYPE_FLOAT, TYPE_STRING, TYPE_ARGS} name
Definition: flags.cc:1349
static HeapObject * cast(Object *obj)
void PrintSecurityTokenIfChanged(Object *function)
static ByteArray * cast(Object *obj)
Context * global_context()
Definition: contexts.cc:58
#define ASSERT(condition)
Definition: checks.h:270
Object * SlowReverseLookup(Object *value)
Definition: objects.cc:4818
void PrintPrototype(JSFunction *fun, Object *receiver)
void PrintUsingMap(JSObject *js_object)
List< HeapObject *, PreallocatedStorageAllocationPolicy > DebugObjectCache
Definition: isolate.h:318
Handle< String > ToString()
bool Equals(String *other)
Definition: objects-inl.h:2275
void Add(Vector< const char > format, Vector< FmtElm > elms)
uint8_t byte
Definition: globals.h:171
void PrintFixedArray(FixedArray *array, unsigned int limit)
String * GetKey(int descriptor_number)
Definition: objects-inl.h:1970
char * grow(unsigned *bytes)
#define UNREACHABLE()
Definition: checks.h:50
T * start() const
Definition: utils.h:389
NoAllocationStringAllocator(char *memory, unsigned size)
const char * u_c_str_
int GetFieldIndex(int descriptor_number)
Definition: objects-inl.h:2014
int length() const
Definition: utils.h:383
Object * FastPropertyAt(int index)
Definition: objects-inl.h:1521
void PrintByteArray(ByteArray *ba)
Vector< const char > CStrVector(const char *data)
Definition: utils.h:525
static JSArray * cast(Object *obj)
static const int kMaxShortPrintLength
Definition: objects.h:7173
static int SNPrintF(Vector< char > str, const char *format,...)
#define ISOLATE
Definition: isolate.h:1410
byte get(int index)
Definition: objects-inl.h:2566
PropertyType GetType(int descriptor_number)
Definition: objects-inl.h:2009
bool Contains(Address addr)
Definition: heap.cc:5224
const Vector< const uc16 > * u_lc_str_
static JSValue * cast(Object *obj)
Definition: objects-inl.h:4327
#define HEAP
Definition: isolate.h:1408
#define ASSERT_EQ(v1, v2)
Definition: checks.h:271
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 trace on stack replacement optimize closures functions with arguments object optimize functions containing for in loops profiler considers IC stability primitive functions trigger their own optimization re try self optimization if it failed insert an interrupt check at function exit execution budget before interrupt is triggered call count before self optimization self_optimization count_based_interrupts weighted_back_edges trace_opt 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 enable use of ARMv7 instructions if enable use of MIPS FPU instructions if NULL
Definition: flags.cc:274
void PrintFunction(Object *function, Object *receiver, Code **code)
static FixedArray * cast(Object *obj)
#define FACTORY
Definition: isolate.h:1409
Object * get(int index)
Definition: objects-inl.h:1675
virtual char * grow(unsigned *bytes)=0
void OutputToFile(FILE *out)
static void ClearMentionedObjectCache()
SmartArrayPointer< const char > ToCString() const
void DeleteArray(T *array)
Definition: allocation.h:91
static JSObject * cast(Object *obj)
FlagType type() const
Definition: flags.cc:1358
static JSFunction * cast(Object *obj)