@@ -595,29 +595,43 @@ class TryCatch {
595
595
object->SetAlignedPointerInInternalField (index , value);
596
596
}
597
597
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);
600
599
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>
601
612
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);
605
616
}
606
617
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);
610
622
}
611
623
624
+ template <GCCallback F>
612
625
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);
616
629
}
617
630
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);
621
635
}
622
636
623
637
NAN_INLINE void GetHeapStatistics (
@@ -981,26 +995,25 @@ class Utf8String {
981
995
object->SetPointerInInternalField (index , value);
982
996
}
983
997
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);
986
999
1000
+ template <GCCallback F>
987
1001
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);
991
1004
}
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 );
995
1008
}
1009
+ template <GCCallback F>
996
1010
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);
1000
1013
}
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 );
1004
1017
}
1005
1018
NAN_INLINE void GetHeapStatistics (
1006
1019
v8::HeapStatistics *heap_statistics) {
@@ -1341,6 +1354,8 @@ typedef void NAN_INDEX_QUERY_RETURN_TYPE;
1341
1354
Nan::NAN_INDEX_QUERY_RETURN_TYPE name ( \
1342
1355
uint32_t index \
1343
1356
, Nan::NAN_INDEX_QUERY_ARGS_TYPE info)
1357
+ # define NAN_GC_CALLBACK (name ) \
1358
+ void name (v8::GCType type, v8::GCCallbackFlags flags)
1344
1359
1345
1360
class Callback {
1346
1361
public:
0 commit comments