| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index 9a881f2383ce6e6107c7c3da77f234113e62749f..389935e3b3500523becffa659883c6e94724229b 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -545,6 +545,15 @@ template <class T> class PersistentBase {
|
| typename WeakCallbackInfo<P>::Callback callback,
|
| WeakCallbackType type);
|
|
|
| + /**
|
| + * Turns this handle into a weak phantom handle without finalization callback.
|
| + * The handle will be reset automatically when the garbage collector detects
|
| + * that the object is no longer reachable.
|
| + * A related function Isolate::NumberOfPhantomHandleResetsSinceLastCall
|
| + * returns how many phantom handles were reset by the garbage collector.
|
| + */
|
| + V8_INLINE void SetWeak();
|
| +
|
| template<typename P>
|
| V8_INLINE P* ClearWeak();
|
|
|
| @@ -5784,6 +5793,12 @@ class V8_EXPORT Isolate {
|
| AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes);
|
|
|
| /**
|
| + * Returns the number of phantom handles without callbacks that were reset
|
| + * by the garbage collector since the last call to this function.
|
| + */
|
| + size_t NumberOfPhantomHandleResetsSinceLastCall();
|
| +
|
| + /**
|
| * Returns heap profiler for this isolate. Will return NULL until the isolate
|
| * is initialized.
|
| */
|
| @@ -6628,16 +6643,17 @@ class V8_EXPORT V8 {
|
| internal::Object** handle);
|
| static internal::Object** CopyPersistent(internal::Object** handle);
|
| static void DisposeGlobal(internal::Object** global_handle);
|
| - static void MakeWeak(internal::Object** global_handle, void* data,
|
| + static void MakeWeak(internal::Object** location, void* data,
|
| WeakCallbackInfo<void>::Callback weak_callback,
|
| WeakCallbackType type);
|
| - static void MakeWeak(internal::Object** global_handle, void* data,
|
| + static void MakeWeak(internal::Object** location, void* data,
|
| // Must be 0 or -1.
|
| int internal_field_index1,
|
| // Must be 1 or -1.
|
| int internal_field_index2,
|
| WeakCallbackInfo<void>::Callback weak_callback);
|
| - static void* ClearWeak(internal::Object** global_handle);
|
| + static void MakeWeak(internal::Object*** location_addr);
|
| + static void* ClearWeak(internal::Object** location);
|
| static void Eternalize(Isolate* isolate,
|
| Value* handle,
|
| int* index);
|
| @@ -7609,6 +7625,10 @@ V8_INLINE void PersistentBase<T>::SetWeak(
|
| reinterpret_cast<Callback>(callback), type);
|
| }
|
|
|
| +template <class T>
|
| +void PersistentBase<T>::SetWeak() {
|
| + V8::MakeWeak(reinterpret_cast<internal::Object***>(&this->val_));
|
| +}
|
|
|
| template <class T>
|
| template <typename P>
|
|
|