@@ -1348,37 +1348,24 @@ typedef void NAN_INDEX_QUERY_RETURN_TYPE;
13481348
13491349class Callback {
13501350 public:
1351- Callback () {
1352- HandleScope scope;
1353- v8::Local<v8::Object> obj = New<v8::Object>();
1354- handle.Reset (obj);
1355- }
1351+ Callback () {}
13561352
1357- explicit Callback (const v8::Local<v8::Function> &fn) {
1358- HandleScope scope;
1359- v8::Local<v8::Object> obj = New<v8::Object>();
1360- handle.Reset (obj);
1361- SetFunction (fn);
1362- }
1353+ explicit Callback (const v8::Local<v8::Function> &fn) : handle_ (fn) {}
13631354
13641355 ~Callback () {
1365- if (handle.IsEmpty ()) return ;
1366- handle.Reset ();
1356+ handle_.Reset ();
13671357 }
13681358
13691359 bool operator ==(const Callback &other) const {
1370- HandleScope scope;
1371- v8::Local<v8::Value> a = New (handle)->Get (kCallbackIndex );
1372- v8::Local<v8::Value> b = New (other.handle )->Get (kCallbackIndex );
1373- return a->StrictEquals (b);
1360+ return handle_ == other.handle_ ;
13741361 }
13751362
13761363 bool operator !=(const Callback &other) const {
1377- return !this -> operator ==(other);
1364+ return !operator ==(other);
13781365 }
13791366
13801367 inline
1381- v8::Local<v8::Function> operator *() const { return this -> GetFunction (); }
1368+ v8::Local<v8::Function> operator *() const { return GetFunction (); }
13821369
13831370 inline v8::Local<v8::Value> operator ()(
13841371 v8::Local<v8::Object> target
@@ -1393,20 +1380,25 @@ class Callback {
13931380 return this ->Call (argc, argv);
13941381 }
13951382
1383+ // TODO(kkoopa): remove
13961384 inline void SetFunction (const v8::Local<v8::Function> &fn) {
1397- HandleScope scope;
1398- Set (New (handle), kCallbackIndex , fn);
1385+ Reset (fn);
1386+ }
1387+
1388+ inline void Reset (const v8::Local<v8::Function> &fn) {
1389+ handle_.Reset (fn);
1390+ }
1391+
1392+ inline void Reset () {
1393+ handle_.Reset ();
13991394 }
14001395
14011396 inline v8::Local<v8::Function> GetFunction () const {
1402- EscapableHandleScope scope;
1403- return scope.Escape (New (handle)->Get (kCallbackIndex )
1404- .As <v8::Function>());
1397+ return New (handle_);
14051398 }
14061399
14071400 inline bool IsEmpty () const {
1408- HandleScope scope;
1409- return New (handle)->Get (kCallbackIndex )->IsUndefined ();
1401+ return handle_.IsEmpty ();
14101402 }
14111403
14121404 inline v8::Local<v8::Value>
@@ -1433,8 +1425,7 @@ class Callback {
14331425
14341426 private:
14351427 NAN_DISALLOW_ASSIGN_COPY_MOVE (Callback)
1436- Persistent<v8::Object> handle;
1437- static const uint32_t kCallbackIndex = 0 ;
1428+ Persistent<v8::Function> handle_;
14381429
14391430#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION)
14401431 v8::Local<v8::Value> Call_ (v8::Isolate *isolate
@@ -1443,8 +1434,7 @@ class Callback {
14431434 , v8::Local<v8::Value> argv[]) const {
14441435 EscapableHandleScope scope;
14451436
1446- v8::Local<v8::Function> callback = New (handle)->
1447- Get (kCallbackIndex ).As <v8::Function>();
1437+ v8::Local<v8::Function> callback = New (handle_);
14481438# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION
14491439 return scope.Escape (New (node::MakeCallback (
14501440 isolate
@@ -1469,8 +1459,7 @@ class Callback {
14691459 , v8::Local<v8::Value> argv[]) const {
14701460 EscapableHandleScope scope;
14711461
1472- v8::Local<v8::Function> callback = New (handle)->
1473- Get (kCallbackIndex ).As <v8::Function>();
1462+ v8::Local<v8::Function> callback = New (handle_);
14741463 return scope.Escape (New (node::MakeCallback (
14751464 target
14761465 , callback
0 commit comments