@@ -136,15 +136,34 @@ namespace Nan {
136136
137137// === RegistrationFunction =====================================================
138138
139+ typedef void (*addon_reg_func_t )(v8::Local<v8::Object> target);
140+
141+ #if NODE_MODULE_VERSION < NODE_0_12_MODULE_VERSION
142+ namespace imp {
143+ template <addon_reg_func_t F>
144+ static inline void addon_reg_func (v8::Handle<v8::Object> target) {
145+ v8::HandleScope scope;
146+ F (v8::Local<v8::Object>::New (target));
147+ }
148+ }
149+ #elif NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION
150+ namespace imp {
151+ template <addon_reg_func_t F>
152+ static inline void addon_reg_func (v8::Handle<v8::Object> target) {
153+ v8::Isolate *isolate = v8::Isolate::GetCurrent ();
154+ v8::HandleScope scope (isolate);
155+ F (v8::Local<v8::Object>::New (isolate, target));
156+ }
157+ }
158+ #endif
159+
139160#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION
140- typedef v8::Handle<v8::Object> ADDON_REGISTER_FUNCTION_ARGS_TYPE;
161+ # define NAN_MODULE (modname, regfunc ) \
162+ NODE_MODULE (modname, Nan::imp::addon_reg_func<regfunc>)
141163#else
142- typedef v8::Local<v8::Object> ADDON_REGISTER_FUNCTION_ARGS_TYPE;
164+ # define NAN_MODULE ( modname, regfunc ) NODE_MODULE(modname, regfunc)
143165#endif
144166
145- #define NAN_MODULE_INIT (name ) \
146- void name (Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target)
147-
148167// === CallbackInfo =============================================================
149168
150169#include " nan_callbacks.h" // NOLINT(build/include)
@@ -2171,7 +2190,7 @@ inline void SetCallAsFunctionHandler(
21712190
21722191inline
21732192void
2174- Export (ADDON_REGISTER_FUNCTION_ARGS_TYPE target, const char *name,
2193+ Export (v8::Local<v8::Object> target, const char *name,
21752194 FunctionCallback f) {
21762195 Set (target, New<v8::String>(name).ToLocalChecked (),
21772196 GetFunction (New<v8::FunctionTemplate>(f)).ToLocalChecked ());
0 commit comments