Constructor should wrap the this pointer.
This commit is contained in:
parent
bdfbef41c6
commit
ac5be7dad7
3 changed files with 14 additions and 5 deletions
|
@ -143,10 +143,12 @@ class Constructor {
|
|||
}
|
||||
|
||||
private:
|
||||
static void New(const WrappableFactoryFunction& factory, Arguments* args) {
|
||||
static void New(const WrappableFactoryFunction& factory,
|
||||
v8::Isolate* isolate,
|
||||
Arguments* args) {
|
||||
WrappableBase* object = internal::InvokeFactory(args, factory);
|
||||
if (object)
|
||||
MATE_SET_INTERNAL_FIELD_POINTER(args->GetThis(), 0, object);
|
||||
object->Wrap(isolate, args->GetThis());
|
||||
else
|
||||
args->ThrowError();
|
||||
|
||||
|
|
|
@ -16,6 +16,12 @@ WrappableBase::~WrappableBase() {
|
|||
MATE_PERSISTENT_RESET(wrapper_);
|
||||
}
|
||||
|
||||
void WrappableBase::Wrap(v8::Isolate* isolate, v8::Handle<v8::Object> wrapper) {
|
||||
MATE_SET_INTERNAL_FIELD_POINTER(wrapper, 0, this);
|
||||
MATE_PERSISTENT_ASSIGN(v8::Object, isolate, wrapper_, wrapper);
|
||||
MATE_PERSISTENT_SET_WEAK(wrapper_, this, WeakCallback);
|
||||
}
|
||||
|
||||
ObjectTemplateBuilder WrappableBase::GetObjectTemplateBuilder(
|
||||
v8::Isolate* isolate) {
|
||||
return ObjectTemplateBuilder(isolate);
|
||||
|
@ -38,9 +44,7 @@ v8::Handle<v8::Object> WrappableBase::GetWrapperImpl(v8::Isolate* isolate) {
|
|||
CHECK(!templ.IsEmpty());
|
||||
CHECK_EQ(1, templ->InternalFieldCount());
|
||||
v8::Handle<v8::Object> wrapper = templ->NewInstance();
|
||||
MATE_SET_INTERNAL_FIELD_POINTER(wrapper, 0, this);
|
||||
MATE_PERSISTENT_ASSIGN(v8::Object, isolate, wrapper_, wrapper);
|
||||
MATE_PERSISTENT_SET_WEAK(wrapper_, this, WeakCallback);
|
||||
Wrap(isolate, wrapper);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,9 @@ class ObjectTemplateBuilder;
|
|||
|
||||
// Non-template base class to share code between templates instances.
|
||||
class WrappableBase {
|
||||
public:
|
||||
void Wrap(v8::Isolate* isolate, v8::Handle<v8::Object> wrapper);
|
||||
|
||||
protected:
|
||||
WrappableBase();
|
||||
virtual ~WrappableBase();
|
||||
|
|
Loading…
Reference in a new issue