Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index ff44fdf28730b73b329e91e032ca1c9cdb5da75e..448aaa1d0a5bdfa3fe892181010252db8744cf2c 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -390,7 +390,7 @@ template <class T> class Persistent : public Handle<T> { |
*/ |
inline void MakeWeak(void* parameters, WeakReferenceCallback callback); |
- /** Clears the weak reference to this object.*/ |
+ /** Clears the weak reference to this object. */ |
inline void ClearWeak(); |
/** |
@@ -402,14 +402,13 @@ template <class T> class Persistent : public Handle<T> { |
*/ |
inline void MarkIndependent(); |
- /** |
- *Checks if the handle holds the only reference to an object. |
- */ |
+ /** Returns true if this handle was previously marked as independent. */ |
+ inline bool IsIndependent() const; |
+ |
+ /** Checks if the handle holds the only reference to an object. */ |
inline bool IsNearDeath() const; |
- /** |
- * Returns true if the handle's reference is weak. |
- */ |
+ /** Returns true if the handle's reference is weak. */ |
inline bool IsWeak() const; |
/** |
@@ -418,6 +417,12 @@ template <class T> class Persistent : public Handle<T> { |
*/ |
inline void SetWrapperClassId(uint16_t class_id); |
+ /** |
+ * Returns the class ID previously assigned to this handle or 0 if no class |
+ * ID was previously assigned. |
+ */ |
+ inline uint16_t WrapperClassId() const; |
+ |
private: |
friend class ImplementationUtilities; |
friend class ObjectTemplate; |
@@ -3011,7 +3016,7 @@ typedef void (*JitCodeEventHandler)(const JitCodeEvent* event); |
/** |
- * Interface for iterating though all external resources in the heap. |
+ * Interface for iterating through all external resources in the heap. |
*/ |
class V8EXPORT ExternalResourceVisitor { // NOLINT |
public: |
@@ -3021,6 +3026,17 @@ class V8EXPORT ExternalResourceVisitor { // NOLINT |
/** |
+ * Interface for iterating through all the persistent handles in the heap. |
+ */ |
+class V8EXPORT PersistentHandleVisitor { // NOLINT |
+ public: |
+ virtual ~PersistentHandleVisitor() {} |
+ virtual void VisitPersistentHandle(Persistent<Value> value, |
+ uint16_t class_id) {} |
+}; |
+ |
+ |
+/** |
* Container class for static utility functions. |
*/ |
class V8EXPORT V8 { |
@@ -3428,6 +3444,12 @@ class V8EXPORT V8 { |
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); |
+ |
+ /** |
* Optional notification that the embedder is idle. |
* V8 uses the notification to reduce memory footprint. |
* This call can be used repeatedly if the embedder remains idle. |
@@ -3465,10 +3487,12 @@ class V8EXPORT V8 { |
WeakReferenceCallback); |
static void ClearWeak(internal::Object** global_handle); |
static void MarkIndependent(internal::Object** global_handle); |
+ static bool IsGlobalIndependent(internal::Object** global_handle); |
static bool IsGlobalNearDeath(internal::Object** global_handle); |
static bool IsGlobalWeak(internal::Object** global_handle); |
static void SetWrapperClassId(internal::Object** global_handle, |
uint16_t class_id); |
+ static uint16_t GetWrapperClassId(internal::Object** global_handle); |
template <class T> friend class Handle; |
template <class T> friend class Local; |
@@ -4186,6 +4210,13 @@ Persistent<T> Persistent<T>::New(Handle<T> that) { |
template <class T> |
+bool Persistent<T>::IsIndependent() const { |
+ if (this->IsEmpty()) return false; |
+ return V8::IsGlobalIndependent(reinterpret_cast<internal::Object**>(**this)); |
+} |
+ |
+ |
+template <class T> |
bool Persistent<T>::IsNearDeath() const { |
if (this->IsEmpty()) return false; |
return V8::IsGlobalNearDeath(reinterpret_cast<internal::Object**>(**this)); |
@@ -4231,6 +4262,11 @@ void Persistent<T>::SetWrapperClassId(uint16_t class_id) { |
V8::SetWrapperClassId(reinterpret_cast<internal::Object**>(**this), class_id); |
} |
+template <class T> |
+uint16_t Persistent<T>::WrapperClassId() const { |
+ return V8::GetWrapperClassId(reinterpret_cast<internal::Object**>(**this)); |
+} |
+ |
Arguments::Arguments(internal::Object** implicit_args, |
internal::Object** values, int length, |
bool is_construct_call) |