diff options
Diffstat (limited to 'src/node_object_wrap.h')
-rw-r--r-- | src/node_object_wrap.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/node_object_wrap.h b/src/node_object_wrap.h index 3002e617591..8eafd891cfc 100644 --- a/src/node_object_wrap.h +++ b/src/node_object_wrap.h @@ -12,6 +12,7 @@ class ObjectWrap { refs_ = 0; } + virtual ~ObjectWrap ( ) { if (!handle_.IsEmpty()) { assert(handle_.IsNearDeath()); @@ -21,19 +22,19 @@ class ObjectWrap { } } + template <class T> - static inline T* Unwrap (v8::Handle<v8::Object> handle) - { + static inline T* Unwrap (v8::Handle<v8::Object> handle) { assert(!handle.IsEmpty()); assert(handle->InternalFieldCount() > 0); return static_cast<T*>(handle->GetPointerFromInternalField(0)); } + v8::Persistent<v8::Object> handle_; // ro protected: - inline void Wrap (v8::Handle<v8::Object> handle) - { + inline void Wrap (v8::Handle<v8::Object> handle) { assert(handle_.IsEmpty()); assert(handle->InternalFieldCount() > 0); handle_ = v8::Persistent<v8::Object>::New(handle); @@ -41,8 +42,8 @@ class ObjectWrap { MakeWeak(); } - inline void MakeWeak (void) - { + + inline void MakeWeak (void) { handle_.MakeWeak(this, WeakCallback); } @@ -72,11 +73,12 @@ class ObjectWrap { if (--refs_ == 0) { MakeWeak(); } } + int refs_; // ro + private: - static void WeakCallback (v8::Persistent<v8::Value> value, void *data) - { + static void WeakCallback (v8::Persistent<v8::Value> value, void *data) { ObjectWrap *obj = static_cast<ObjectWrap*>(data); assert(value == obj->handle_); assert(!obj->refs_); |