| /* --------------------------------------------------------------------------- |
| * 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_exception(code, msg) SWIG_Error(code, msg) |
| #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: |
| 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: |
| 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 ; |
| long 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 = (long)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; |
| } |