v8  3.25.30(node0.11.13)
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 "contexts.h"
35 #include "factory.h"
36 #include "isolate.h"
37 #include "list-inl.h"
38 
39 namespace v8 {
40 
41 // Constants used in the implementation of the API. The most natural thing
42 // would usually be to place these with the classes that use them, but
43 // we want to keep them out of v8.h because it is an externally
44 // visible file.
45 class Consts {
46  public:
47  enum TemplateType {
50  };
51 };
52 
53 
54 // Utilities for working with neander-objects, primitive
55 // env-independent JSObjects used by the api.
57  public:
58  explicit NeanderObject(v8::internal::Isolate* isolate, int size);
60  explicit inline NeanderObject(v8::internal::Object* obj);
61  inline v8::internal::Object* get(int index);
62  inline void set(int index, v8::internal::Object* value);
64  int size();
65  private:
67 };
68 
69 
70 // Utilities for working with neander-arrays, a simple extensible
71 // array abstraction built on neander-objects.
72 class NeanderArray {
73  public:
74  explicit NeanderArray(v8::internal::Isolate* isolate);
77  return obj_.value();
78  }
79 
81 
82  int length();
83 
84  v8::internal::Object* get(int index);
85  // Change the value at an index to undefined value. If the index is
86  // out of bounds, the request is ignored. Returns the old value.
87  void set(int index, v8::internal::Object* value);
88  private:
89  NeanderObject obj_;
90 };
91 
92 
94  : value_(v8::internal::Handle<v8::internal::JSObject>::cast(obj)) { }
95 
96 
98  : value_(v8::internal::Handle<v8::internal::JSObject>(
99  v8::internal::JSObject::cast(obj))) { }
100 
101 
103  : obj_(obj) { }
104 
105 
107  ASSERT(value()->HasFastObjectElements());
108  return v8::internal::FixedArray::cast(value()->elements())->get(offset);
109 }
110 
111 
112 void NeanderObject::set(int offset, v8::internal::Object* value) {
113  ASSERT(value_->HasFastObjectElements());
114  v8::internal::FixedArray::cast(value_->elements())->set(offset, value);
115 }
116 
117 
118 template <typename T> inline T ToCData(v8::internal::Object* obj) {
119  STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
120  return reinterpret_cast<T>(
121  reinterpret_cast<intptr_t>(
123 }
124 
125 
126 template <typename T>
128  v8::internal::Isolate* isolate, T obj) {
129  STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
130  return isolate->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  static RegisteredExtension* first_extension() { return first_extension_; }
153  private:
154  Extension* extension_;
155  RegisteredExtension* next_;
156  static RegisteredExtension* first_extension_;
157 };
158 
159 
160 #define OPEN_HANDLE_LIST(V) \
161  V(Template, TemplateInfo) \
162  V(FunctionTemplate, FunctionTemplateInfo) \
163  V(ObjectTemplate, ObjectTemplateInfo) \
164  V(Signature, SignatureInfo) \
165  V(AccessorSignature, FunctionTemplateInfo) \
166  V(TypeSwitch, TypeSwitchInfo) \
167  V(Data, Object) \
168  V(RegExp, JSRegExp) \
169  V(Object, JSObject) \
170  V(Array, JSArray) \
171  V(ArrayBuffer, JSArrayBuffer) \
172  V(ArrayBufferView, JSArrayBufferView) \
173  V(TypedArray, JSTypedArray) \
174  V(Uint8Array, JSTypedArray) \
175  V(Uint8ClampedArray, JSTypedArray) \
176  V(Int8Array, JSTypedArray) \
177  V(Uint16Array, JSTypedArray) \
178  V(Int16Array, JSTypedArray) \
179  V(Uint32Array, JSTypedArray) \
180  V(Int32Array, JSTypedArray) \
181  V(Float32Array, JSTypedArray) \
182  V(Float64Array, JSTypedArray) \
183  V(DataView, JSDataView) \
184  V(String, String) \
185  V(Symbol, Symbol) \
186  V(Script, JSFunction) \
187  V(UnboundScript, SharedFunctionInfo) \
188  V(Function, JSFunction) \
189  V(Message, JSObject) \
190  V(Context, Context) \
191  V(External, Foreign) \
192  V(StackTrace, JSArray) \
193  V(StackFrame, JSObject) \
194  V(DeclaredAccessorDescriptor, DeclaredAccessorDescriptor)
195 
196 
197 class Utils {
198  public:
199  static inline bool ApiCheck(bool condition,
200  const char* location,
201  const char* message) {
202  if (!condition) Utils::ReportApiFailure(location, message);
203  return condition;
204  }
205 
208 
209  static inline Local<Context> ToLocal(
211  static inline Local<Value> ToLocal(
213  static inline Local<Function> ToLocal(
215  static inline Local<String> ToLocal(
217  static inline Local<Symbol> ToLocal(
219  static inline Local<RegExp> ToLocal(
221  static inline Local<Object> ToLocal(
223  static inline Local<Array> ToLocal(
225  static inline Local<ArrayBuffer> ToLocal(
227  static inline Local<ArrayBufferView> ToLocal(
229  static inline Local<DataView> ToLocal(
231 
232  static inline Local<TypedArray> ToLocal(
234  static inline Local<Uint8Array> ToLocalUint8Array(
238  static inline Local<Int8Array> ToLocalInt8Array(
242  static inline Local<Int16Array> ToLocalInt16Array(
246  static inline Local<Int32Array> ToLocalInt32Array(
252 
253  static inline Local<Message> MessageToLocal(
255  static inline Local<StackTrace> StackTraceToLocal(
257  static inline Local<StackFrame> StackFrameToLocal(
259  static inline Local<Number> NumberToLocal(
261  static inline Local<Integer> IntegerToLocal(
263  static inline Local<Uint32> Uint32ToLocal(
265  static inline Local<FunctionTemplate> ToLocal(
267  static inline Local<ObjectTemplate> ToLocal(
269  static inline Local<Signature> ToLocal(
273  static inline Local<TypeSwitch> ToLocal(
275  static inline Local<External> ExternalToLocal(
279 
280 #define DECLARE_OPEN_HANDLE(From, To) \
281  static inline v8::internal::Handle<v8::internal::To> \
282  OpenHandle(const From* that, bool allow_empty_handle = false);
283 
285 
286 #undef DECLARE_OPEN_HANDLE
287 
288  template<class From, class To>
290  ASSERT(obj.is_null() || !obj->IsTheHole());
291  return Local<To>(reinterpret_cast<To*>(obj.location()));
292  }
293 
294  template <class T>
296  const v8::Persistent<T>& persistent) {
298  reinterpret_cast<v8::internal::Object**>(persistent.val_));
299  }
300 
301  template <class T>
303  v8::Persistent<T>* persistent) {
304  return OpenPersistent(*persistent);
305  }
306 
307  template <class From, class To>
309  return OpenHandle(*handle);
310  }
311 
312  private:
313  static void ReportApiFailure(const char* location, const char* message);
314 };
315 
316 
317 template <class T>
319  v8::EscapableHandleScope* scope) {
321  if (!is_null()) {
322  handle = *this;
323  }
324  return Utils::OpenHandle(*scope->Escape(Utils::ToLocal(handle)), true);
325 }
326 
327 
328 template <class T>
330  return reinterpret_cast<T*>(obj.location());
331 }
332 
333 template <class T>
336  return Utils::Convert<v8::internal::Object, T>(obj);
337 }
338 
339 
340 // Implementations of ToLocal
341 
342 #define MAKE_TO_LOCAL(Name, From, To) \
343  Local<v8::To> Utils::Name(v8::internal::Handle<v8::internal::From> obj) { \
344  return Convert<v8::internal::From, v8::To>(obj); \
345  }
346 
347 
348 #define MAKE_TO_LOCAL_TYPED_ARRAY(Type, typeName, TYPE, ctype, size) \
349  Local<v8::Type##Array> Utils::ToLocal##Type##Array( \
350  v8::internal::Handle<v8::internal::JSTypedArray> obj) { \
351  ASSERT(obj->type() == kExternal##Type##Array); \
352  return Convert<v8::internal::JSTypedArray, v8::Type##Array>(obj); \
353  }
354 
355 
356 MAKE_TO_LOCAL(ToLocal, Context, Context)
357 MAKE_TO_LOCAL(ToLocal, Object, Value)
358 MAKE_TO_LOCAL(ToLocal, JSFunction, Function)
359 MAKE_TO_LOCAL(ToLocal, String, String)
360 MAKE_TO_LOCAL(ToLocal, Symbol, Symbol)
361 MAKE_TO_LOCAL(ToLocal, JSRegExp, RegExp)
362 MAKE_TO_LOCAL(ToLocal, JSObject, Object)
363 MAKE_TO_LOCAL(ToLocal, JSArray, Array)
364 MAKE_TO_LOCAL(ToLocal, JSArrayBuffer, ArrayBuffer)
365 MAKE_TO_LOCAL(ToLocal, JSArrayBufferView, ArrayBufferView)
366 MAKE_TO_LOCAL(ToLocal, JSDataView, DataView)
367 MAKE_TO_LOCAL(ToLocal, JSTypedArray, TypedArray)
368 
370 
371 MAKE_TO_LOCAL(ToLocal, FunctionTemplateInfo, FunctionTemplate)
372 MAKE_TO_LOCAL(ToLocal, ObjectTemplateInfo, ObjectTemplate)
373 MAKE_TO_LOCAL(ToLocal, SignatureInfo, Signature)
374 MAKE_TO_LOCAL(AccessorSignatureToLocal, FunctionTemplateInfo, AccessorSignature)
375 MAKE_TO_LOCAL(ToLocal, TypeSwitchInfo, TypeSwitch)
376 MAKE_TO_LOCAL(MessageToLocal, Object, Message)
377 MAKE_TO_LOCAL(StackTraceToLocal, JSArray, StackTrace)
378 MAKE_TO_LOCAL(StackFrameToLocal, JSObject, StackFrame)
379 MAKE_TO_LOCAL(NumberToLocal, Object, Number)
380 MAKE_TO_LOCAL(IntegerToLocal, Object, Integer)
381 MAKE_TO_LOCAL(Uint32ToLocal, Object, Uint32)
382 MAKE_TO_LOCAL(ExternalToLocal, JSObject, External)
383 MAKE_TO_LOCAL(ToLocal, DeclaredAccessorDescriptor, DeclaredAccessorDescriptor)
384 
385 #undef MAKE_TO_LOCAL_TYPED_ARRAY
386 #undef MAKE_TO_LOCAL
387 
388 
389 // Implementations of OpenHandle
390 
391 #define MAKE_OPEN_HANDLE(From, To) \
392  v8::internal::Handle<v8::internal::To> Utils::OpenHandle( \
393  const v8::From* that, bool allow_empty_handle) { \
394  EXTRA_CHECK(allow_empty_handle || that != NULL); \
395  EXTRA_CHECK(that == NULL || \
396  !(*reinterpret_cast<v8::internal::To**>( \
397  const_cast<v8::From*>(that)))->IsFailure()); \
398  return v8::internal::Handle<v8::internal::To>( \
399  reinterpret_cast<v8::internal::To**>(const_cast<v8::From*>(that))); \
400  }
401 
403 
404 #undef MAKE_OPEN_HANDLE
405 #undef OPEN_HANDLE_LIST
406 
407 
408 namespace internal {
409 
410 // Tracks string usage to help make better decisions when
411 // externalizing strings.
412 //
413 // Implementation note: internally this class only tracks fresh
414 // strings and keeps a single use counter for them.
416  public:
417  // Records that the given string's characters were copied to some
418  // external buffer. If this happens often we should honor
419  // externalization requests for the string.
421  Address address = reinterpret_cast<Address>(*string);
422  Address top = isolate_->heap()->NewSpaceTop();
423  if (IsFreshString(address, top)) {
424  IncrementUseCount(top);
425  }
426  }
427 
428  // Estimates freshness and use frequency of the given string based
429  // on how close it is to the new space top and the recorded usage
430  // history.
431  inline bool IsFreshUnusedString(Handle<String> string) {
432  Address address = reinterpret_cast<Address>(*string);
433  Address top = isolate_->heap()->NewSpaceTop();
434  return IsFreshString(address, top) && IsUseCountLow(top);
435  }
436 
437  private:
438  StringTracker() : use_count_(0), last_top_(NULL), isolate_(NULL) { }
439 
440  static inline bool IsFreshString(Address string, Address top) {
441  return top - kFreshnessLimit <= string && string <= top;
442  }
443 
444  inline bool IsUseCountLow(Address top) {
445  if (last_top_ != top) return true;
446  return use_count_ < kUseLimit;
447  }
448 
449  inline void IncrementUseCount(Address top) {
450  if (last_top_ != top) {
451  use_count_ = 0;
452  last_top_ = top;
453  }
454  ++use_count_;
455  }
456 
457  // Single use counter shared by all fresh strings.
458  int use_count_;
459 
460  // Last new space top when the use count above was valid.
461  Address last_top_;
462 
463  Isolate* isolate_;
464 
465  // How close to the new space top a fresh string has to be.
466  static const int kFreshnessLimit = 1024;
467 
468  // The number of uses required to consider a string useful.
469  static const int kUseLimit = 32;
470 
471  friend class Isolate;
472 
474 };
475 
476 
478  public:
480 
481  private:
482  DeferredHandles(Object** first_block_limit, Isolate* isolate)
483  : next_(NULL),
484  previous_(NULL),
485  first_block_limit_(first_block_limit),
486  isolate_(isolate) {
487  isolate->LinkDeferredHandles(this);
488  }
489 
490  void Iterate(ObjectVisitor* v);
491 
492  List<Object**> blocks_;
493  DeferredHandles* next_;
494  DeferredHandles* previous_;
495  Object** first_block_limit_;
496  Isolate* isolate_;
497 
499  friend class Isolate;
500 };
501 
502 
503 // This class is here in order to be able to declare it a friend of
504 // HandleScope. Moving these methods to be members of HandleScope would be
505 // neat in some ways, but it would expose internal implementation details in
506 // our public header file, which is undesirable.
507 //
508 // An isolate has a single instance of this class to hold the current thread's
509 // data. In multithreaded V8 programs this data is copied in and out of storage
510 // so that the currently executing thread always has its own copy of this
511 // data.
513  public:
515  : isolate_(isolate),
516  blocks_(0),
517  entered_contexts_(0),
518  saved_contexts_(0),
519  spare_(NULL),
520  call_depth_(0),
521  last_handle_before_deferred_block_(NULL) { }
522 
524  DeleteArray(spare_);
525  }
526 
527  // Threading support for handle data.
528  static int ArchiveSpacePerThread();
529  char* RestoreThread(char* from);
530  char* ArchiveThread(char* to);
531  void FreeThreadResources();
532 
533  // Garbage collection support.
534  void Iterate(v8::internal::ObjectVisitor* v);
535  static char* Iterate(v8::internal::ObjectVisitor* v, char* data);
536 
537 
539  inline void DeleteExtensions(internal::Object** prev_limit);
540 
541  inline void IncrementCallDepth() {call_depth_++;}
542  inline void DecrementCallDepth() {call_depth_--;}
543  inline bool CallDepthIsZero() { return call_depth_ == 0; }
544 
545  inline void EnterContext(Handle<Context> context);
546  inline void LeaveContext();
547  inline bool LastEnteredContextWas(Handle<Context> context);
548 
549  // Returns the last entered context or an empty handle if no
550  // contexts have been entered.
552 
553  inline void SaveContext(Context* context);
554  inline Context* RestoreContext();
555  inline bool HasSavedContexts();
556 
557  inline List<internal::Object**>* blocks() { return &blocks_; }
558  Isolate* isolate() const { return isolate_; }
559 
560  void ReturnBlock(Object** block) {
561  ASSERT(block != NULL);
562  if (spare_ != NULL) DeleteArray(spare_);
563  spare_ = block;
564  }
565 
566  private:
567  void ResetAfterArchive() {
568  blocks_.Initialize(0);
569  entered_contexts_.Initialize(0);
570  saved_contexts_.Initialize(0);
571  spare_ = NULL;
572  last_handle_before_deferred_block_ = NULL;
573  call_depth_ = 0;
574  }
575 
576  void Free() {
577  ASSERT(blocks_.length() == 0);
578  ASSERT(entered_contexts_.length() == 0);
579  ASSERT(saved_contexts_.length() == 0);
580  blocks_.Free();
581  entered_contexts_.Free();
582  saved_contexts_.Free();
583  if (spare_ != NULL) {
584  DeleteArray(spare_);
585  spare_ = NULL;
586  }
587  ASSERT(call_depth_ == 0);
588  }
589 
590  void BeginDeferredScope();
591  DeferredHandles* Detach(Object** prev_limit);
592 
593  Isolate* isolate_;
594  List<internal::Object**> blocks_;
595  // Used as a stack to keep track of entered contexts.
596  List<Context*> entered_contexts_;
597  // Used as a stack to keep track of saved contexts.
598  List<Context*> saved_contexts_;
599  Object** spare_;
600  int call_depth_;
601  Object** last_handle_before_deferred_block_;
602  // This is only used for threading support.
603  HandleScopeData handle_scope_data_;
604 
605  void IterateThis(ObjectVisitor* v);
606  char* RestoreThreadHelper(char* from);
607  char* ArchiveThreadHelper(char* to);
608 
609  friend class DeferredHandles;
610  friend class DeferredHandleScope;
611 
613 };
614 
615 
616 const int kHandleBlockSize = v8::internal::KB - 2; // fit in one page
617 
618 
620  saved_contexts_.Add(context);
621 }
622 
623 
625  return saved_contexts_.RemoveLast();
626 }
627 
628 
630  return !saved_contexts_.is_empty();
631 }
632 
633 
635  entered_contexts_.Add(*context);
636 }
637 
638 
640  entered_contexts_.RemoveLast();
641 }
642 
643 
645  return !entered_contexts_.is_empty() && entered_contexts_.last() == *context;
646 }
647 
648 
650  if (entered_contexts_.is_empty()) return Handle<Context>::null();
651  return Handle<Context>(entered_contexts_.last());
652 }
653 
654 
655 // If there's a spare block, use it for growing the current scope.
657  internal::Object** block = (spare_ != NULL) ?
658  spare_ :
659  NewArray<internal::Object*>(kHandleBlockSize);
660  spare_ = NULL;
661  return block;
662 }
663 
664 
666  while (!blocks_.is_empty()) {
667  internal::Object** block_start = blocks_.last();
668  internal::Object** block_limit = block_start + kHandleBlockSize;
669 #ifdef DEBUG
670  // SealHandleScope may make the prev_limit to point inside the block.
671  if (block_start <= prev_limit && prev_limit <= block_limit) {
672 #ifdef ENABLE_HANDLE_ZAPPING
673  internal::HandleScope::ZapRange(prev_limit, block_limit);
674 #endif
675  break;
676  }
677 #else
678  if (prev_limit == block_limit) break;
679 #endif
680 
681  blocks_.RemoveLast();
682 #ifdef ENABLE_HANDLE_ZAPPING
683  internal::HandleScope::ZapRange(block_start, block_limit);
684 #endif
685  if (spare_ != NULL) {
686  DeleteArray(spare_);
687  }
688  spare_ = block_start;
689  }
690  ASSERT((blocks_.is_empty() && prev_limit == NULL) ||
691  (!blocks_.is_empty() && prev_limit != NULL));
692 }
693 
694 
695 // Interceptor functions called from generated inline caches to notify
696 // CPU profiler that external callbacks are invoked.
698  v8::Local<v8::String> property,
701 
703  v8::FunctionCallback callback);
704 
705 class Testing {
706  public:
707  static v8::Testing::StressType stress_type() { return stress_type_; }
709  stress_type_ = stress_type;
710  }
711 
712  private:
713  static v8::Testing::StressType stress_type_;
714 };
715 
716 } } // namespace v8::internal
717 
718 #endif // V8_API_H_
byte * Address
Definition: globals.h:186
void SaveContext(Context *context)
Definition: api.h:619
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter NULL
Definition: flags.cc:269
static void set_stress_type(v8::Testing::StressType stress_type)
Definition: api.h:708
Handle< Context > LastEnteredContext()
Definition: api.h:649
RegisteredExtension * next()
Definition: api.h:151
internal::Object ** GetSpareOrNewBlock()
Definition: api.h:656
static Local< Int8Array > ToLocalInt8Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
Handle< T > EscapeFrom(v8::EscapableHandleScope *scope)
Definition: api.h:318
HandleScopeImplementer(Isolate *isolate)
Definition: api.h:514
void RecordWrite(Handle< String > string)
Definition: api.h:420
v8::internal::Handle< v8::internal::JSObject > value()
Definition: api.h:76
void set(int index, v8::internal::Object *value)
Definition: api.cc:807
void(* FunctionCallback)(const FunctionCallbackInfo< Value > &info)
Definition: v8.h:2603
static Local< Number > NumberToLocal(v8::internal::Handle< v8::internal::Object > obj)
const int KB
Definition: globals.h:245
char * ArchiveThread(char *to)
Definition: api.cc:7492
friend class Isolate
Definition: api.h:471
NeanderArray(v8::internal::Isolate *isolate)
Definition: api.cc:770
static Local< AccessorSignature > AccessorSignatureToLocal(v8::internal::Handle< v8::internal::FunctionTemplateInfo > obj)
static Local< To > Convert(v8::internal::Handle< From > obj)
Definition: api.h:289
static v8::internal::Handle< v8::internal::Object > OpenPersistent(const v8::Persistent< T > &persistent)
Definition: api.h:295
static Local< Float64Array > ToLocalFloat64Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
char * RestoreThread(char *from)
Definition: api.cc:7509
static v8::internal::Handle< v8::internal::Object > OpenPersistent(v8::Persistent< T > *persistent)
Definition: api.h:302
kSerializedDataOffset Object
Definition: objects-inl.h:5016
#define DECLARE_OPEN_HANDLE(From, To)
Definition: api.h:280
Definition: api.h:45
static Foreign * cast(Object *obj)
int length()
Definition: api.cc:775
void DeleteExtensions(internal::Object **prev_limit)
Definition: api.h:665
V8_INLINE Local< T > Escape(Local< T > value)
Definition: v8.h:892
T ToCData(v8::internal::Object *obj)
Definition: api.h:118
#define ASSERT(condition)
Definition: checks.h:329
v8::Local< T > ToApiHandle(v8::internal::Handle< v8::internal::Object > obj)
Definition: api.h:334
Factory * factory()
Definition: isolate.h:995
NeanderObject(v8::internal::Isolate *isolate, int size)
Definition: api.cc:756
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization 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 VFP3 instructions if available enable use of NEON instructions if 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 d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing 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 statistics of the maximum memory committed for the heap in only print modified registers Don t break for ASM_UNIMPLEMENTED_BREAK macros print stack trace when an illegal exception is thrown randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot testing_bool_flag testing_int_flag string flag tmp file in which to serialize heap Print the time it takes to lazily compile hydrogen code stubs concurrent_recompilation concurrent_sweeping Print usage message
static Local< Int32Array > ToLocalInt32Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
void LinkDeferredHandles(DeferredHandles *deferred_handles)
Definition: isolate.cc:2187
v8::internal::Address address()
Definition: api.h:138
v8::internal::Handle< v8::internal::JSObject > value()
Definition: api.h:63
Extension * extension()
Definition: api.h:150
#define MAKE_TO_LOCAL_TYPED_ARRAY(Type, typeName, TYPE, ctype, size)
Definition: api.h:348
#define MAKE_OPEN_HANDLE(From, To)
Definition: api.h:391
static Local< StackFrame > StackFrameToLocal(v8::internal::Handle< v8::internal::JSObject > obj)
void(* AccessorGetterCallback)(Local< String > property, const PropertyCallbackInfo< Value > &info)
Definition: v8.h:2141
static Local< Uint16Array > ToLocalUint16Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
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)
bool LastEnteredContextWas(Handle< Context > context)
Definition: api.h:644
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition: globals.h:359
TemplateType
Definition: api.h:47
static Local< Integer > IntegerToLocal(v8::internal::Handle< v8::internal::Object > obj)
static Local< Int16Array > ToLocalInt16Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
Definition: v8.h:123
static void UnregisterAll()
Definition: api.cc:429
static v8::internal::Handle< To > OpenHandle(v8::Local< From > handle)
Definition: api.h:308
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:560
RegisteredExtension(Extension *extension)
Definition: api.cc:419
static Local< Float32Array > ToLocalFloat32Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
List< internal::Object ** > * blocks()
Definition: api.h:557
static Local< Uint8ClampedArray > ToLocalUint8ClampedArray(v8::internal::Handle< v8::internal::JSTypedArray > obj)
bool IsFreshUnusedString(Handle< String > string)
Definition: api.h:431
void add(v8::internal::Handle< v8::internal::Object > value)
Definition: api.cc:792
v8::internal::Handle< v8::internal::Object > FromCData(v8::internal::Isolate *isolate, T obj)
Definition: api.h:127
Address NewSpaceTop()
Definition: heap.h:635
bool is_null() const
Definition: handles.h:81
Handle< T > handle(T *t, Isolate *isolate)
Definition: handles.h:103
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function info
Definition: flags.cc:317
static Local< Uint8Array > ToLocalUint8Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static RegisteredExtension * first_extension()
Definition: api.h:152
void Iterate(v8::internal::ObjectVisitor *v)
Definition: api.cc:7553
void InvokeAccessorGetterCallback(v8::Local< v8::String > property, const v8::PropertyCallbackInfo< v8::Value > &info, v8::AccessorGetterCallback getter)
Definition: api.cc:7628
#define TYPED_ARRAYS(V)
Definition: objects.h:4663
Handle< Foreign > NewForeign(Address addr, PretenureFlag pretenure=NOT_TENURED)
Definition: factory.cc:726
const int kHandleBlockSize
Definition: api.h:616
void set(int index, v8::internal::Object *value)
Definition: api.h:112
static void Register(RegisteredExtension *that)
Definition: api.cc:423
Isolate * isolate() const
Definition: api.h:558
IN DWORD64 OUT PDWORD64 OUT PIMAGEHLP_SYMBOL64 Symbol
static FixedArray * cast(Object *obj)
static bool ApiCheck(bool condition, const char *location, const char *message)
Definition: api.h:199
Object * get(int index)
Definition: objects-inl.h:2127
HeapObject * obj
void EnterContext(Handle< Context > context)
Definition: api.h:634
Definition: api.h:197
static Local< FunctionTemplate > ToFunctionTemplate(NeanderObject obj)
#define STATIC_ASSERT(test)
Definition: checks.h:341
static Local< Uint32Array > ToLocalUint32Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
void DeleteArray(T *array)
Definition: allocation.h:91
#define OPEN_HANDLE_LIST(V)
Definition: api.h:160
void InvokeFunctionCallback(const v8::FunctionCallbackInfo< v8::Value > &info, v8::FunctionCallback callback)
Definition: api.cc:7642
static Local< External > ExternalToLocal(v8::internal::Handle< v8::internal::JSObject > obj)
static Local< ObjectTemplate > ToObjectTemplate(NeanderObject obj)
v8::internal::Object * get(int index)
Definition: api.h:106
int size()
Definition: api.cc:765
#define MAKE_TO_LOCAL(Name, From, To)
Definition: api.h:342
T * ToApi(v8::internal::Handle< v8::internal::Object > obj)
Definition: api.h:329
static v8::Testing::StressType stress_type()
Definition: api.h:707