#ifndef SRC_BASE_OBJECT_INL_H_ #define SRC_BASE_OBJECT_INL_H_ #include "base-object.h" #include "env.h" #include "env-inl.h" #include "util.h" #include "util-inl.h" #include "v8.h" namespace node { inline BaseObject::BaseObject(Environment* env, v8::Local handle) : handle_(env->isolate(), handle), env_(env) { CHECK_EQ(false, handle.IsEmpty()); } inline BaseObject::~BaseObject() { CHECK(handle_.IsEmpty()); } inline v8::Persistent& BaseObject::persistent() { return handle_; } inline v8::Local BaseObject::object() { return PersistentToLocal(env_->isolate(), handle_); } inline Environment* BaseObject::env() const { return env_; } template inline void BaseObject::WeakCallback( const v8::WeakCallbackData& data) { Type* self = data.GetParameter(); self->persistent().Reset(); delete self; } template inline void BaseObject::MakeWeak(Type* ptr) { v8::HandleScope scope(env_->isolate()); v8::Local handle = object(); CHECK_GT(handle->InternalFieldCount(), 0); Wrap(handle, ptr); handle_.MarkIndependent(); handle_.SetWeak(ptr, WeakCallback); } inline void BaseObject::ClearWeak() { handle_.ClearWeak(); } } // namespace node #endif // SRC_BASE_OBJECT_INL_H_