From 3d219b4be6f37fe99ca2e738eb0ea9d1b152af34 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 22 Apr 2014 15:57:23 +0800 Subject: [PATCH] Do not wrap an object when it's already wrapped. --- native_mate/wrappable.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/native_mate/wrappable.cc b/native_mate/wrappable.cc index ed7b49f3508c..17f87cadb646 100644 --- a/native_mate/wrappable.cc +++ b/native_mate/wrappable.cc @@ -17,6 +17,9 @@ Wrappable::~Wrappable() { } void Wrappable::Wrap(v8::Isolate* isolate, v8::Handle wrapper) { + if (!wrapper_.IsEmpty()) + return; + MATE_SET_INTERNAL_FIELD_POINTER(wrapper, 0, this); MATE_PERSISTENT_ASSIGN(v8::Object, isolate, wrapper_, wrapper); MATE_PERSISTENT_SET_WEAK(wrapper_, this, WeakCallback); @@ -40,9 +43,8 @@ MATE_WEAK_CALLBACK(Wrappable::WeakCallback, v8::Object, Wrappable) { } v8::Handle Wrappable::GetWrapper(v8::Isolate* isolate) { - if (!wrapper_.IsEmpty()) { + if (!wrapper_.IsEmpty()) return MATE_PERSISTENT_TO_LOCAL(v8::Object, isolate, wrapper_); - } v8::Local templ = GetObjectTemplateBuilder(isolate).Build();