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
api.h
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 #ifndef V8_API_H_
29 #define V8_API_H_
30 
31 #include "v8.h"
32 
33 #include "../include/v8-testing.h"
34 #include "apiutils.h"
35 #include "contexts.h"
36 #include "factory.h"
37 #include "isolate.h"
38 #include "list-inl.h"
39 
40 namespace v8 {
41 
42 // Constants used in the implementation of the API. The most natural thing
43 // would usually be to place these with the classes that use them, but
44 // we want to keep them out of v8.h because it is an externally
45 // visible file.
46 class Consts {
47  public:
48  enum TemplateType {
51  };
52 };
53 
54 
55 // Utilities for working with neander-objects, primitive
56 // env-independent JSObjects used by the api.
58  public:
59  explicit NeanderObject(int size);
61  explicit inline NeanderObject(v8::internal::Object* obj);
62  inline v8::internal::Object* get(int index);
63  inline void set(int index, v8::internal::Object* value);
65  int size();
66  private:
68 };
69 
70 
71 // Utilities for working with neander-arrays, a simple extensible
72 // array abstraction built on neander-objects.
73 class NeanderArray {
74  public:
75  NeanderArray();
78  return obj_.value();
79  }
80 
82 
83  int length();
84 
85  v8::internal::Object* get(int index);
86  // Change the value at an index to undefined value. If the index is
87  // out of bounds, the request is ignored. Returns the old value.
88  void set(int index, v8::internal::Object* value);
89  private:
90  NeanderObject obj_;
91 };
92 
93 
95  : value_(v8::internal::Handle<v8::internal::JSObject>::cast(obj)) { }
96 
97 
99  : value_(v8::internal::Handle<v8::internal::JSObject>(
100  v8::internal::JSObject::cast(obj))) { }
101 
102 
104  : obj_(obj) { }
105 
106 
108  ASSERT(value()->HasFastObjectElements());
109  return v8::internal::FixedArray::cast(value()->elements())->get(offset);
110 }
111 
112 
113 void NeanderObject::set(int offset, v8::internal::Object* value) {
114  ASSERT(value_->HasFastObjectElements());
115  v8::internal::FixedArray::cast(value_->elements())->set(offset, value);
116 }
117 
118 
119 template <typename T> inline T ToCData(v8::internal::Object* obj) {
120  STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
121  return reinterpret_cast<T>(
122  reinterpret_cast<intptr_t>(
124 }
125 
126 
127 template <typename T>
129  STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
130  return FACTORY->NewForeign(
131  reinterpret_cast<v8::internal::Address>(reinterpret_cast<intptr_t>(obj)));
132 }
133 
134 
135 class ApiFunction {
136  public:
137  explicit ApiFunction(v8::internal::Address addr) : addr_(addr) { }
138  v8::internal::Address address() { return addr_; }
139  private:
140  v8::internal::Address addr_;
141 };
142 
143 
144 
146  public:
148  static void Register(RegisteredExtension* that);
149  static void UnregisterAll();
150  Extension* extension() { return extension_; }
151  RegisteredExtension* next() { return next_; }
152  RegisteredExtension* next_auto() { return next_auto_; }
153  static RegisteredExtension* first_extension() { return first_extension_; }
154  private:
155  Extension* extension_;
156  RegisteredExtension* next_;
157  RegisteredExtension* next_auto_;
158  static RegisteredExtension* first_extension_;
159 };
160 
161 
162 #define OPEN_HANDLE_LIST(V) \
163  V(Template, TemplateInfo) \
164  V(FunctionTemplate, FunctionTemplateInfo) \
165  V(ObjectTemplate, ObjectTemplateInfo) \
166  V(Signature, SignatureInfo) \
167  V(AccessorSignature, FunctionTemplateInfo) \
168  V(TypeSwitch, TypeSwitchInfo) \
169  V(Data, Object) \
170  V(RegExp, JSRegExp) \
171  V(Object, JSObject) \
172  V(Array, JSArray) \
173  V(String, String) \
174  V(Script, Object) \
175  V(Function, JSFunction) \
176  V(Message, JSObject) \
177  V(Context, Context) \
178  V(External, Foreign) \
179  V(StackTrace, JSArray) \
180  V(StackFrame, JSObject)
181 
182 
183 class Utils {
184  public:
185  static bool ReportApiFailure(const char* location, const char* message);
186 
189 
190  static inline Local<Context> ToLocal(
192  static inline Local<Value> ToLocal(
194  static inline Local<Function> ToLocal(
196  static inline Local<String> ToLocal(
198  static inline Local<RegExp> ToLocal(
200  static inline Local<Object> ToLocal(
202  static inline Local<Array> ToLocal(
204  static inline Local<External> ToLocal(
206  static inline Local<Message> MessageToLocal(
208  static inline Local<StackTrace> StackTraceToLocal(
210  static inline Local<StackFrame> StackFrameToLocal(
212  static inline Local<Number> NumberToLocal(
214  static inline Local<Integer> IntegerToLocal(
216  static inline Local<Uint32> Uint32ToLocal(
218  static inline Local<FunctionTemplate> ToLocal(
220  static inline Local<ObjectTemplate> ToLocal(
222  static inline Local<Signature> ToLocal(
226  static inline Local<TypeSwitch> ToLocal(
228 
229 #define DECLARE_OPEN_HANDLE(From, To) \
230  static inline v8::internal::Handle<v8::internal::To> \
231  OpenHandle(const From* that, bool allow_empty_handle = false);
232 
234 
235 #undef DECLARE_OPEN_HANDLE
236 };
237 
238 
239 template <class T>
241  return reinterpret_cast<T*>(obj.location());
242 }
243 
244 
245 template <class T>
247  v8::HandleScope* scope) {
249  if (!is_null()) {
250  handle = *this;
251  }
252  return Utils::OpenHandle(*scope->Close(Utils::ToLocal(handle)), true);
253 }
254 
255 
256 // Implementations of ToLocal
257 
258 #define MAKE_TO_LOCAL(Name, From, To) \
259  Local<v8::To> Utils::Name(v8::internal::Handle<v8::internal::From> obj) { \
260  ASSERT(obj.is_null() || !obj->IsTheHole()); \
261  return Local<To>(reinterpret_cast<To*>(obj.location())); \
262  }
263 
264 MAKE_TO_LOCAL(ToLocal, Context, Context)
265 MAKE_TO_LOCAL(ToLocal, Object, Value)
266 MAKE_TO_LOCAL(ToLocal, JSFunction, Function)
267 MAKE_TO_LOCAL(ToLocal, String, String)
268 MAKE_TO_LOCAL(ToLocal, JSRegExp, RegExp)
269 MAKE_TO_LOCAL(ToLocal, JSObject, Object)
270 MAKE_TO_LOCAL(ToLocal, JSArray, Array)
271 MAKE_TO_LOCAL(ToLocal, Foreign, External)
272 MAKE_TO_LOCAL(ToLocal, FunctionTemplateInfo, FunctionTemplate)
273 MAKE_TO_LOCAL(ToLocal, ObjectTemplateInfo, ObjectTemplate)
274 MAKE_TO_LOCAL(ToLocal, SignatureInfo, Signature)
275 MAKE_TO_LOCAL(AccessorSignatureToLocal, FunctionTemplateInfo, AccessorSignature)
276 MAKE_TO_LOCAL(ToLocal, TypeSwitchInfo, TypeSwitch)
277 MAKE_TO_LOCAL(MessageToLocal, Object, Message)
278 MAKE_TO_LOCAL(StackTraceToLocal, JSArray, StackTrace)
279 MAKE_TO_LOCAL(StackFrameToLocal, JSObject, StackFrame)
280 MAKE_TO_LOCAL(NumberToLocal, Object, Number)
281 MAKE_TO_LOCAL(IntegerToLocal, Object, Integer)
282 MAKE_TO_LOCAL(Uint32ToLocal, Object, Uint32)
283 
284 #undef MAKE_TO_LOCAL
285 
286 
287 // Implementations of OpenHandle
288 
289 #define MAKE_OPEN_HANDLE(From, To) \
290  v8::internal::Handle<v8::internal::To> Utils::OpenHandle( \
291  const v8::From* that, bool allow_empty_handle) { \
292  EXTRA_CHECK(allow_empty_handle || that != NULL); \
293  return v8::internal::Handle<v8::internal::To>( \
294  reinterpret_cast<v8::internal::To**>(const_cast<v8::From*>(that))); \
295  }
296 
298 
299 #undef MAKE_OPEN_HANDLE
300 #undef OPEN_HANDLE_LIST
301 
302 
303 namespace internal {
304 
305 // Tracks string usage to help make better decisions when
306 // externalizing strings.
307 //
308 // Implementation note: internally this class only tracks fresh
309 // strings and keeps a single use counter for them.
311  public:
312  // Records that the given string's characters were copied to some
313  // external buffer. If this happens often we should honor
314  // externalization requests for the string.
316  Address address = reinterpret_cast<Address>(*string);
317  Address top = isolate_->heap()->NewSpaceTop();
318  if (IsFreshString(address, top)) {
319  IncrementUseCount(top);
320  }
321  }
322 
323  // Estimates freshness and use frequency of the given string based
324  // on how close it is to the new space top and the recorded usage
325  // history.
326  inline bool IsFreshUnusedString(Handle<String> string) {
327  Address address = reinterpret_cast<Address>(*string);
328  Address top = isolate_->heap()->NewSpaceTop();
329  return IsFreshString(address, top) && IsUseCountLow(top);
330  }
331 
332  private:
333  StringTracker() : use_count_(0), last_top_(NULL), isolate_(NULL) { }
334 
335  static inline bool IsFreshString(Address string, Address top) {
336  return top - kFreshnessLimit <= string && string <= top;
337  }
338 
339  inline bool IsUseCountLow(Address top) {
340  if (last_top_ != top) return true;
341  return use_count_ < kUseLimit;
342  }
343 
344  inline void IncrementUseCount(Address top) {
345  if (last_top_ != top) {
346  use_count_ = 0;
347  last_top_ = top;
348  }
349  ++use_count_;
350  }
351 
352  // Single use counter shared by all fresh strings.
353  int use_count_;
354 
355  // Last new space top when the use count above was valid.
356  Address last_top_;
357 
358  Isolate* isolate_;
359 
360  // How close to the new space top a fresh string has to be.
361  static const int kFreshnessLimit = 1024;
362 
363  // The number of uses required to consider a string useful.
364  static const int kUseLimit = 32;
365 
366  friend class Isolate;
367 
369 };
370 
371 
373  public:
375 
376  private:
377  DeferredHandles(Object** first_block_limit, Isolate* isolate)
378  : next_(NULL),
379  previous_(NULL),
380  first_block_limit_(first_block_limit),
381  isolate_(isolate) {
382  isolate->LinkDeferredHandles(this);
383  }
384 
385  void Iterate(ObjectVisitor* v);
386 
387  List<Object**> blocks_;
388  DeferredHandles* next_;
389  DeferredHandles* previous_;
390  Object** first_block_limit_;
391  Isolate* isolate_;
392 
394  friend class Isolate;
395 };
396 
397 
398 // This class is here in order to be able to declare it a friend of
399 // HandleScope. Moving these methods to be members of HandleScope would be
400 // neat in some ways, but it would expose internal implementation details in
401 // our public header file, which is undesirable.
402 //
403 // An isolate has a single instance of this class to hold the current thread's
404 // data. In multithreaded V8 programs this data is copied in and out of storage
405 // so that the currently executing thread always has its own copy of this
406 // data.
408  public:
410  : isolate_(isolate),
411  blocks_(0),
412  entered_contexts_(0),
413  saved_contexts_(0),
414  spare_(NULL),
415  call_depth_(0),
416  last_handle_before_deferred_block_(NULL) { }
417 
419  DeleteArray(spare_);
420  }
421 
422  // Threading support for handle data.
423  static int ArchiveSpacePerThread();
424  char* RestoreThread(char* from);
425  char* ArchiveThread(char* to);
426  void FreeThreadResources();
427 
428  // Garbage collection support.
429  void Iterate(v8::internal::ObjectVisitor* v);
430  static char* Iterate(v8::internal::ObjectVisitor* v, char* data);
431 
432 
434  inline void DeleteExtensions(internal::Object** prev_limit);
435 
436  inline void IncrementCallDepth() {call_depth_++;}
437  inline void DecrementCallDepth() {call_depth_--;}
438  inline bool CallDepthIsZero() { return call_depth_ == 0; }
439 
440  inline void EnterContext(Handle<Object> context);
441  inline bool LeaveLastContext();
442 
443  // Returns the last entered context or an empty handle if no
444  // contexts have been entered.
446 
447  inline void SaveContext(Context* context);
448  inline Context* RestoreContext();
449  inline bool HasSavedContexts();
450 
451  inline List<internal::Object**>* blocks() { return &blocks_; }
452  Isolate* isolate() const { return isolate_; }
453 
454  void ReturnBlock(Object** block) {
455  ASSERT(block != NULL);
456  if (spare_ != NULL) DeleteArray(spare_);
457  spare_ = block;
458  }
459 
460  private:
461  void ResetAfterArchive() {
462  blocks_.Initialize(0);
463  entered_contexts_.Initialize(0);
464  saved_contexts_.Initialize(0);
465  spare_ = NULL;
466  last_handle_before_deferred_block_ = NULL;
467  call_depth_ = 0;
468  }
469 
470  void Free() {
471  ASSERT(blocks_.length() == 0);
472  ASSERT(entered_contexts_.length() == 0);
473  ASSERT(saved_contexts_.length() == 0);
474  blocks_.Free();
475  entered_contexts_.Free();
476  saved_contexts_.Free();
477  if (spare_ != NULL) {
478  DeleteArray(spare_);
479  spare_ = NULL;
480  }
481  ASSERT(call_depth_ == 0);
482  }
483 
484  void BeginDeferredScope();
485  DeferredHandles* Detach(Object** prev_limit);
486 
487  Isolate* isolate_;
488  List<internal::Object**> blocks_;
489  // Used as a stack to keep track of entered contexts.
490  List<Handle<Object> > entered_contexts_;
491  // Used as a stack to keep track of saved contexts.
492  List<Context*> saved_contexts_;
493  Object** spare_;
494  int call_depth_;
495  Object** last_handle_before_deferred_block_;
496  // This is only used for threading support.
498 
499  void IterateThis(ObjectVisitor* v);
500  char* RestoreThreadHelper(char* from);
501  char* ArchiveThreadHelper(char* to);
502 
503  friend class DeferredHandles;
504  friend class DeferredHandleScope;
505 
507 };
508 
509 
510 const int kHandleBlockSize = v8::internal::KB - 2; // fit in one page
511 
512 
514  saved_contexts_.Add(context);
515 }
516 
517 
519  return saved_contexts_.RemoveLast();
520 }
521 
522 
524  return !saved_contexts_.is_empty();
525 }
526 
527 
529  entered_contexts_.Add(context);
530 }
531 
532 
534  if (entered_contexts_.is_empty()) return false;
535  entered_contexts_.RemoveLast();
536  return true;
537 }
538 
539 
541  if (entered_contexts_.is_empty()) return Handle<Object>::null();
542  return entered_contexts_.last();
543 }
544 
545 
546 // If there's a spare block, use it for growing the current scope.
548  internal::Object** block = (spare_ != NULL) ?
549  spare_ :
550  NewArray<internal::Object*>(kHandleBlockSize);
551  spare_ = NULL;
552  return block;
553 }
554 
555 
557  while (!blocks_.is_empty()) {
558  internal::Object** block_start = blocks_.last();
559  internal::Object** block_limit = block_start + kHandleBlockSize;
560 #ifdef DEBUG
561  // NoHandleAllocation may make the prev_limit to point inside the block.
562  if (block_start <= prev_limit && prev_limit <= block_limit) break;
563 #else
564  if (prev_limit == block_limit) break;
565 #endif
566 
567  blocks_.RemoveLast();
568 #ifdef DEBUG
569  v8::ImplementationUtilities::ZapHandleRange(block_start, block_limit);
570 #endif
571  if (spare_ != NULL) {
572  DeleteArray(spare_);
573  }
574  spare_ = block_start;
575  }
576  ASSERT((blocks_.is_empty() && prev_limit == NULL) ||
577  (!blocks_.is_empty() && prev_limit != NULL));
578 }
579 
580 
581 class Testing {
582  public:
583  static v8::Testing::StressType stress_type() { return stress_type_; }
585  stress_type_ = stress_type;
586  }
587 
588  private:
589  static v8::Testing::StressType stress_type_;
590 };
591 
592 } } // namespace v8::internal
593 
594 #endif // V8_API_H_
byte * Address
Definition: globals.h:157
void SaveContext(Context *context)
Definition: api.h:513
static void set_stress_type(v8::Testing::StressType stress_type)
Definition: api.h:584
RegisteredExtension * next()
Definition: api.h:151
internal::Object ** GetSpareOrNewBlock()
Definition: api.h:547
HandleScopeImplementer(Isolate *isolate)
Definition: api.h:409
void RecordWrite(Handle< String > string)
Definition: api.h:315
v8::internal::Handle< v8::internal::JSObject > value()
Definition: api.h:77
void set(int index, v8::internal::Object *value)
Definition: api.cc:888
static Local< Number > NumberToLocal(v8::internal::Handle< v8::internal::Object > obj)
const int KB
Definition: globals.h:207
char * ArchiveThread(char *to)
Definition: api.cc:6508
friend class Isolate
Definition: api.h:366
static Local< AccessorSignature > AccessorSignatureToLocal(v8::internal::Handle< v8::internal::FunctionTemplateInfo > obj)
char * RestoreThread(char *from)
Definition: api.cc:6526
#define DECLARE_OPEN_HANDLE(From, To)
Definition: api.h:229
Definition: api.h:46
v8::HandleScope::Data HandleScopeData
Definition: apiutils.h:69
static Foreign * cast(Object *obj)
int length()
Definition: api.cc:857
void DeleteExtensions(internal::Object **prev_limit)
Definition: api.h:556
T ToCData(v8::internal::Object *obj)
Definition: api.h:119
#define ASSERT(condition)
Definition: checks.h:270
void EnterContext(Handle< Object > context)
Definition: api.h:528
void LinkDeferredHandles(DeferredHandles *deferred_handles)
Definition: isolate.cc:2029
Handle< Object > LastEnteredContext()
Definition: api.h:540
v8::internal::Address address()
Definition: api.h:138
v8::internal::Handle< v8::internal::JSObject > value()
Definition: api.h:64
Extension * extension()
Definition: api.h:150
#define MAKE_OPEN_HANDLE(From, To)
Definition: api.h:289
static Local< StackFrame > StackFrameToLocal(v8::internal::Handle< v8::internal::JSObject > obj)
T ** location() const
Definition: handles.h:75
HANDLE HANDLE LPSTACKFRAME64 StackFrame
static Local< StackTrace > StackTraceToLocal(v8::internal::Handle< v8::internal::JSArray > obj)
static Local< Message > MessageToLocal(v8::internal::Handle< v8::internal::Object > obj)
ApiFunction(v8::internal::Address addr)
Definition: api.h:137
static Local< Uint32 > Uint32ToLocal(v8::internal::Handle< v8::internal::Object > obj)
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 expose natives in global object expose gc extension number of stack frames to capture disable builtin natives files print a stack trace if an assertion failure occurs use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations prepare for turning on always opt minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions automatically set the debug break flag when debugger commands are in the queue always cause a debug break before aborting maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print more details following each garbage collection print amount of external allocated memory after each time it is adjusted flush code that we expect not to use again before full gc do incremental marking steps track object counts and memory usage use caching Perform compaction on every full GC Never perform compaction on full GC testing only Compact code space on full incremental collections Default seed for initializing random allows verbose printing trace parsing and preparsing Check icache flushes in ARM and MIPS simulator Stack alingment in bytes in print stack trace when throwing exceptions randomize hashes to avoid predictable hash Fixed seed to use to hash property activate a timer that switches between V8 threads testing_bool_flag float flag Seed used for threading test randomness A filename with extra code to be included in the Print usage message
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition: globals.h:307
TemplateType
Definition: api.h:48
static Local< Integer > IntegerToLocal(v8::internal::Handle< v8::internal::Object > obj)
Definition: v8.h:105
static void UnregisterAll()
Definition: api.cc:516
NeanderObject(int size)
Definition: api.cc:837
static Local< Context > ToLocal(v8::internal::Handle< v8::internal::Context > obj)
#define T(name, string, precedence)
Definition: token.cc:48
void ReturnBlock(Object **block)
Definition: api.h:454
RegisteredExtension(Extension *extension)
Definition: api.cc:506
List< internal::Object ** > * blocks()
Definition: api.h:451
bool IsFreshUnusedString(Handle< String > string)
Definition: api.h:326
void add(v8::internal::Handle< v8::internal::Object > value)
Definition: api.cc:874
Address NewSpaceTop()
Definition: heap.h:503
static RegisteredExtension * first_extension()
Definition: api.h:153
v8::internal::Handle< v8::internal::Object > FromCData(T obj)
Definition: api.h:128
void Iterate(v8::internal::ObjectVisitor *v)
Handle< T > EscapeFrom(v8::HandleScope *scope)
Definition: api.h:246
RegisteredExtension * next_auto()
Definition: api.h:152
const int kHandleBlockSize
Definition: api.h:510
void set(int index, v8::internal::Object *value)
Definition: api.h:113
static void Register(RegisteredExtension *that)
Definition: api.cc:510
Isolate * isolate() const
Definition: api.h:452
Local< T > Close(Handle< T > value)
Definition: v8.h:4324
static FixedArray * cast(Object *obj)
static bool ReportApiFailure(const char *location, const char *message)
Definition: api.cc:220
#define FACTORY
Definition: isolate.h:1434
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
Object * get(int index)
Definition: objects-inl.h:1737
Definition: api.h:183
static Local< FunctionTemplate > ToFunctionTemplate(NeanderObject obj)
#define STATIC_ASSERT(test)
Definition: checks.h:283
void DeleteArray(T *array)
Definition: allocation.h:91
#define OPEN_HANDLE_LIST(V)
Definition: api.h:162
static Local< ObjectTemplate > ToObjectTemplate(NeanderObject obj)
v8::internal::Object * get(int index)
Definition: api.h:107
int size()
Definition: api.cc:847
#define MAKE_TO_LOCAL(Name, From, To)
Definition: api.h:258
T * ToApi(v8::internal::Handle< v8::internal::Object > obj)
Definition: api.h:240
static v8::Testing::StressType stress_type()
Definition: api.h:583