Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index f70f45769bb5ca58ff6d178b7129f92448301e8c..92eb11bceca4c6d91db2c1c546d89a5262418a12 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -4401,6 +4401,27 @@ typedef void (*JitCodeEventHandler)(const JitCodeEvent* event); |
/** |
+ * Interface for iterating through all external resources in the heap. |
+ */ |
+class V8_EXPORT ExternalResourceVisitor { // NOLINT |
+ public: |
+ virtual ~ExternalResourceVisitor() {} |
+ virtual void VisitExternalString(Handle<String> string) {} |
+}; |
+ |
+ |
+/** |
+ * Interface for iterating through all the persistent handles in the heap. |
+ */ |
+class V8_EXPORT PersistentHandleVisitor { // NOLINT |
+ public: |
+ virtual ~PersistentHandleVisitor() {} |
+ virtual void VisitPersistentHandle(Persistent<Value>* value, |
+ uint16_t class_id) {} |
+}; |
+ |
+ |
+/** |
* Isolate represents an isolated instance of the V8 engine. V8 isolates have |
* completely separate states. Objects from one isolate must not be used in |
* other isolates. The embedder can create multiple isolates and use them in |
@@ -4759,6 +4780,42 @@ class V8_EXPORT Isolate { |
*/ |
void RemoveGCEpilogueCallback(GCEpilogueCallback callback); |
+ |
+ /** |
+ * Forcefully terminate the current thread of JavaScript execution |
+ * in the given isolate. |
+ * |
+ * This method can be used by any thread even if that thread has not |
+ * acquired the V8 lock with a Locker object. |
+ */ |
+ void TerminateExecution(); |
+ |
+ /** |
+ * Is V8 terminating JavaScript execution. |
+ * |
+ * Returns true if JavaScript execution is currently terminating |
+ * because of a call to TerminateExecution. In that case there are |
+ * still JavaScript frames on the stack and the termination |
+ * exception is still active. |
+ */ |
+ bool IsExecutionTerminating(); |
+ |
+ /** |
+ * Resume execution capability in the given isolate, whose execution |
+ * was previously forcefully terminated using TerminateExecution(). |
+ * |
+ * When execution is forcefully terminated using TerminateExecution(), |
+ * the isolate can not resume execution until all JavaScript frames |
+ * have propagated the uncatchable exception which is generated. This |
+ * method allows the program embedding the engine to handle the |
+ * termination event and resume execution capability, even if |
+ * JavaScript frames remain on the stack. |
+ * |
+ * This method can be used by any thread even if that thread has not |
+ * acquired the V8 lock with a Locker object. |
+ */ |
+ void CancelTerminateExecution(); |
+ |
/** |
* Request V8 to interrupt long running JavaScript code and invoke |
* the given |callback| passing the given |data| to it. After |callback| |
@@ -4940,6 +4997,84 @@ class V8_EXPORT Isolate { |
*/ |
void GetCodeRange(void** start, size_t* length_in_bytes); |
+ /** Set the callback to invoke in case of fatal errors. */ |
+ void SetFatalErrorHandler(FatalErrorCallback that); |
+ |
+ /** |
+ * Set the callback to invoke to check if code generation from |
+ * strings should be allowed. |
+ */ |
+ void SetAllowCodeGenerationFromStringsCallback( |
+ AllowCodeGenerationFromStringsCallback callback); |
+ |
+ /** |
+ * Check if V8 is dead and therefore unusable. This is the case after |
+ * fatal errors such as out-of-memory situations. |
+ */ |
+ bool IsDead(); |
+ |
+ /** |
+ * Adds a message listener. |
+ * |
+ * The same message listener can be added more than once and in that |
+ * case it will be called more than once for each message. |
+ * |
+ * If data is specified, it will be passed to the callback when it is called. |
+ * Otherwise, the exception object will be passed to the callback instead. |
+ */ |
+ bool AddMessageListener(MessageCallback that, |
+ Handle<Value> data = Handle<Value>()); |
+ |
+ /** |
+ * Remove all message listeners from the specified callback function. |
+ */ |
+ void RemoveMessageListeners(MessageCallback that); |
+ |
+ /** Callback function for reporting failed access checks.*/ |
+ void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback); |
+ |
+ /** |
+ * Tells V8 to capture current stack trace when uncaught exception occurs |
+ * and report it to the message listeners. The option is off by default. |
+ */ |
+ void SetCaptureStackTraceForUncaughtExceptions( |
+ bool capture, int frame_limit = 10, |
+ StackTrace::StackTraceOptions options = StackTrace::kOverview); |
+ |
+ /** |
+ * Enables the host application to provide a mechanism to be notified |
+ * and perform custom logging when V8 Allocates Executable Memory. |
+ */ |
+ void AddMemoryAllocationCallback(MemoryAllocationCallback callback, |
+ ObjectSpace space, AllocationAction action); |
+ |
+ /** |
+ * Removes callback that was installed by AddMemoryAllocationCallback. |
+ */ |
+ void RemoveMemoryAllocationCallback(MemoryAllocationCallback callback); |
+ |
+ /** |
+ * Iterates through all external resources referenced from current isolate |
+ * heap. GC is not invoked prior to iterating, therefore there is no |
+ * guarantee that visited objects are still alive. |
+ */ |
+ void VisitExternalResources(ExternalResourceVisitor* visitor); |
+ |
+ /** |
+ * Iterates through all the persistent handles in the current isolate's heap |
+ * that have class_ids. |
+ */ |
+ void VisitHandlesWithClassIds(PersistentHandleVisitor* visitor); |
+ |
+ /** |
+ * Iterates through all the persistent handles in the current isolate's heap |
+ * that have class_ids and are candidates to be marked as partially dependent |
+ * handles. This will visit handles to young objects created since the last |
+ * garbage collection but is free to visit an arbitrary superset of these |
+ * objects. |
+ */ |
+ void VisitHandlesForPartialDependence(PersistentHandleVisitor* visitor); |
+ |
private: |
template<class K, class V, class Traits> friend class PersistentValueMap; |
@@ -5019,39 +5154,20 @@ typedef uintptr_t (*ReturnAddressLocationResolver)( |
/** |
- * Interface for iterating through all external resources in the heap. |
- */ |
-class V8_EXPORT ExternalResourceVisitor { // NOLINT |
- public: |
- virtual ~ExternalResourceVisitor() {} |
- virtual void VisitExternalString(Handle<String> string) {} |
-}; |
- |
- |
-/** |
- * Interface for iterating through all the persistent handles in the heap. |
- */ |
-class V8_EXPORT PersistentHandleVisitor { // NOLINT |
- public: |
- virtual ~PersistentHandleVisitor() {} |
- virtual void VisitPersistentHandle(Persistent<Value>* value, |
- uint16_t class_id) {} |
-}; |
- |
- |
-/** |
* Container class for static utility functions. |
*/ |
class V8_EXPORT V8 { |
public: |
/** Set the callback to invoke in case of fatal errors. */ |
- static void SetFatalErrorHandler(FatalErrorCallback that); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void SetFatalErrorHandler(FatalErrorCallback that); |
/** |
* Set the callback to invoke to check if code generation from |
* strings should be allowed. |
*/ |
- static void SetAllowCodeGenerationFromStringsCallback( |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void SetAllowCodeGenerationFromStringsCallback( |
AllowCodeGenerationFromStringsCallback that); |
/** |
@@ -5063,10 +5179,11 @@ class V8_EXPORT V8 { |
static void SetArrayBufferAllocator(ArrayBuffer::Allocator* allocator); |
/** |
- * Check if V8 is dead and therefore unusable. This is the case after |
- * fatal errors such as out-of-memory situations. |
- */ |
- static bool IsDead(); |
+ * Check if V8 is dead and therefore unusable. This is the case after |
+ * fatal errors such as out-of-memory situations. |
+ */ |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static bool IsDead(); |
/** |
* The following 4 functions are to be used when V8 is built with |
@@ -5119,21 +5236,23 @@ class V8_EXPORT V8 { |
* If data is specified, it will be passed to the callback when it is called. |
* Otherwise, the exception object will be passed to the callback instead. |
*/ |
- static bool AddMessageListener(MessageCallback that, |
- Handle<Value> data = Handle<Value>()); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static bool AddMessageListener( |
+ MessageCallback that, Handle<Value> data = Handle<Value>()); |
/** |
* Remove all message listeners from the specified callback function. |
*/ |
- static void RemoveMessageListeners(MessageCallback that); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void RemoveMessageListeners(MessageCallback that); |
/** |
* Tells V8 to capture current stack trace when uncaught exception occurs |
* and report it to the message listeners. The option is off by default. |
*/ |
- static void SetCaptureStackTraceForUncaughtExceptions( |
- bool capture, |
- int frame_limit = 10, |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void SetCaptureStackTraceForUncaughtExceptions( |
+ bool capture, int frame_limit = 10, |
StackTrace::StackTraceOptions options = StackTrace::kOverview); |
/** |
@@ -5152,7 +5271,9 @@ class V8_EXPORT V8 { |
static const char* GetVersion(); |
/** Callback function for reporting failed access checks.*/ |
- static void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void SetFailedAccessCheckCallbackFunction( |
+ FailedAccessCheckCallback); |
/** |
* Enables the host application to receive a notification before a |
@@ -5164,6 +5285,7 @@ class V8_EXPORT V8 { |
* register the same callback function two times with different |
* GCType filters. |
*/ |
+ // TODO(dcarney): deprecate this. |
static void AddGCPrologueCallback( |
GCPrologueCallback callback, GCType gc_type_filter = kGCTypeAll); |
@@ -5171,7 +5293,8 @@ class V8_EXPORT V8 { |
* This function removes callback which was installed by |
* AddGCPrologueCallback function. |
*/ |
- static void RemoveGCPrologueCallback(GCPrologueCallback callback); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void RemoveGCPrologueCallback(GCPrologueCallback callback); |
/** |
* Enables the host application to receive a notification after a |
@@ -5183,6 +5306,7 @@ class V8_EXPORT V8 { |
* register the same callback function two times with different |
* GCType filters. |
*/ |
+ // TODO(dcarney): deprecate this. |
static void AddGCEpilogueCallback( |
GCEpilogueCallback callback, GCType gc_type_filter = kGCTypeAll); |
@@ -5190,20 +5314,24 @@ class V8_EXPORT V8 { |
* This function removes callback which was installed by |
* AddGCEpilogueCallback function. |
*/ |
- static void RemoveGCEpilogueCallback(GCEpilogueCallback callback); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void RemoveGCEpilogueCallback(GCEpilogueCallback callback); |
/** |
* Enables the host application to provide a mechanism to be notified |
* and perform custom logging when V8 Allocates Executable Memory. |
*/ |
- static void AddMemoryAllocationCallback(MemoryAllocationCallback callback, |
- ObjectSpace space, |
- AllocationAction action); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void AddMemoryAllocationCallback( |
+ MemoryAllocationCallback callback, ObjectSpace space, |
+ AllocationAction action); |
/** |
* Removes callback that was installed by AddMemoryAllocationCallback. |
*/ |
- static void RemoveMemoryAllocationCallback(MemoryAllocationCallback callback); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void RemoveMemoryAllocationCallback( |
+ MemoryAllocationCallback callback); |
/** |
* Initializes V8. This function needs to be called before the first Isolate |
@@ -5233,7 +5361,8 @@ class V8_EXPORT V8 { |
* |
* \param isolate The isolate in which to terminate the current JS execution. |
*/ |
- static void TerminateExecution(Isolate* isolate); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void TerminateExecution(Isolate* isolate); |
/** |
* Is V8 terminating JavaScript execution. |
@@ -5245,7 +5374,8 @@ class V8_EXPORT V8 { |
* |
* \param isolate The isolate in which to check. |
*/ |
- static bool IsExecutionTerminating(Isolate* isolate = NULL); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static bool IsExecutionTerminating(Isolate* isolate = NULL); |
/** |
* Resume execution capability in the given isolate, whose execution |
@@ -5263,7 +5393,8 @@ class V8_EXPORT V8 { |
* |
* \param isolate The isolate in which to resume execution capability. |
*/ |
- static void CancelTerminateExecution(Isolate* isolate); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void CancelTerminateExecution(Isolate* isolate); |
/** |
* Releases any resources used by v8 and stops any utility threads |
@@ -5281,19 +5412,24 @@ class V8_EXPORT V8 { |
* heap. GC is not invoked prior to iterating, therefore there is no |
* guarantee that visited objects are still alive. |
*/ |
- static void VisitExternalResources(ExternalResourceVisitor* visitor); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void VisitExternalResources( |
+ ExternalResourceVisitor* visitor); |
/** |
* Iterates through all the persistent handles in the current isolate's heap |
* that have class_ids. |
*/ |
- static void VisitHandlesWithClassIds(PersistentHandleVisitor* visitor); |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void VisitHandlesWithClassIds( |
+ PersistentHandleVisitor* visitor); |
/** |
* Iterates through all the persistent handles in isolate's heap that have |
* class_ids. |
*/ |
- static void VisitHandlesWithClassIds( |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void VisitHandlesWithClassIds( |
Isolate* isolate, PersistentHandleVisitor* visitor); |
/** |
@@ -5303,7 +5439,8 @@ class V8_EXPORT V8 { |
* garbage collection but is free to visit an arbitrary superset of these |
* objects. |
*/ |
- static void VisitHandlesForPartialDependence( |
+ // TODO(dcarney): deprecate this. |
+ V8_INLINE static void VisitHandlesForPartialDependence( |
Isolate* isolate, PersistentHandleVisitor* visitor); |
/** |
@@ -7076,6 +7213,119 @@ void* Context::GetAlignedPointerFromEmbedderData(int index) { |
} |
+void V8::SetAllowCodeGenerationFromStringsCallback( |
+ AllowCodeGenerationFromStringsCallback callback) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->SetAllowCodeGenerationFromStringsCallback(callback); |
+} |
+ |
+ |
+bool V8::IsDead() { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ return isolate->IsDead(); |
+} |
+ |
+ |
+bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ return isolate->AddMessageListener(that, data); |
+} |
+ |
+ |
+void V8::RemoveMessageListeners(MessageCallback that) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->RemoveMessageListeners(that); |
+} |
+ |
+ |
+void V8::SetFailedAccessCheckCallbackFunction( |
+ FailedAccessCheckCallback callback) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->SetFailedAccessCheckCallbackFunction(callback); |
+} |
+ |
+ |
+void V8::SetCaptureStackTraceForUncaughtExceptions( |
+ bool capture, int frame_limit, StackTrace::StackTraceOptions options) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->SetCaptureStackTraceForUncaughtExceptions(capture, frame_limit, |
+ options); |
+} |
+ |
+ |
+void V8::SetFatalErrorHandler(FatalErrorCallback callback) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->SetFatalErrorHandler(callback); |
+} |
+ |
+ |
+void V8::RemoveGCPrologueCallback(GCPrologueCallback callback) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->RemoveGCPrologueCallback( |
+ reinterpret_cast<v8::Isolate::GCPrologueCallback>(callback)); |
+} |
+ |
+ |
+void V8::RemoveGCEpilogueCallback(GCEpilogueCallback callback) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->RemoveGCEpilogueCallback( |
+ reinterpret_cast<v8::Isolate::GCEpilogueCallback>(callback)); |
+} |
+ |
+ |
+void V8::AddMemoryAllocationCallback(MemoryAllocationCallback callback, |
+ ObjectSpace space, |
+ AllocationAction action) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->AddMemoryAllocationCallback(callback, space, action); |
+} |
+ |
+ |
+void V8::RemoveMemoryAllocationCallback(MemoryAllocationCallback callback) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->RemoveMemoryAllocationCallback(callback); |
+} |
+ |
+ |
+void V8::TerminateExecution(Isolate* isolate) { isolate->TerminateExecution(); } |
+ |
+ |
+bool V8::IsExecutionTerminating(Isolate* isolate) { |
+ if (isolate == NULL) { |
+ isolate = Isolate::GetCurrent(); |
+ } |
+ return isolate->IsExecutionTerminating(); |
+} |
+ |
+ |
+void V8::CancelTerminateExecution(Isolate* isolate) { |
+ isolate->CancelTerminateExecution(); |
+} |
+ |
+ |
+void V8::VisitExternalResources(ExternalResourceVisitor* visitor) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->VisitExternalResources(visitor); |
+} |
+ |
+ |
+void V8::VisitHandlesWithClassIds(PersistentHandleVisitor* visitor) { |
+ Isolate* isolate = Isolate::GetCurrent(); |
+ isolate->VisitHandlesWithClassIds(visitor); |
+} |
+ |
+ |
+void V8::VisitHandlesWithClassIds(Isolate* isolate, |
+ PersistentHandleVisitor* visitor) { |
+ isolate->VisitHandlesWithClassIds(visitor); |
+} |
+ |
+ |
+void V8::VisitHandlesForPartialDependence(Isolate* isolate, |
+ PersistentHandleVisitor* visitor) { |
+ isolate->VisitHandlesForPartialDependence(visitor); |
+} |
+ |
/** |
* \example shell.cc |
* A simple shell that takes a list of expressions on the |