Changes to use common DirectorException class
Add director.swg for Go as was completely absent. This is just the start of a common exception handling approach to directors. An exception thrown in a Java director method will be propogated back to Java via a C++ DirectorException. DirectorException throws typemap for Java is fully working, all other languages need work. DirectorException throws typemap for Perl added just to fix compilation errors. Add director_exception_catches test.
This commit is contained in:
parent
077bb0b04f
commit
923091da13
8 changed files with 108 additions and 2 deletions
15
Lib/go/director.swg
Normal file
15
Lib/go/director.swg
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* director.swg
|
||||
*
|
||||
* This file contains support for director classes so that Go proxy
|
||||
* methods can be called from C++.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
#include <exception>
|
||||
|
||||
namespace Swig {
|
||||
|
||||
class DirectorException : public std::exception {
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -1051,6 +1051,10 @@ Swig::LocalRefGuard $1_refguard(jenv, $input); }
|
|||
%{ SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, $1);
|
||||
return $null; %}
|
||||
|
||||
// For directors to raise/throw the original Java exception
|
||||
%typemap(throws) Swig::DirectorException
|
||||
%{ $1.raiseJavaException(jenv);
|
||||
return $null; %}
|
||||
|
||||
/* Typemaps for code generation in proxy classes and Java type wrapper classes */
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,22 @@ namespace Swig {
|
|||
}
|
||||
};
|
||||
|
||||
struct DirectorTypeMismatchException {
|
||||
// Base class for director exceptions.
|
||||
class DirectorException : public std::exception {
|
||||
public:
|
||||
static void raise(const char *msg) {
|
||||
// ... todo
|
||||
throw(DirectorException());
|
||||
}
|
||||
|
||||
static void raise(const octave_value &ov, const char *msg) {
|
||||
// ... todo
|
||||
raise(msg);
|
||||
}
|
||||
};
|
||||
|
||||
class DirectorTypeMismatchException : public DirectorException {
|
||||
public:
|
||||
static void raise(const char *msg) {
|
||||
// ... todo
|
||||
throw(DirectorTypeMismatchException());
|
||||
|
|
@ -58,7 +73,8 @@ namespace Swig {
|
|||
}
|
||||
};
|
||||
|
||||
struct DirectorPureVirtualException {
|
||||
class DirectorPureVirtualException : public DirectorException {
|
||||
public:
|
||||
static void raise(const char *msg) {
|
||||
// ... todo
|
||||
throw(DirectorPureVirtualException());
|
||||
|
|
|
|||
|
|
@ -71,6 +71,10 @@
|
|||
/* raise exception */
|
||||
%define %raise(obj, type, desc) sv_setsv(get_sv("@", GV_ADD), obj); SWIG_fail %enddef
|
||||
|
||||
/* For directors to raise/throw the original exception */
|
||||
%typemap(throws) Swig::DirectorException
|
||||
%{ sv_setsv(ERRSV, $1.getNative()); SWIG_fail; %}
|
||||
|
||||
/* Include the unified typemap library */
|
||||
%include <typemaps/swigtypemaps.swg>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue