mirror of https://github.com/swig/swig
112 lines
3.6 KiB
Plaintext
112 lines
3.6 KiB
Plaintext
%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)
|
|
%}
|