V8 Project
api.h
Go to the documentation of this file.
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_API_H_
6 #define V8_API_H_
7 
8 #include "src/v8.h"
9 
10 #include "include/v8-testing.h"
11 #include "src/contexts.h"
12 #include "src/factory.h"
13 #include "src/isolate.h"
14 #include "src/list-inl.h"
15 
16 namespace v8 {
17 
18 // Constants used in the implementation of the API. The most natural thing
19 // would usually be to place these with the classes that use them, but
20 // we want to keep them out of v8.h because it is an externally
21 // visible file.
22 class Consts {
23  public:
24  enum TemplateType {
26  OBJECT_TEMPLATE = 1
27  };
28 };
29 
30 
31 // Utilities for working with neander-objects, primitive
32 // env-independent JSObjects used by the api.
34  public:
35  explicit NeanderObject(v8::internal::Isolate* isolate, int size);
37  explicit inline NeanderObject(v8::internal::Object* obj);
38  inline v8::internal::Object* get(int index);
39  inline void set(int index, v8::internal::Object* value);
41  int size();
42  private:
44 };
45 
46 
47 // Utilities for working with neander-arrays, a simple extensible
48 // array abstraction built on neander-objects.
49 class NeanderArray {
50  public:
51  explicit NeanderArray(v8::internal::Isolate* isolate);
54  return obj_.value();
55  }
56 
58 
59  int length();
60 
61  v8::internal::Object* get(int index);
62  // Change the value at an index to undefined value. If the index is
63  // out of bounds, the request is ignored. Returns the old value.
64  void set(int index, v8::internal::Object* value);
65  private:
67 };
68 
69 
71  : value_(v8::internal::Handle<v8::internal::JSObject>::cast(obj)) { }
72 
73 
75  : value_(v8::internal::Handle<v8::internal::JSObject>(
76  v8::internal::JSObject::cast(obj))) { }
77 
78 
80  : obj_(obj) { }
81 
82 
84  DCHECK(value()->HasFastObjectElements());
85  return v8::internal::FixedArray::cast(value()->elements())->get(offset);
86 }
87 
88 
89 void NeanderObject::set(int offset, v8::internal::Object* value) {
90  DCHECK(value_->HasFastObjectElements());
91  v8::internal::FixedArray::cast(value_->elements())->set(offset, value);
92 }
93 
94 
95 template <typename T> inline T ToCData(v8::internal::Object* obj) {
96  STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
97  return reinterpret_cast<T>(
98  reinterpret_cast<intptr_t>(
99  v8::internal::Foreign::cast(obj)->foreign_address()));
100 }
101 
102 
103 template <typename T>
105  v8::internal::Isolate* isolate, T obj) {
106  STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
107  return isolate->factory()->NewForeign(
108  reinterpret_cast<v8::internal::Address>(reinterpret_cast<intptr_t>(obj)));
109 }
110 
111 
112 class ApiFunction {
113  public:
114  explicit ApiFunction(v8::internal::Address addr) : addr_(addr) { }
116  private:
118 };
119 
120 
121 
123  public:
125  static void Register(RegisteredExtension* that);
126  static void UnregisterAll();
130  private:
134 };
135 
136 
137 #define OPEN_HANDLE_LIST(V) \
138  V(Template, TemplateInfo) \
139  V(FunctionTemplate, FunctionTemplateInfo) \
140  V(ObjectTemplate, ObjectTemplateInfo) \
141  V(Signature, SignatureInfo) \
142  V(AccessorSignature, FunctionTemplateInfo) \
143  V(TypeSwitch, TypeSwitchInfo) \
144  V(Data, Object) \
145  V(RegExp, JSRegExp) \
146  V(Object, JSObject) \
147  V(Array, JSArray) \
148  V(ArrayBuffer, JSArrayBuffer) \
149  V(ArrayBufferView, JSArrayBufferView) \
150  V(TypedArray, JSTypedArray) \
151  V(Uint8Array, JSTypedArray) \
152  V(Uint8ClampedArray, JSTypedArray) \
153  V(Int8Array, JSTypedArray) \
154  V(Uint16Array, JSTypedArray) \
155  V(Int16Array, JSTypedArray) \
156  V(Uint32Array, JSTypedArray) \
157  V(Int32Array, JSTypedArray) \
158  V(Float32Array, JSTypedArray) \
159  V(Float64Array, JSTypedArray) \
160  V(DataView, JSDataView) \
161  V(Name, Name) \
162  V(String, String) \
163  V(Symbol, Symbol) \
164  V(Script, JSFunction) \
165  V(UnboundScript, SharedFunctionInfo) \
166  V(Function, JSFunction) \
167  V(Message, JSMessageObject) \
168  V(Context, Context) \
169  V(External, Object) \
170  V(StackTrace, JSArray) \
171  V(StackFrame, JSObject) \
172  V(DeclaredAccessorDescriptor, DeclaredAccessorDescriptor)
173 
174 
175 class Utils {
176  public:
177  static inline bool ApiCheck(bool condition,
178  const char* location,
179  const char* message) {
180  if (!condition) Utils::ReportApiFailure(location, message);
181  return condition;
182  }
183 
186 
187  static inline Local<Context> ToLocal(
189  static inline Local<Value> ToLocal(
191  static inline Local<Function> ToLocal(
193  static inline Local<Name> ToLocal(
195  static inline Local<String> ToLocal(
197  static inline Local<Symbol> ToLocal(
199  static inline Local<RegExp> ToLocal(
201  static inline Local<Object> ToLocal(
203  static inline Local<Array> ToLocal(
209  static inline Local<DataView> ToLocal(
211 
212  static inline Local<TypedArray> ToLocal(
232 
249  static inline Local<Signature> ToLocal(
253  static inline Local<TypeSwitch> ToLocal(
259 
260 #define DECLARE_OPEN_HANDLE(From, To) \
261  static inline v8::internal::Handle<v8::internal::To> \
262  OpenHandle(const From* that, bool allow_empty_handle = false);
263 
265 
266 #undef DECLARE_OPEN_HANDLE
267 
268  template<class From, class To>
270  DCHECK(obj.is_null() || !obj->IsTheHole());
271  return Local<To>(reinterpret_cast<To*>(obj.location()));
272  }
273 
274  template <class T>
276  const v8::Persistent<T>& persistent) {
278  reinterpret_cast<v8::internal::Object**>(persistent.val_));
279  }
280 
281  template <class T>
283  v8::Persistent<T>* persistent) {
284  return OpenPersistent(*persistent);
285  }
286 
287  template <class From, class To>
289  return OpenHandle(*handle);
290  }
291 
292  private:
293  static void ReportApiFailure(const char* location, const char* message);
294 };
295 
296 
297 template <class T>
299  v8::EscapableHandleScope* scope) {
301  if (!is_null()) {
302  handle = *this;
303  }
304  return Utils::OpenHandle(*scope->Escape(Utils::ToLocal(handle)), true);
305 }
306 
307 
308 template <class T>
310  return reinterpret_cast<T*>(obj.location());
311 }
312 
313 template <class T>
316  return Utils::Convert<v8::internal::Object, T>(obj);
317 }
318 
319 
320 // Implementations of ToLocal
321 
322 #define MAKE_TO_LOCAL(Name, From, To) \
323  Local<v8::To> Utils::Name(v8::internal::Handle<v8::internal::From> obj) { \
324  return Convert<v8::internal::From, v8::To>(obj); \
325  }
326 
327 
328 #define MAKE_TO_LOCAL_TYPED_ARRAY(Type, typeName, TYPE, ctype, size) \
329  Local<v8::Type##Array> Utils::ToLocal##Type##Array( \
330  v8::internal::Handle<v8::internal::JSTypedArray> obj) { \
331  DCHECK(obj->type() == kExternal##Type##Array); \
332  return Convert<v8::internal::JSTypedArray, v8::Type##Array>(obj); \
333  }
334 
335 
336 MAKE_TO_LOCAL(ToLocal, Context, Context)
337 MAKE_TO_LOCAL(ToLocal, Object, Value)
338 MAKE_TO_LOCAL(ToLocal, JSFunction, Function)
339 MAKE_TO_LOCAL(ToLocal, Name, Name)
340 MAKE_TO_LOCAL(ToLocal, String, String)
341 MAKE_TO_LOCAL(ToLocal, Symbol, Symbol)
342 MAKE_TO_LOCAL(ToLocal, JSRegExp, RegExp)
343 MAKE_TO_LOCAL(ToLocal, JSObject, Object)
344 MAKE_TO_LOCAL(ToLocal, JSArray, Array)
345 MAKE_TO_LOCAL(ToLocal, JSArrayBuffer, ArrayBuffer)
346 MAKE_TO_LOCAL(ToLocal, JSArrayBufferView, ArrayBufferView)
347 MAKE_TO_LOCAL(ToLocal, JSDataView, DataView)
348 MAKE_TO_LOCAL(ToLocal, JSTypedArray, TypedArray)
349 
351 
352 MAKE_TO_LOCAL(ToLocal, FunctionTemplateInfo, FunctionTemplate)
353 MAKE_TO_LOCAL(ToLocal, ObjectTemplateInfo, ObjectTemplate)
354 MAKE_TO_LOCAL(ToLocal, SignatureInfo, Signature)
355 MAKE_TO_LOCAL(AccessorSignatureToLocal, FunctionTemplateInfo, AccessorSignature)
356 MAKE_TO_LOCAL(ToLocal, TypeSwitchInfo, TypeSwitch)
357 MAKE_TO_LOCAL(MessageToLocal, Object, Message)
358 MAKE_TO_LOCAL(StackTraceToLocal, JSArray, StackTrace)
359 MAKE_TO_LOCAL(StackFrameToLocal, JSObject, StackFrame)
360 MAKE_TO_LOCAL(NumberToLocal, Object, Number)
361 MAKE_TO_LOCAL(IntegerToLocal, Object, Integer)
362 MAKE_TO_LOCAL(Uint32ToLocal, Object, Uint32)
363 MAKE_TO_LOCAL(ExternalToLocal, JSObject, External)
364 MAKE_TO_LOCAL(ToLocal, DeclaredAccessorDescriptor, DeclaredAccessorDescriptor)
365 
366 #undef MAKE_TO_LOCAL_TYPED_ARRAY
367 #undef MAKE_TO_LOCAL
368 
369 
370 // Implementations of OpenHandle
371 
372 #define MAKE_OPEN_HANDLE(From, To) \
373  v8::internal::Handle<v8::internal::To> Utils::OpenHandle( \
374  const v8::From* that, bool allow_empty_handle) { \
375  EXTRA_CHECK(allow_empty_handle || that != NULL); \
376  EXTRA_CHECK(that == NULL || \
377  (*reinterpret_cast<v8::internal::Object* const*>(that))->Is##To()); \
378  return v8::internal::Handle<v8::internal::To>( \
379  reinterpret_cast<v8::internal::To**>(const_cast<v8::From*>(that))); \
380  }
381 
383 
384 #undef MAKE_OPEN_HANDLE
385 #undef OPEN_HANDLE_LIST
386 
387 
388 namespace internal {
389 
390 // Tracks string usage to help make better decisions when
391 // externalizing strings.
392 //
393 // Implementation note: internally this class only tracks fresh
394 // strings and keeps a single use counter for them.
396  public:
397  // Records that the given string's characters were copied to some
398  // external buffer. If this happens often we should honor
399  // externalization requests for the string.
401  Address address = reinterpret_cast<Address>(*string);
402  Address top = isolate_->heap()->NewSpaceTop();
403  if (IsFreshString(address, top)) {
404  IncrementUseCount(top);
405  }
406  }
407 
408  // Estimates freshness and use frequency of the given string based
409  // on how close it is to the new space top and the recorded usage
410  // history.
411  inline bool IsFreshUnusedString(Handle<String> string) {
412  Address address = reinterpret_cast<Address>(*string);
413  Address top = isolate_->heap()->NewSpaceTop();
414  return IsFreshString(address, top) && IsUseCountLow(top);
415  }
416 
417  private:
419 
420  static inline bool IsFreshString(Address string, Address top) {
421  return top - kFreshnessLimit <= string && string <= top;
422  }
423 
424  inline bool IsUseCountLow(Address top) {
425  if (last_top_ != top) return true;
426  return use_count_ < kUseLimit;
427  }
428 
429  inline void IncrementUseCount(Address top) {
430  if (last_top_ != top) {
431  use_count_ = 0;
432  last_top_ = top;
433  }
434  ++use_count_;
435  }
436 
437  // Single use counter shared by all fresh strings.
439 
440  // Last new space top when the use count above was valid.
442 
444 
445  // How close to the new space top a fresh string has to be.
446  static const int kFreshnessLimit = 1024;
447 
448  // The number of uses required to consider a string useful.
449  static const int kUseLimit = 32;
450 
451  friend class Isolate;
452 
454 };
455 
456 
458  public:
460 
461  private:
462  DeferredHandles(Object** first_block_limit, Isolate* isolate)
463  : next_(NULL),
464  previous_(NULL),
465  first_block_limit_(first_block_limit),
466  isolate_(isolate) {
467  isolate->LinkDeferredHandles(this);
468  }
469 
470  void Iterate(ObjectVisitor* v);
471 
477 
479  friend class Isolate;
480 };
481 
482 
483 // This class is here in order to be able to declare it a friend of
484 // HandleScope. Moving these methods to be members of HandleScope would be
485 // neat in some ways, but it would expose internal implementation details in
486 // our public header file, which is undesirable.
487 //
488 // An isolate has a single instance of this class to hold the current thread's
489 // data. In multithreaded V8 programs this data is copied in and out of storage
490 // so that the currently executing thread always has its own copy of this
491 // data.
493  public:
495  : isolate_(isolate),
496  blocks_(0),
498  saved_contexts_(0),
499  spare_(NULL),
500  call_depth_(0),
502 
505  }
506 
507  // Threading support for handle data.
508  static int ArchiveSpacePerThread();
509  char* RestoreThread(char* from);
510  char* ArchiveThread(char* to);
511  void FreeThreadResources();
512 
513  // Garbage collection support.
515  static char* Iterate(v8::internal::ObjectVisitor* v, char* data);
516 
517 
519  inline void DeleteExtensions(internal::Object** prev_limit);
520 
521  inline void IncrementCallDepth() {call_depth_++;}
522  inline void DecrementCallDepth() {call_depth_--;}
523  inline bool CallDepthIsZero() { return call_depth_ == 0; }
524 
525  inline void EnterContext(Handle<Context> context);
526  inline void LeaveContext();
527  inline bool LastEnteredContextWas(Handle<Context> context);
528 
529  // Returns the last entered context or an empty handle if no
530  // contexts have been entered.
532 
533  inline void SaveContext(Context* context);
534  inline Context* RestoreContext();
535  inline bool HasSavedContexts();
536 
537  inline List<internal::Object**>* blocks() { return &blocks_; }
538  Isolate* isolate() const { return isolate_; }
539 
540  void ReturnBlock(Object** block) {
541  DCHECK(block != NULL);
542  if (spare_ != NULL) DeleteArray(spare_);
543  spare_ = block;
544  }
545 
546  private:
548  blocks_.Initialize(0);
549  entered_contexts_.Initialize(0);
550  saved_contexts_.Initialize(0);
551  spare_ = NULL;
553  call_depth_ = 0;
554  }
555 
556  void Free() {
557  DCHECK(blocks_.length() == 0);
558  DCHECK(entered_contexts_.length() == 0);
559  DCHECK(saved_contexts_.length() == 0);
560  blocks_.Free();
561  entered_contexts_.Free();
562  saved_contexts_.Free();
563  if (spare_ != NULL) {
565  spare_ = NULL;
566  }
567  DCHECK(call_depth_ == 0);
568  }
569 
570  void BeginDeferredScope();
571  DeferredHandles* Detach(Object** prev_limit);
572 
575  // Used as a stack to keep track of entered contexts.
577  // Used as a stack to keep track of saved contexts.
582  // This is only used for threading support.
584 
585  void IterateThis(ObjectVisitor* v);
586  char* RestoreThreadHelper(char* from);
587  char* ArchiveThreadHelper(char* to);
588 
589  friend class DeferredHandles;
590  friend class DeferredHandleScope;
591 
593 };
594 
595 
596 const int kHandleBlockSize = v8::internal::KB - 2; // fit in one page
597 
598 
600  saved_contexts_.Add(context);
601 }
602 
603 
605  return saved_contexts_.RemoveLast();
606 }
607 
608 
610  return !saved_contexts_.is_empty();
611 }
612 
613 
615  entered_contexts_.Add(*context);
616 }
617 
618 
620  entered_contexts_.RemoveLast();
621 }
622 
623 
625  return !entered_contexts_.is_empty() && entered_contexts_.last() == *context;
626 }
627 
628 
630  if (entered_contexts_.is_empty()) return Handle<Context>::null();
631  return Handle<Context>(entered_contexts_.last());
632 }
633 
634 
635 // If there's a spare block, use it for growing the current scope.
637  internal::Object** block = (spare_ != NULL) ?
638  spare_ :
639  NewArray<internal::Object*>(kHandleBlockSize);
640  spare_ = NULL;
641  return block;
642 }
643 
644 
646  while (!blocks_.is_empty()) {
647  internal::Object** block_start = blocks_.last();
648  internal::Object** block_limit = block_start + kHandleBlockSize;
649 #ifdef DEBUG
650  // SealHandleScope may make the prev_limit to point inside the block.
651  if (block_start <= prev_limit && prev_limit <= block_limit) {
652 #ifdef ENABLE_HANDLE_ZAPPING
653  internal::HandleScope::ZapRange(prev_limit, block_limit);
654 #endif
655  break;
656  }
657 #else
658  if (prev_limit == block_limit) break;
659 #endif
660 
661  blocks_.RemoveLast();
662 #ifdef ENABLE_HANDLE_ZAPPING
663  internal::HandleScope::ZapRange(block_start, block_limit);
664 #endif
665  if (spare_ != NULL) {
667  }
668  spare_ = block_start;
669  }
670  DCHECK((blocks_.is_empty() && prev_limit == NULL) ||
671  (!blocks_.is_empty() && prev_limit != NULL));
672 }
673 
674 
675 // Interceptor functions called from generated inline caches to notify
676 // CPU profiler that external callbacks are invoked.
678  v8::Local<v8::Name> property,
681 
683  v8::FunctionCallback callback);
684 
685 class Testing {
686  public:
690  }
691 
692  private:
694 };
695 
696 } } // namespace v8::internal
697 
698 #endif // V8_API_H_
#define OPEN_HANDLE_LIST(V)
Definition: api.h:137
#define DECLARE_OPEN_HANDLE(From, To)
Definition: api.h:260
#define MAKE_OPEN_HANDLE(From, To)
Definition: api.h:372
#define MAKE_TO_LOCAL_TYPED_ARRAY(Type, typeName, TYPE, ctype, size)
Definition: api.h:328
#define MAKE_TO_LOCAL(Name, From, To)
Definition: api.h:322
ApiFunction(v8::internal::Address addr)
Definition: api.h:114
v8::internal::Address address()
Definition: api.h:115
v8::internal::Address addr_
Definition: api.h:117
Definition: api.h:22
TemplateType
Definition: api.h:24
@ OBJECT_TEMPLATE
Definition: api.h:26
@ FUNCTION_TEMPLATE
Definition: api.h:25
A HandleScope which first allocates a handle in the current scope which will be later filled with the...
Definition: v8.h:855
Local< T > Escape(Local< T > value)
Pushes the value into the previous scope and returns a handle to it.
Definition: v8.h:865
Ignore.
Definition: v8.h:4008
The argument information given to function call callbacks.
Definition: v8.h:2650
An object reference managed by the v8 garbage collector.
Definition: v8.h:198
A light-weight stack-allocated object handle.
Definition: v8.h:334
void add(v8::internal::Handle< v8::internal::Object > value)
Definition: api.cc:753
int length()
Definition: api.cc:736
void set(int index, v8::internal::Object *value)
Definition: api.cc:768
NeanderArray(v8::internal::Isolate *isolate)
Definition: api.cc:731
NeanderObject obj_
Definition: api.h:66
v8::internal::Object * get(int index)
Definition: api.cc:741
v8::internal::Handle< v8::internal::JSObject > value()
Definition: api.h:53
v8::internal::Handle< v8::internal::JSObject > value_
Definition: api.h:43
v8::internal::Object * get(int index)
Definition: api.h:83
v8::internal::Handle< v8::internal::JSObject > value()
Definition: api.h:40
NeanderObject(v8::internal::Isolate *isolate, int size)
Definition: api.cc:718
int size()
Definition: api.cc:726
void set(int index, v8::internal::Object *value)
Definition: api.h:89
A PersistentBase which allows copy and assignment.
Definition: v8.h:627
The information passed to a property callback about the context of the property access.
Definition: v8.h:2691
RegisteredExtension * next()
Definition: api.h:128
static void Register(RegisteredExtension *that)
Definition: api.cc:381
static void UnregisterAll()
Definition: api.cc:387
Extension * extension()
Definition: api.h:127
Extension * extension_
Definition: api.h:131
RegisteredExtension * next_
Definition: api.h:132
RegisteredExtension(Extension *extension)
Definition: api.cc:377
static RegisteredExtension * first_extension_
Definition: api.h:133
static RegisteredExtension * first_extension()
Definition: api.h:129
Definition: api.h:175
static v8::internal::Handle< v8::internal::Object > OpenPersistent(v8::Persistent< T > *persistent)
Definition: api.h:282
static Local< Name > ToLocal(v8::internal::Handle< v8::internal::Name > obj)
static Local< Signature > ToLocal(v8::internal::Handle< v8::internal::SignatureInfo > obj)
static Local< Float32Array > ToLocalFloat32Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static bool ApiCheck(bool condition, const char *location, const char *message)
Definition: api.h:177
static Local< Function > ToLocal(v8::internal::Handle< v8::internal::JSFunction > obj)
static Local< Uint16Array > ToLocalUint16Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< Context > ToLocal(v8::internal::Handle< v8::internal::Context > obj)
static Local< FunctionTemplate > ToFunctionTemplate(NeanderObject obj)
static Local< Uint32Array > ToLocalUint32Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< TypedArray > ToLocal(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< String > ToLocal(v8::internal::Handle< v8::internal::String > obj)
static Local< Array > ToLocal(v8::internal::Handle< v8::internal::JSArray > obj)
static Local< DataView > ToLocal(v8::internal::Handle< v8::internal::JSDataView > obj)
static Local< Uint8ClampedArray > ToLocalUint8ClampedArray(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static v8::internal::Handle< To > OpenHandle(v8::Local< From > handle)
Definition: api.h:288
static Local< Float64Array > ToLocalFloat64Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< DeclaredAccessorDescriptor > ToLocal(v8::internal::Handle< v8::internal::DeclaredAccessorDescriptor > obj)
static Local< AccessorSignature > AccessorSignatureToLocal(v8::internal::Handle< v8::internal::FunctionTemplateInfo > obj)
static Local< ObjectTemplate > ToObjectTemplate(NeanderObject obj)
static Local< TypeSwitch > ToLocal(v8::internal::Handle< v8::internal::TypeSwitchInfo > obj)
static Local< Object > ToLocal(v8::internal::Handle< v8::internal::JSObject > obj)
static Local< Symbol > ToLocal(v8::internal::Handle< v8::internal::Symbol > obj)
static Local< Uint32 > Uint32ToLocal(v8::internal::Handle< v8::internal::Object > obj)
static v8::internal::Handle< v8::internal::Object > OpenPersistent(const v8::Persistent< T > &persistent)
Definition: api.h:275
static Local< To > Convert(v8::internal::Handle< From > obj)
Definition: api.h:269
static Local< External > ExternalToLocal(v8::internal::Handle< v8::internal::JSObject > obj)
static Local< Int32Array > ToLocalInt32Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< Integer > IntegerToLocal(v8::internal::Handle< v8::internal::Object > obj)
static Local< ObjectTemplate > ToLocal(v8::internal::Handle< v8::internal::ObjectTemplateInfo > obj)
static Local< Message > MessageToLocal(v8::internal::Handle< v8::internal::Object > obj)
static Local< StackTrace > StackTraceToLocal(v8::internal::Handle< v8::internal::JSArray > obj)
static Local< Int8Array > ToLocalInt8Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< FunctionTemplate > ToLocal(v8::internal::Handle< v8::internal::FunctionTemplateInfo > obj)
static Local< ArrayBuffer > ToLocal(v8::internal::Handle< v8::internal::JSArrayBuffer > obj)
static Local< Int16Array > ToLocalInt16Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< ArrayBufferView > ToLocal(v8::internal::Handle< v8::internal::JSArrayBufferView > obj)
static void ReportApiFailure(const char *location, const char *message)
Definition: api.cc:175
static Local< RegExp > ToLocal(v8::internal::Handle< v8::internal::JSRegExp > obj)
static Local< StackFrame > StackFrameToLocal(v8::internal::Handle< v8::internal::JSObject > obj)
static Local< Value > ToLocal(v8::internal::Handle< v8::internal::Object > obj)
static Local< Uint8Array > ToLocalUint8Array(v8::internal::Handle< v8::internal::JSTypedArray > obj)
static Local< Number > NumberToLocal(v8::internal::Handle< v8::internal::Object > obj)
DeferredHandles * previous_
Definition: api.h:474
void Iterate(ObjectVisitor *v)
Definition: api.cc:7651
List< Object ** > blocks_
Definition: api.h:472
DeferredHandles(Object **first_block_limit, Isolate *isolate)
Definition: api.h:462
Object ** first_block_limit_
Definition: api.h:475
DeferredHandles * next_
Definition: api.h:473
List< internal::Object ** > blocks_
Definition: api.h:574
void EnterContext(Handle< Context > context)
Definition: api.h:614
Handle< Context > LastEnteredContext()
Definition: api.h:629
List< Context * > entered_contexts_
Definition: api.h:576
DeferredHandles * Detach(Object **prev_limit)
Definition: api.cc:7605
char * RestoreThreadHelper(char *from)
DISALLOW_COPY_AND_ASSIGN(HandleScopeImplementer)
internal::Object ** GetSpareOrNewBlock()
Definition: api.h:636
List< Context * > saved_contexts_
Definition: api.h:578
HandleScopeData handle_scope_data_
Definition: api.h:583
Isolate * isolate() const
Definition: api.h:538
char * ArchiveThread(char *to)
Definition: api.cc:7529
void DeleteExtensions(internal::Object **prev_limit)
Definition: api.h:645
bool LastEnteredContextWas(Handle< Context > context)
Definition: api.h:624
void IterateThis(ObjectVisitor *v)
Definition: api.cc:7553
List< internal::Object ** > * blocks()
Definition: api.h:537
void Iterate(v8::internal::ObjectVisitor *v)
Definition: api.cc:7590
HandleScopeImplementer(Isolate *isolate)
Definition: api.h:494
char * RestoreThread(char *from)
Definition: api.cc:7546
void ReturnBlock(Object **block)
Definition: api.h:540
void SaveContext(Context *context)
Definition: api.h:599
Object ** last_handle_before_deferred_block_
Definition: api.h:581
bool is_null() const
Definition: handles.h:124
Handle< T > EscapeFrom(v8::EscapableHandleScope *scope)
Definition: api.h:298
static Handle< T > null()
Definition: handles.h:123
Address NewSpaceTop()
Definition: heap.h:591
void LinkDeferredHandles(DeferredHandles *deferred_handles)
Definition: isolate.cc:2106
Factory * factory()
Definition: isolate.h:982
void RecordWrite(Handle< String > string)
Definition: api.h:400
bool IsUseCountLow(Address top)
Definition: api.h:424
void IncrementUseCount(Address top)
Definition: api.h:429
static const int kFreshnessLimit
Definition: api.h:446
static const int kUseLimit
Definition: api.h:449
static bool IsFreshString(Address string, Address top)
Definition: api.h:420
DISALLOW_COPY_AND_ASSIGN(StringTracker)
bool IsFreshUnusedString(Handle< String > string)
Definition: api.h:411
static void set_stress_type(v8::Testing::StressType stress_type)
Definition: api.h:688
static v8::Testing::StressType stress_type()
Definition: api.h:687
static v8::Testing::StressType stress_type_
Definition: api.h:693
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS 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 enable alignment of csp to bytes on platforms which prefer the register to always be expose gc extension under the specified name show built in functions in stack traces use random jit cookie to mask large constants minimum length for automatic enable preparsing CPU profiler sampling interval in microseconds trace out of bounds accesses to external arrays default size of stack region v8 is allowed to maximum length of function source code printed in a stack trace min size of a semi the new space consists of two semi spaces print one trace line following each garbage collection do not print trace line after scavenger collection print cumulative GC statistics in only print modified registers Trace simulator debug messages Implied by trace sim abort randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot A filename with extra code to be included in the A file to write the raw snapshot bytes to(mksnapshot only)") DEFINE_STRING(raw_context_file
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS 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 enable alignment of csp to bytes on platforms which prefer the register to always be NULL
#define DCHECK(condition)
Definition: logging.h:205
#define STATIC_ASSERT(test)
Definition: macros.h:311
HANDLE HANDLE LPSTACKFRAME64 StackFrame
IN DWORD64 OUT PDWORD64 OUT PIMAGEHLP_SYMBOL64 Symbol
void DeleteArray(T *array)
Definition: allocation.h:68
const int KB
Definition: globals.h:106
kSerializedDataOffset Object
Definition: objects-inl.h:5322
Handle< T > handle(T *t, Isolate *isolate)
Definition: handles.h:146
const int kHandleBlockSize
Definition: api.h:596
void InvokeFunctionCallback(const v8::FunctionCallbackInfo< v8::Value > &info, v8::FunctionCallback callback)
Definition: api.cc:7679
byte * Address
Definition: globals.h:101
void InvokeAccessorGetterCallback(v8::Local< v8::Name > property, const v8::PropertyCallbackInfo< v8::Value > &info, v8::AccessorNameGetterCallback getter)
Definition: api.cc:7665
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20
v8::internal::Handle< v8::internal::Object > FromCData(v8::internal::Isolate *isolate, T obj)
Definition: api.h:104
T ToCData(v8::internal::Object *obj)
Definition: api.h:95
void(* AccessorNameGetterCallback)(Local< Name > property, const PropertyCallbackInfo< Value > &info)
Definition: v8.h:2248
T * ToApi(v8::internal::Handle< v8::internal::Object > obj)
Definition: api.h:309
void(* FunctionCallback)(const FunctionCallbackInfo< Value > &info)
Definition: v8.h:2717
v8::Local< T > ToApiHandle(v8::internal::Handle< v8::internal::Object > obj)
Definition: api.h:314
#define TYPED_ARRAYS(V)
Definition: objects.h:4433
#define T(name, string, precedence)
Definition: token.cc:25