diff --git a/Lib/python/director.swg b/Lib/python/director.swg index 8366582e9..e4c2d1892 100644 --- a/Lib/python/director.swg +++ b/Lib/python/director.swg @@ -38,30 +38,6 @@ namespace Swig { #endif - void UnknownExceptionHandler::handler() { - try { - throw; - } catch (DirectorException& e) { - std::cerr << "Swig Director exception caught:" << std::endl - << e.getMessage() << std::endl; - } catch (std::exception& e) { - std::cerr << "std::exception caught: "<< e.what() << std::endl; - } catch (...) { - std::cerr << "Unknown exception caught." << std::endl; - } - - std::cerr << std::endl - << "Python interpreter traceback:" << std::endl; - PyErr_Print(); - std::cerr << std::endl; - - std::cerr << "This exception was caught by the SWIG unexpected exception handler." << std::endl - << "Try using %feature(\"director:except\") to avoid reaching this point." << std::endl - << std::endl - << "Exception is being re-thrown, program will like abort/terminate." << std::endl; - throw; - } - } #endif /* __cplusplus */ diff --git a/Lib/python/director_h.swg b/Lib/python/director_h.swg index e84db512e..2455de12d 100644 --- a/Lib/python/director_h.swg +++ b/Lib/python/director_h.swg @@ -194,27 +194,6 @@ namespace Swig { Type *_ptr; }; - - /* unknown exception handler */ - class UnknownExceptionHandler - { - static void handler(); - public: - -#ifdef SWIG_DIRECTOR_UEH - std::unexpected_handler old; - UnknownExceptionHandler(std::unexpected_handler nh = handler) - { - old = std::set_unexpected(nh); - } - - ~UnknownExceptionHandler() - { - std::set_unexpected(old); - } -#endif - }; - /* base class for director exceptions */ class DirectorException { protected: @@ -252,6 +231,48 @@ namespace Swig { } }; + /* unknown exception handler */ + class UnknownExceptionHandler + { +#ifdef SWIG_DIRECTOR_UEH + static void handler() { + try { + throw; + } catch (DirectorException& e) { + std::cerr << "Swig Director exception caught:" << std::endl + << e.getMessage() << std::endl; + } catch (std::exception& e) { + std::cerr << "std::exception caught: "<< e.what() << std::endl; + } catch (...) { + std::cerr << "Unknown exception caught." << std::endl; + } + + std::cerr << std::endl + << "Python interpreter traceback:" << std::endl; + PyErr_Print(); + std::cerr << std::endl; + + std::cerr << "This exception was caught by the SWIG unexpected exception handler." << std::endl + << "Try using %feature(\"director:except\") to avoid reaching this point." << std::endl + << std::endl + << "Exception is being re-thrown, program will like abort/terminate." << std::endl; + throw; + } + + public: + + std::unexpected_handler old; + UnknownExceptionHandler(std::unexpected_handler nh = handler) + { + old = std::set_unexpected(nh); + } + + ~UnknownExceptionHandler() + { + std::set_unexpected(old); + } +#endif + }; /* type mismatch in the return value from a python method call */ class DirectorTypeMismatchException : public Swig::DirectorException { diff --git a/Lib/ruby/director.swg b/Lib/ruby/director.swg index 348100b9b..00a9bbb44 100644 --- a/Lib/ruby/director.swg +++ b/Lib/ruby/director.swg @@ -28,7 +28,9 @@ namespace Swig { /* memory handler */ struct GCItem { - virtual ~GCItem() = 0; + virtual ~GCItem() + { + } virtual ruby_owntype get_own() const { @@ -126,26 +128,6 @@ namespace Swig { int argc; VALUE *argv; }; - - /* unknown exception handler */ - class UnknownExceptionHandler - { - static void handler(); - public: - -#ifdef SWIG_DIRECTOR_UEH - std::unexpected_handler old; - UnknownExceptionHandler(std::unexpected_handler nh = handler) - { - old = std::set_unexpected(nh); - } - - ~UnknownExceptionHandler() - { - std::set_unexpected(old); - } -#endif - }; /* Base class for director exceptions */ class DirectorException { @@ -186,6 +168,46 @@ namespace Swig { virtual ~DirectorException() {} }; + /* unknown exception handler */ + + class UnknownExceptionHandler + { +#ifdef SWIG_DIRECTOR_UEH + static void handler() { + try { + throw; + } catch (DirectorException& e) { + std::cerr << "Swig Director exception caught:" << std::endl + << e.getMessage() << std::endl; + } catch (std::exception& e) { + std::cerr << "std::exception caught: "<< e.what() << std::endl; + } catch (...) { + std::cerr << "Unknown exception caught." << std::endl; + } + std::cerr << std::endl + << "Ruby interpreter traceback:" << std::endl; + std::cerr << std::endl; + std::cerr << "This exception was caught by the SWIG unexpected exception handler." << std::endl + << "Try using %feature(\"director:except\") to avoid reaching this point." << std::endl + << std::endl + << "Exception is being re-thrown, program will like abort/terminate." << std::endl; + throw; + } + + public: + std::unexpected_handler old; + UnknownExceptionHandler(std::unexpected_handler nh = handler) + { + old = std::set_unexpected(nh); + } + + ~UnknownExceptionHandler() + { + std::set_unexpected(old); + } +#endif + }; + /* Type mismatch in the return value from a Ruby method call */ class DirectorTypeMismatchException : public Swig::DirectorException { @@ -424,35 +446,6 @@ namespace Swig { pthread_t Swig::Director::swig_mutex_thread; bool Swig::Director::swig_mutex_active = false; #endif - - void UnknownExceptionHandler::handler() { - try { - throw; - } catch (DirectorException& e) { - std::cerr << "Swig Director exception caught:" << std::endl - << e.getMessage() << std::endl; - } catch (std::exception& e) { - std::cerr << "std::exception caught: "<< e.what() << std::endl; - } catch (...) { - std::cerr << "Unknown exception caught." << std::endl; - } - - std::cerr << std::endl - << "Ruby interpreter traceback:" << std::endl; - std::cerr << std::endl; - - std::cerr << "This exception was caught by the SWIG unexpected exception handler." << std::endl - << "Try using %feature(\"director:except\") to avoid reaching this point." << std::endl - << std::endl - << "Exception is being re-thrown, program will like abort/terminate." << std::endl; - throw; - } - - - GCItem::~GCItem() - { - } - } #endif /* __cplusplus */