mirror of
https://github.com/electron/electron.git
synced 2026-02-13 08:35:02 -05:00
Constructor should wrap the this pointer.
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user