| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index b113d74792108c62ff13627b8117598c17b1b297..2e76c94f224f0e07d16177e668445358327dd657 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -191,8 +191,13 @@ class UniqueId {
|
| * \param object the weak global object to be reclaimed by the garbage collector
|
| * \param parameter the value passed in when making the weak global object
|
| */
|
| -typedef void (*WeakReferenceCallback)(Persistent<Value> object,
|
| - void* parameter);
|
| +template<typename T, typename P>
|
| +class WeakReferenceCallbacks {
|
| + public:
|
| + typedef void (*Revivable)(Isolate* isolate,
|
| + Persistent<T>* object,
|
| + P* parameter);
|
| +};
|
|
|
| // TODO(svenpanne) Temporary definition until Chrome is in sync.
|
| typedef void (*NearDeathCallback)(Isolate* isolate,
|
| @@ -598,8 +603,17 @@ template <class T> class Persistent // NOLINT
|
| // TODO(dcarney): remove before cutover
|
| V8_INLINE(void Dispose(Isolate* isolate));
|
|
|
| - V8_INLINE(void MakeWeak(void* parameters,
|
| - WeakReferenceCallback callback));
|
| + template<typename S, typename P>
|
| + V8_INLINE(void MakeWeak(
|
| + Isolate* isolate,
|
| + P* parameters,
|
| + typename WeakReferenceCallbacks<S, P>::Revivable callback));
|
| +
|
| + template<typename P>
|
| + V8_INLINE(void MakeWeak(
|
| + Isolate* isolate,
|
| + P* parameters,
|
| + typename WeakReferenceCallbacks<T, P>::Revivable callback));
|
|
|
| /**
|
| * Make the reference to this object weak. When only weak handles
|
| @@ -4363,10 +4377,11 @@ class V8EXPORT V8 {
|
| internal::Object** handle);
|
| static void DisposeGlobal(internal::Isolate* isolate,
|
| internal::Object** global_handle);
|
| + typedef WeakReferenceCallbacks<Value, void>::Revivable RevivableCallback;
|
| static void MakeWeak(internal::Isolate* isolate,
|
| internal::Object** global_handle,
|
| void* data,
|
| - WeakReferenceCallback weak_reference_callback,
|
| + RevivableCallback weak_reference_callback,
|
| NearDeathCallback near_death_callback);
|
| static void ClearWeak(internal::Isolate* isolate,
|
| internal::Object** global_handle);
|
| @@ -5282,15 +5297,31 @@ void Persistent<T>::Dispose(Isolate* isolate) {
|
|
|
|
|
| template <class T>
|
| -void Persistent<T>::MakeWeak(void* parameters, WeakReferenceCallback callback) {
|
| - Isolate* isolate = Isolate::GetCurrent();
|
| +template <typename S, typename P>
|
| +void Persistent<T>::MakeWeak(
|
| + Isolate* isolate,
|
| + P* parameters,
|
| + typename WeakReferenceCallbacks<S, P>::Revivable callback) {
|
| + TYPE_CHECK(S, T);
|
| + typedef typename WeakReferenceCallbacks<Value, void>::Revivable Revivable;
|
| V8::MakeWeak(reinterpret_cast<internal::Isolate*>(isolate),
|
| reinterpret_cast<internal::Object**>(this->val_),
|
| parameters,
|
| - callback,
|
| + reinterpret_cast<Revivable>(callback),
|
| NULL);
|
| }
|
|
|
| +
|
| +template <class T>
|
| +template <typename P>
|
| +void Persistent<T>::MakeWeak(
|
| + Isolate* isolate,
|
| + P* parameters,
|
| + typename WeakReferenceCallbacks<T, P>::Revivable callback) {
|
| + MakeWeak<T, P>(isolate, parameters, callback);
|
| +}
|
| +
|
| +
|
| template <class T>
|
| void Persistent<T>::MakeWeak(Isolate* isolate,
|
| void* parameters,
|
|
|