@@ -595,29 +595,43 @@ class TryCatch {
595595 object->SetAlignedPointerInInternalField (index, value);
596596 }
597597
598- # define NAN_GC_CALLBACK (name ) \
599- void name (v8::Isolate *isolate, v8::GCType type, v8::GCCallbackFlags flags)
598+ typedef void (*GCCallback)(v8::GCType type, v8::GCCallbackFlags flags);
600599
600+ namespace imp {
601+ template <GCCallback F>
602+ class GCCallback {
603+ public:
604+ static void call (
605+ v8::Isolate *isolate, v8::GCType type, v8::GCCallbackFlags flags) {
606+ F (type, flags);
607+ }
608+ };
609+ }
610+
611+ template <GCCallback F>
601612 NAN_INLINE void AddGCEpilogueCallback (
602- v8::Isolate::GCEpilogueCallback callback
603- , v8::GCType gc_type_filter = v8:: kGCTypeAll ) {
604- v8::Isolate::GetCurrent ()-> AddGCEpilogueCallback (callback , gc_type_filter);
613+ v8::GCType gc_type_filter = v8::kGCTypeAll ) {
614+ v8::Isolate::GetCurrent ()-> AddGCEpilogueCallback (
615+ imp::GCCallback<F>::call , gc_type_filter);
605616 }
606617
607- NAN_INLINE void RemoveGCEpilogueCallback (
608- v8::Isolate::GCEpilogueCallback callback) {
609- v8::Isolate::GetCurrent ()->RemoveGCEpilogueCallback (callback);
618+ template <GCCallback F>
619+ NAN_INLINE void RemoveGCEpilogueCallback () {
620+ v8::Isolate::GetCurrent ()->RemoveGCEpilogueCallback (
621+ imp::GCCallback<F>::call);
610622 }
611623
624+ template <GCCallback F>
612625 NAN_INLINE void AddGCPrologueCallback (
613- v8::Isolate::GCPrologueCallback callback
614- , v8::GCType gc_type_filter = v8:: kGCTypeAll ) {
615- v8::Isolate::GetCurrent ()-> AddGCPrologueCallback (callback , gc_type_filter);
626+ v8::GCType gc_type_filter = v8::kGCTypeAll ) {
627+ v8::Isolate::GetCurrent ()-> AddGCPrologueCallback (
628+ imp::GCCallback<F>::call , gc_type_filter);
616629 }
617630
618- NAN_INLINE void RemoveGCPrologueCallback (
619- v8::Isolate::GCPrologueCallback callback) {
620- v8::Isolate::GetCurrent ()->RemoveGCPrologueCallback (callback);
631+ template <GCCallback F>
632+ NAN_INLINE void RemoveGCPrologueCallback () {
633+ v8::Isolate::GetCurrent ()->RemoveGCPrologueCallback (
634+ imp::GCCallback<F>::call);
621635 }
622636
623637 NAN_INLINE void GetHeapStatistics (
@@ -981,26 +995,25 @@ class Utf8String {
981995 object->SetPointerInInternalField (index, value);
982996 }
983997
984- # define NAN_GC_CALLBACK (name ) \
985- void name (v8::GCType type, v8::GCCallbackFlags flags)
998+ typedef void (*GCCallback)(v8::GCType type, v8::GCCallbackFlags flags);
986999
1000+ template <GCCallback F>
9871001 NAN_INLINE void AddGCEpilogueCallback (
988- v8::GCEpilogueCallback callback
989- , v8::GCType gc_type_filter = v8::kGCTypeAll ) {
990- v8::V8::AddGCEpilogueCallback (callback, gc_type_filter);
1002+ v8::GCType gc_type_filter = v8::kGCTypeAll ) {
1003+ v8::V8::AddGCEpilogueCallback (F, gc_type_filter);
9911004 }
992- NAN_INLINE void RemoveGCEpilogueCallback (
993- v8::GCEpilogueCallback callback ) {
994- v8::V8::RemoveGCEpilogueCallback (callback );
1005+ template <GCCallback F>
1006+ NAN_INLINE void RemoveGCEpilogueCallback ( ) {
1007+ v8::V8::RemoveGCEpilogueCallback (F );
9951008 }
1009+ template <GCCallback F>
9961010 NAN_INLINE void AddGCPrologueCallback (
997- v8::GCPrologueCallback callback
998- , v8::GCType gc_type_filter = v8::kGCTypeAll ) {
999- v8::V8::AddGCPrologueCallback (callback, gc_type_filter);
1011+ v8::GCType gc_type_filter = v8::kGCTypeAll ) {
1012+ v8::V8::AddGCPrologueCallback (F, gc_type_filter);
10001013 }
1001- NAN_INLINE void RemoveGCPrologueCallback (
1002- v8::GCPrologueCallback callback ) {
1003- v8::V8::RemoveGCPrologueCallback (callback );
1014+ template <GCCallback F>
1015+ NAN_INLINE void RemoveGCPrologueCallback ( ) {
1016+ v8::V8::RemoveGCPrologueCallback (F );
10041017 }
10051018 NAN_INLINE void GetHeapStatistics (
10061019 v8::HeapStatistics *heap_statistics) {
@@ -1341,6 +1354,8 @@ typedef void NAN_INDEX_QUERY_RETURN_TYPE;
13411354 Nan::NAN_INDEX_QUERY_RETURN_TYPE name ( \
13421355 uint32_t index \
13431356 , Nan::NAN_INDEX_QUERY_ARGS_TYPE info)
1357+ # define NAN_GC_CALLBACK (name ) \
1358+ void name (v8::GCType type, v8::GCCallbackFlags flags)
13441359
13451360class Callback {
13461361 public:
0 commit comments