| /* --------------------------------------------------------------------------- | |
| * Error handling | |
| * | |
| * ---------------------------------------------------------------------------*/ | |
| /* | |
| * We support several forms: | |
| * | |
| * SWIG_Raise("Error message") | |
| * which creates an Error object with the error message | |
| * | |
| * SWIG_Raise(SWIG_TypeError, "Type error") | |
| * which creates the specified error type with the message | |
| * | |
| * SWIG_Raise(obj) | |
| * which throws the object itself | |
| * | |
| * SWIG_Raise(obj, "Exception const &", SWIGType_p_Exception) | |
| * which also throws the object itself and discards the unneeded extra type info | |
| * | |
| * These must be functions instead of macros to use the C++ overloading to | |
| * resolve the arguments | |
| */ | |
| #define SWIG_fail goto fail | |
| #ifdef NAPI_CPP_EXCEPTIONS | |
| #define SWIG_Error(code, msg) SWIG_NAPI_Raise(env, code, msg) | |
| #define NAPI_CHECK_MAYBE(maybe) (maybe) | |
| #define NAPI_CHECK_RESULT(maybe, result) (result = maybe) | |
| SWIGINTERN void SWIG_NAPI_Raise(Napi::Env env, const char *msg) { | |
| throw Napi::Error::New(env, msg); | |
| } | |
| SWIGINTERN void SWIG_NAPI_Raise(Napi::Env env, int type, const char *msg) { | |
| switch(type) { | |
| default: | |
| case SWIG_IOError: | |
| case SWIG_MemoryError: | |
| case SWIG_SystemError: | |
| case SWIG_RuntimeError: | |
| case SWIG_DivisionByZero: | |
| case SWIG_SyntaxError: | |
| throw Napi::Error::New(env, msg); | |
| case SWIG_OverflowError: | |
| case SWIG_IndexError: | |
| throw Napi::RangeError::New(env, msg); | |
| case SWIG_ValueError: | |
| case SWIG_TypeError: | |
| case SWIG_NullReferenceError: | |
| throw Napi::TypeError::New(env, msg); | |
| } | |
| } | |
| SWIGINTERN void SWIG_NAPI_Raise(Napi::Env env, Napi::Value obj, | |
| const char *msg = nullptr, swig_type_info *info = nullptr) { | |
| throw Napi::Error(env, obj); | |
| } | |
| #else | |
| #define SWIG_Error(code, msg) do { SWIG_NAPI_Raise(env, code, msg); SWIG_fail; } while (0) | |
| #define NAPI_CHECK_MAYBE(maybe) do { if (maybe.IsNothing()) SWIG_fail; } while (0) | |
| #define NAPI_CHECK_RESULT(maybe, result) \ | |
| do { \ | |
| auto r = maybe; \ | |
| if (r.IsNothing()) SWIG_fail; \ | |
| result = r.Unwrap(); \ | |
| } while (0) | |
| SWIGINTERN void SWIG_NAPI_Raise(Napi::Env env, const char *msg) { | |
| Napi::Error::New(env, msg).ThrowAsJavaScriptException(); | |
| } | |
| SWIGINTERN void SWIG_NAPI_Raise(Napi::Env env, int type, const char *msg) { | |
| switch(type) { | |
| default: | |
| case SWIG_IOError: | |
| case SWIG_MemoryError: | |
| case SWIG_SystemError: | |
| case SWIG_RuntimeError: | |
| case SWIG_DivisionByZero: | |
| case SWIG_SyntaxError: | |
| Napi::Error::New(env, msg).ThrowAsJavaScriptException(); | |
| return; | |
| case SWIG_OverflowError: | |
| case SWIG_IndexError: | |
| Napi::RangeError::New(env, msg).ThrowAsJavaScriptException(); | |
| return; | |
| case SWIG_ValueError: | |
| case SWIG_TypeError: | |
| case SWIG_NullReferenceError: | |
| Napi::TypeError::New(env, msg).ThrowAsJavaScriptException(); | |
| return; | |
| } | |
| } | |
| SWIGINTERN void SWIG_NAPI_Raise(Napi::Env env, Napi::Value obj, | |
| const char *msg = nullptr, swig_type_info *info = nullptr) { | |
| Napi::Error(env, obj).ThrowAsJavaScriptException(); | |
| } | |
| #endif | |
| void JS_veto_set_variable(const Napi::CallbackInfo &info) { | |
| SWIG_NAPI_Raise(info.Env(), "Tried to write read-only variable."); | |
| } | |
| struct EnvInstanceData { | |
| Napi::Env env; | |
| // Base class per-environment constructor, used to check | |
| // if a JS object is a SWIG wrapper | |
| Napi::FunctionReference *SWIG_NAPI_ObjectWrapCtor; | |
| // Per-environment wrapper constructors, indexed by the number in | |
| // swig_type->clientdata | |
| Napi::FunctionReference **ctor; | |
| swig_module_info *swig_module; | |
| EnvInstanceData(Napi::Env, swig_module_info *); | |
| ~EnvInstanceData(); | |
| }; | |
| typedef size_t SWIG_NAPI_ClientData; | |
| // Base class for all wrapped objects, | |
| // used mostly when unwrapping unknown objects | |
| template <typename SWIG_OBJ_WRAP> | |
| class SWIG_NAPI_ObjectWrap_templ : public Napi::ObjectWrap<SWIG_OBJ_WRAP> { | |
| public: | |
| void *self; | |
| bool owned; | |
| size_t size; | |
| swig_type_info *info; | |
| SWIG_NAPI_ObjectWrap_templ(const Napi::CallbackInfo &info); | |
| SWIG_NAPI_ObjectWrap_templ(bool, const Napi::CallbackInfo &info) : | |
| Napi::ObjectWrap<SWIG_OBJ_WRAP>(info), | |
| self(nullptr), | |
| owned(true), | |
| size(0), | |
| info(nullptr) | |
| {} | |
| virtual ~SWIG_NAPI_ObjectWrap_templ() {} | |
| Napi::Value ToString(const Napi::CallbackInfo &info); | |
| }; | |
| template <typename SWIG_OBJ_WRAP> | |
| SWIG_NAPI_ObjectWrap_templ<SWIG_OBJ_WRAP>::SWIG_NAPI_ObjectWrap_templ(const Napi::CallbackInfo &info) : | |
| Napi::ObjectWrap<SWIG_OBJ_WRAP>(info), size(0), info(nullptr) { | |
| Napi::Env env = info.Env(); | |
| if (info.Length() == 1 && info[0].IsExternal()) { | |
| // This constructor has been called internally from C++/SWIG | |
| // to wrap an already existing C++ object of unknown type in JS | |
| this->self = info[0].As<Napi::External<void>>().Data(); | |
| this->owned = false; | |
| } else { | |
| SWIG_Error(SWIG_ERROR, "This constructor is not accessible from JS"); | |
| } | |
| return; | |
| goto fail; | |
| fail: | |
| return; | |
| } | |
| template <typename SWIG_OBJ_WRAP> | |
| Napi::Value SWIG_NAPI_ObjectWrap_templ<SWIG_OBJ_WRAP>::ToString(const Napi::CallbackInfo &info) { | |
| Napi::Env env = info.Env(); | |
| static char repr[128]; | |
| const char *name = SWIG_TypePrettyName(this->info); | |
| snprintf(repr, sizeof(repr), "{SwigObject %s (%s) at %p %s}", | |
| this->info ? this->info->name : "unknown", | |
| name ? name : "unknown", | |
| this->self, | |
| this->owned ? "[owned]" : "[copy]"); | |
| return Napi::String::New(env, repr); | |
| } | |
| class SWIG_NAPI_ObjectWrap_inst : public SWIG_NAPI_ObjectWrap_templ<SWIG_NAPI_ObjectWrap_inst> { | |
| public: | |
| using SWIG_NAPI_ObjectWrap_templ::SWIG_NAPI_ObjectWrap_templ; | |
| static Napi::Function GetClass(Napi::Env); | |
| static void GetMembers( | |
| Napi::Env, | |
| std::map<std::string, SWIG_NAPI_ObjectWrap_templ::PropertyDescriptor> &, | |
| std::map<std::string, SWIG_NAPI_ObjectWrap_templ::PropertyDescriptor> & | |
| ); | |
| }; | |
| void SWIG_NAPI_ObjectWrap_inst::GetMembers( | |
| Napi::Env env, | |
| std::map<std::string, SWIG_NAPI_ObjectWrap_templ::PropertyDescriptor> &members, | |
| std::map<std::string, SWIG_NAPI_ObjectWrap_templ::PropertyDescriptor> & | |
| ) { | |
| members.erase("toString"); | |
| members.insert({"toString", SWIG_NAPI_ObjectWrap_templ::InstanceMethod("toString", &SWIG_NAPI_ObjectWrap_templ::ToString)}); | |
| } | |
| Napi::Function SWIG_NAPI_ObjectWrap_inst::GetClass(Napi::Env env) { | |
| return Napi::ObjectWrap<SWIG_NAPI_ObjectWrap_inst>::DefineClass(env, "SwigObject", {}); | |
| } | |
| SWIGRUNTIME int SWIG_NAPI_ConvertInstancePtr(Napi::Object objRef, void **ptr, swig_type_info *info, int flags) { | |
| SWIG_NAPI_ObjectWrap_inst *ow; | |
| Napi::Env env = objRef.Env(); | |
| if(!objRef.IsObject()) return SWIG_ERROR; | |
| // Check if this is a SWIG wrapper | |
| Napi::FunctionReference *ctor = env.GetInstanceData<EnvInstanceData>()->SWIG_NAPI_ObjectWrapCtor; | |
| bool instanceOf; | |
| NAPI_CHECK_RESULT(objRef.InstanceOf(ctor->Value()), instanceOf); | |
| if (!instanceOf) { | |
| return SWIG_TypeError; | |
| } | |
| ow = Napi::ObjectWrap<SWIG_NAPI_ObjectWrap_inst>::Unwrap(objRef); | |
| // Now check if the SWIG type is compatible unless the types match exactly or the type is unknown | |
| if(info && ow->info != info && ow->info != nullptr) { | |
| swig_cast_info *tc = SWIG_TypeCheckStruct(ow->info, info); | |
| if (!tc && ow->info->name) { | |
| tc = SWIG_TypeCheck(ow->info->name, info); | |
| } | |
| bool type_valid = tc != 0; | |
| if(!type_valid) { | |
| return SWIG_TypeError; | |
| } | |
| int newmemory = 0; | |
| *ptr = SWIG_TypeCast(tc, ow->self, &newmemory); | |
| assert(!newmemory); /* newmemory handling not yet implemented */ | |
| } else { | |
| *ptr = ow->self; | |
| } | |
| if (((flags & SWIG_POINTER_RELEASE) == SWIG_POINTER_RELEASE) && !ow->owned) { | |
| return SWIG_ERROR_RELEASE_NOT_OWNED; | |
| } else { | |
| if (flags & SWIG_POINTER_DISOWN) { | |
| ow->owned = false; | |
| } | |
| if (flags & SWIG_POINTER_CLEAR) { | |
| ow->self = nullptr; | |
| } | |
| } | |
| return SWIG_OK; | |
| goto fail; | |
| fail: | |
| return SWIG_ERROR; | |
| } | |
| SWIGRUNTIME int SWIG_NAPI_GetInstancePtr(Napi::Value valRef, void **ptr) { | |
| SWIG_NAPI_ObjectWrap_inst *ow; | |
| if(!valRef.IsObject()) { | |
| return SWIG_TypeError; | |
| } | |
| Napi::Object objRef; | |
| NAPI_CHECK_RESULT(valRef.ToObject(), objRef); | |
| ow = Napi::ObjectWrap<SWIG_NAPI_ObjectWrap_inst>::Unwrap(objRef); | |
| if(ow->self == nullptr) { | |
| return SWIG_ERROR; | |
| } | |
| *ptr = ow->self; | |
| return SWIG_OK; | |
| goto fail; | |
| fail: | |
| return SWIG_ERROR; | |
| } | |
| SWIGRUNTIME int SWIG_NAPI_ConvertPtr(Napi::Value valRef, void **ptr, swig_type_info *info, int flags) { | |
| // special case: JavaScript null => C NULL pointer | |
| if (valRef.IsNull()) { | |
| *ptr=0; | |
| return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK; | |
| } | |
| if (!valRef.IsObject()) { | |
| return SWIG_TypeError; | |
| } | |
| Napi::Object objRef; | |
| NAPI_CHECK_RESULT(valRef.ToObject(), objRef); | |
| return SWIG_NAPI_ConvertInstancePtr(objRef, ptr, info, flags); | |
| goto fail; | |
| fail: | |
| return SWIG_ERROR; | |
| } | |
| SWIGRUNTIME Napi::Value SWIG_NAPI_NewPointerObj(Napi::Env env, void *ptr, swig_type_info *info, int flags) { | |
| Napi::External<void> native; | |
| Napi::FunctionReference *ctor; | |
| if (ptr == nullptr) { | |
| return env.Null(); | |
| } | |
| native = Napi::External<void>::New(env, ptr); | |
| size_t *idx = info != nullptr ? | |
| reinterpret_cast<SWIG_NAPI_ClientData *>(info->clientdata) : | |
| nullptr; | |
| if (idx == nullptr) { | |
| // This type does not have a dedicated wrapper | |
| ctor = env.GetInstanceData<EnvInstanceData>()->SWIG_NAPI_ObjectWrapCtor; | |
| } else { | |
| ctor = env.GetInstanceData<EnvInstanceData>()->ctor[*idx]; | |
| } | |
| Napi::Value wrapped; | |
| NAPI_CHECK_RESULT(ctor->New({native}), wrapped); | |
| // Preserve the type even if using the generic wrapper | |
| if (idx == nullptr && info != nullptr) { | |
| Napi::Object obj; | |
| NAPI_CHECK_RESULT(wrapped.ToObject(), obj); | |
| Napi::ObjectWrap<SWIG_NAPI_ObjectWrap_inst>::Unwrap(obj)->info = info; | |
| } | |
| if ((flags & SWIG_POINTER_OWN) == SWIG_POINTER_OWN) { | |
| Napi::Object obj; | |
| NAPI_CHECK_RESULT(wrapped.ToObject(), obj); | |
| Napi::ObjectWrap<SWIG_NAPI_ObjectWrap_inst>::Unwrap(obj)->owned = true; | |
| } | |
| return wrapped; | |
| goto fail; | |
| fail: | |
| return Napi::Value(); | |
| } | |
| #define SWIG_ConvertPtr(obj, ptr, info, flags) SWIG_NAPI_ConvertPtr(obj, ptr, info, flags) | |
| #define SWIG_NewPointerObj(ptr, info, flags) SWIG_NAPI_NewPointerObj(env, ptr, info, flags) | |
| #define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_NAPI_ConvertInstancePtr(obj, pptr, type, flags) | |
| #define SWIG_NewInstanceObj(thisvalue, type, flags) SWIG_NAPI_NewPointerObj(env, thisvalue, type, flags) | |
| #define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_NAPI_ConvertPtr(obj, pptr, type, 0) | |
| #define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NAPI_NewPointerObj(env, ptr, type, 0) | |
| #define SWIG_GetInstancePtr(obj, ptr) SWIG_NAPI_GetInstancePtr(obj, ptr) | |
| SWIGRUNTIME Napi::Value _SWIG_NAPI_wrap_equals(const Napi::CallbackInfo &info) { | |
| Napi::Env env = info.Env(); | |
| Napi::Value jsresult; | |
| void *arg1 = (void *) 0 ; | |
| void *arg2 = (void *) 0 ; | |
| bool result; | |
| int res1; | |
| int res2; | |
| if(info.Length() != 1) SWIG_Error(SWIG_ERROR, "Illegal number of arguments for equals."); | |
| res1 = SWIG_GetInstancePtr(info.This(), &arg1); | |
| if (!SWIG_IsOK(res1)) { | |
| SWIG_Error(SWIG_ERROR, "Could not get pointer from 'this' object for equals."); | |
| } | |
| res2 = SWIG_GetInstancePtr(info[0], &arg2); | |
| if (!SWIG_IsOK(res2)) { | |
| SWIG_Error(SWIG_ArgError(res2), " in method '" "equals" "', argument " "1"" of type '" "void *""'"); | |
| } | |
| result = (bool)(arg1 == arg2); | |
| jsresult = Napi::Boolean::New(env, result); | |
| return jsresult; | |
| goto fail; | |
| fail: | |
| return Napi::Value(); | |
| } | |
| SWIGRUNTIME Napi::Value _wrap_getCPtr(const Napi::CallbackInfo &info) { | |
| Napi::Env env = info.Env(); | |
| Napi::Value jsresult; | |
| void *arg1 = (void *) 0 ; | |
| intptr_t result; | |
| int res1; | |
| res1 = SWIG_GetInstancePtr(info.This(), &arg1); | |
| if (!SWIG_IsOK(res1)) { | |
| SWIG_Error(SWIG_ArgError(res1), " in method '" "getCPtr" "', argument " "1"" of type '" "void *""'"); | |
| } | |
| result = (intptr_t)arg1; | |
| jsresult = Napi::Number::New(env, result); | |
| return jsresult; | |
| goto fail; | |
| fail: | |
| return Napi::Value(); | |
| } | |
| /* --------------------------------------------------------------------------- | |
| * PackedData object | |
| * (objects visible to JS that do not have a dedicated wrapper but must preserve type) | |
| * ---------------------------------------------------------------------------*/ | |
| SWIGRUNTIME | |
| Napi::Value SWIG_NAPI_NewPackedObj(Napi::Env env, void *data, size_t size, swig_type_info *type) { | |
| void *data_copy = new uint8_t[size]; | |
| memcpy(data_copy, data, size); | |
| Napi::Value val = SWIG_NAPI_NewPointerObj(env, data_copy, type, SWIG_POINTER_OWN); | |
| Napi::Object obj; | |
| if (val.IsEmpty()) goto fail; | |
| NAPI_CHECK_RESULT(val.ToObject(), obj); | |
| Napi::ObjectWrap<SWIG_NAPI_ObjectWrap_inst>::Unwrap(obj)->size = size; | |
| fail: | |
| return val; | |
| } | |
| SWIGRUNTIME | |
| int SWIG_NAPI_ConvertPacked(Napi::Value valRef, void *ptr, size_t size, swig_type_info *type) { | |
| void *tmp; | |
| if (!SWIG_IsOK(SWIG_NAPI_ConvertPtr(valRef, &tmp, type, 0))) { | |
| return SWIG_ERROR; | |
| } | |
| memcpy(ptr, tmp, size); | |
| return SWIG_OK; | |
| } | |
| #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_NAPI_ConvertPacked(obj, ptr, sz, ty) | |
| #define SWIG_NewMemberObj(ptr, sz, type) SWIG_NAPI_NewPackedObj(env, ptr, sz, type) | |
| /* --------------------------------------------------------------------------- | |
| * Support for IN/OUTPUT typemaps (see Lib/typemaps/inoutlist.swg) | |
| * | |
| * ---------------------------------------------------------------------------*/ | |
| SWIGRUNTIME | |
| Napi::Value SWIG_NAPI_AppendOutput(Napi::Env env, Napi::Value result, Napi::Value obj) { | |
| if (result.IsUndefined()) { | |
| result = Napi::Array::New(env); | |
| } else if (!result.IsArray()) { | |
| Napi::Array tmparr = Napi::Array::New(env); | |
| tmparr.Set(static_cast<uint32_t>(0), result); | |
| result = tmparr; | |
| } | |
| Napi::Array arr = result.As<Napi::Array>(); | |
| arr.Set(arr.Length(), obj); | |
| return arr; | |
| } |