| %insert(header) %{ |
| #include <assert.h> |
| %} |
| |
| %insert(init) %{ |
| |
| EnvInstanceData::EnvInstanceData(Napi::Env env, swig_module_info *swig_module) : |
| env(env), SWIG_NAPI_ObjectWrapCtor(nullptr), ctor(nullptr), swig_module(swig_module) { |
| ctor = new Napi::FunctionReference*[swig_module->size + 1]; |
| for (size_t i = 0; i <= swig_module->size; i++) { |
| ctor[i] = nullptr; |
| } |
| } |
| |
| EnvInstanceData::~EnvInstanceData() { |
| for (size_t i = 0; i <= swig_module->size; i++) { |
| if (ctor[i] != nullptr) |
| delete ctor[i]; |
| ctor[i] = nullptr; |
| } |
| delete [] ctor; |
| delete SWIG_NAPI_ObjectWrapCtor; |
| } |
| |
| SWIGRUNTIME void |
| SWIG_NAPI_SetModule(Napi::Env env, swig_module_info *swig_module) { |
| auto data = new EnvInstanceData(env, swig_module); |
| env.SetInstanceData(data); |
| } |
| |
| SWIGRUNTIME swig_module_info * |
| SWIG_NAPI_GetModule(Napi::Env env) { |
| auto data = env.GetInstanceData<EnvInstanceData>(); |
| if (data == nullptr) return nullptr; |
| return data->swig_module; |
| } |
| |
| #define SWIG_GetModule(clientdata) SWIG_NAPI_GetModule(clientdata) |
| #define SWIG_SetModule(clientdata, pointer) SWIG_NAPI_SetModule(clientdata, pointer) |
| #define SWIG_INIT_CLIENT_DATA_TYPE Napi::Env |
| |
| %} |
| |
| %insert(init) "swiginit.swg" |
| |
| // Open the initializer function definition here |
| |
| %fragment ("js_initializer_define", "templates") %{ |
| #define SWIG_NAPI_INIT $jsname_initialize |
| %} |
| |
| %insert(init) %{ |
| Napi::Object Init(Napi::Env env, Napi::Object exports) { |
| SWIG_InitializeModule(env); |
| %} |
| |
| /* ----------------------------------------------------------------------------- |
| * js_init_inheritance: template for enabling the inheritance |
| * ----------------------------------------------------------------------------- */ |
| %fragment("js_init_inheritance", "templates") |
| %{ |
| Napi::Value jsObjectValue, jsSetProtoValue; |
| Napi::Object jsObject; |
| Napi::Function setProto; |
| NAPI_CHECK_RESULT(env.Global().Get("Object"), jsObjectValue); |
| NAPI_CHECK_RESULT(jsObjectValue.ToObject(), jsObject); |
| NAPI_CHECK_RESULT(jsObject.Get("setPrototypeOf"), jsSetProtoValue); |
| setProto = jsSetProtoValue.As<Napi::Function>(); |
| %} |
| |
| /* ----------------------------------------------------------------------------- |
| * js_initializer: template for the module initializer function |
| * - $jsname: module name |
| * - $jsnapipreinheritance: the previous template |
| * - $jsnapinspaces: part with code creating namespace objects |
| * - $jsnapiwrappers: part with code that registers wrapper functions |
| * - $jsnapiinitinheritance: part with inherit statements |
| * - $jsnapistaticwrappers: part with code adding static functions to class objects |
| * - $jsnapiregisterclasses: part with code that registers class objects in namespaces |
| * - $jsnapiregisternspaces: part with code that registers namespaces in parent namespaces |
| * ----------------------------------------------------------------------------- */ |
| %fragment("js_initializer", "templates") |
| %{ |
| Napi::Function SWIG_NAPI_ObjectWrap_ctor = SWIG_NAPI_ObjectWrap_inst::GetClass(env); |
| Napi::FunctionReference *SWIG_NAPI_ObjectWrap_ctor_ref = new Napi::FunctionReference(); |
| *SWIG_NAPI_ObjectWrap_ctor_ref = Napi::Persistent(SWIG_NAPI_ObjectWrap_ctor); |
| env.GetInstanceData<EnvInstanceData>()->SWIG_NAPI_ObjectWrapCtor = SWIG_NAPI_ObjectWrap_ctor_ref; |
| |
| /* create objects for namespaces */ |
| $jsnapinspaces |
| |
| /* register classes */ |
| $jsnapiregisterclasses |
| |
| /* enable inheritance */ |
| $jsnapipreinheritance |
| |
| /* setup inheritances */ |
| $jsnapiinitinheritance |
| |
| /* create and register namespace objects */ |
| $jsnapiregisternspaces |
| |
| return exports; |
| goto fail; |
| fail: |
| return Napi::Object(); |
| } |
| |
| NODE_API_MODULE($jsname, Init) |
| %} |