The great merge
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4141 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
5fcae5eb66
commit
12a43edc2d
1508 changed files with 125983 additions and 44037 deletions
187
Lib/exception.i
187
Lib/exception.i
|
|
@ -5,56 +5,6 @@
|
|||
//
|
||||
// This SWIG library file provides language independent exception handling
|
||||
|
||||
#ifdef AUTODOC
|
||||
%section "Exception Handling Library",info,after,pre,nosort,skip=1,chop_left=3,chop_right=0,chop_top=0,chop_bottom=0
|
||||
|
||||
%text %{
|
||||
%include exception.i
|
||||
|
||||
This library provides language independent support for raising scripting
|
||||
language exceptions in SWIG generated wrapper code. Normally, this is
|
||||
used in conjunction with the %except directive.
|
||||
|
||||
To raise an exception, use the following function call :
|
||||
|
||||
SWIG_exception(int exctype, char *msg);
|
||||
|
||||
'exctype' is an exception type code and may be one of the following :
|
||||
|
||||
SWIG_MemoryError
|
||||
SWIG_IOError
|
||||
SWIG_RuntimeError
|
||||
SWIG_IndexError
|
||||
SWIG_TypeError
|
||||
SWIG_DivisionByZero
|
||||
SWIG_OverflowError
|
||||
SWIG_SyntaxError
|
||||
SWIG_ValueError
|
||||
SWIG_SystemError
|
||||
SWIG_UnknownError
|
||||
|
||||
'msg' is an error string that should be reported to the user.
|
||||
|
||||
The library is normally used in conjunction with the %except directive
|
||||
as follows :
|
||||
|
||||
%except {
|
||||
try {
|
||||
$function
|
||||
} catch RangeError {
|
||||
SWIG_exception(SWIG_IndexError,"Array index out of bounds");
|
||||
} catch(...) {
|
||||
SWIG_exception(SWIG_UnknownError,"Uncaught exception");
|
||||
}
|
||||
}
|
||||
|
||||
It is important to note that the SWIG_exception() function is only available
|
||||
to the C code generated by SWIG. It is not available in the scripting language
|
||||
interface itself.
|
||||
%}
|
||||
|
||||
#endif
|
||||
|
||||
%{
|
||||
#define SWIG_MemoryError 1
|
||||
#define SWIG_IOError 2
|
||||
|
|
@ -71,7 +21,7 @@ interface itself.
|
|||
|
||||
#ifdef SWIGTCL8
|
||||
%{
|
||||
#define SWIG_exception(a,b) { Tcl_SetResult(interp,b,TCL_VOLATILE); return TCL_ERROR; }
|
||||
#define SWIG_exception(a,b) { Tcl_SetResult(interp,b,TCL_VOLATILE); SWIG_fail; }
|
||||
%}
|
||||
#else
|
||||
#ifdef SWIGTCL
|
||||
|
|
@ -83,19 +33,20 @@ interface itself.
|
|||
|
||||
#ifdef SWIGPERL5
|
||||
%{
|
||||
#define SWIG_exception(a,b) croak(b)
|
||||
#define SWIG_exception(a,b) SWIG_croak(b)
|
||||
%}
|
||||
#endif
|
||||
|
||||
#ifdef SWIGPERL4
|
||||
#ifdef SWIGPHP4
|
||||
%{
|
||||
#define SWIG_exception(a,b) fatal(b)
|
||||
/* We should make use of "code" if we can */
|
||||
#define SWIG_exception(code, msg) { zend_error(E_ERROR, msg); }
|
||||
%}
|
||||
#endif
|
||||
|
||||
#ifdef SWIGPYTHON
|
||||
%{
|
||||
static void _SWIG_exception(int code, char *msg) {
|
||||
static void _SWIG_exception(int code, const char *msg) {
|
||||
switch(code) {
|
||||
case SWIG_MemoryError:
|
||||
PyErr_SetString(PyExc_MemoryError,msg);
|
||||
|
|
@ -133,7 +84,7 @@ static void _SWIG_exception(int code, char *msg) {
|
|||
}
|
||||
}
|
||||
|
||||
#define SWIG_exception(a,b) { _SWIG_exception(a,b); return NULL; }
|
||||
#define SWIG_exception(a,b) { _SWIG_exception(a,b); SWIG_fail; }
|
||||
%}
|
||||
#endif
|
||||
|
||||
|
|
@ -171,54 +122,132 @@ static void _SWIG_exception(int code, char *msg) {
|
|||
%}
|
||||
#endif
|
||||
|
||||
#ifdef SWIGMZSCHEME
|
||||
|
||||
%{
|
||||
static void _SWIG_exception (int code, const char *msg) {
|
||||
#define ERROR(errname) \
|
||||
scheme_signal_error(errname " (%s)", msg);
|
||||
#define MAP(swigerr, errname) \
|
||||
case swigerr: \
|
||||
ERROR(errname); \
|
||||
break
|
||||
switch (code) {
|
||||
MAP(SWIG_MemoryError, "swig-memory-error");
|
||||
MAP(SWIG_IOError, "swig-io-error");
|
||||
MAP(SWIG_RuntimeError, "swig-runtime-error");
|
||||
MAP(SWIG_IndexError, "swig-index-error");
|
||||
MAP(SWIG_TypeError, "swig-type-error");
|
||||
MAP(SWIG_DivisionByZero, "swig-division-by-zero");
|
||||
MAP(SWIG_OverflowError, "swig-overflow-error");
|
||||
MAP(SWIG_SyntaxError, "swig-syntax-error");
|
||||
MAP(SWIG_ValueError, "swig-value-error");
|
||||
MAP(SWIG_SystemError, "swig-system-error");
|
||||
default:
|
||||
ERROR("swig-error");
|
||||
}
|
||||
#undef ERROR
|
||||
#undef MAP
|
||||
}
|
||||
|
||||
#define SWIG_exception(a,b) _SWIG_exception(a, b)
|
||||
%}
|
||||
#endif
|
||||
|
||||
#ifdef SWIGJAVA
|
||||
%{
|
||||
static void _SWIG_exception(JNIEnv *jenv, int code, const char *msg) {
|
||||
char exception_path[512];
|
||||
const char *classname;
|
||||
const char *class_package = "java/lang";
|
||||
|
||||
|
||||
static void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) {
|
||||
SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError;
|
||||
switch(code) {
|
||||
case SWIG_MemoryError:
|
||||
classname = "OutOfMemoryError";
|
||||
exception_code = SWIG_JavaOutOfMemoryError;
|
||||
break;
|
||||
case SWIG_IOError:
|
||||
classname = "IOException";
|
||||
class_package = "java/io";
|
||||
exception_code = SWIG_JavaIOException;
|
||||
break;
|
||||
case SWIG_SystemError:
|
||||
case SWIG_RuntimeError:
|
||||
classname = "RuntimeException";
|
||||
exception_code = SWIG_JavaRuntimeException;
|
||||
break;
|
||||
case SWIG_OverflowError:
|
||||
case SWIG_IndexError:
|
||||
classname = "IndexOutOfBoundsException";
|
||||
exception_code = SWIG_JavaIndexOutOfBoundsException;
|
||||
break;
|
||||
case SWIG_DivisionByZero:
|
||||
classname = "ArithmeticException";
|
||||
exception_code = SWIG_JavaArithmeticException;
|
||||
break;
|
||||
case SWIG_SyntaxError:
|
||||
case SWIG_ValueError:
|
||||
case SWIG_TypeError:
|
||||
classname = "IllegalArgumentException";
|
||||
exception_code = SWIG_JavaIllegalArgumentException;
|
||||
break;
|
||||
case SWIG_UnknownError:
|
||||
default:
|
||||
classname = "UnknownError";
|
||||
exception_code = SWIG_JavaUnknownError;
|
||||
break;
|
||||
}
|
||||
sprintf(exception_path, "%s/%s", class_package, classname);
|
||||
jclass excep;
|
||||
jenv->ExceptionClear();
|
||||
excep = jenv->FindClass(exception_path);
|
||||
if (excep)
|
||||
{
|
||||
jenv->ThrowNew(excep, msg);
|
||||
}
|
||||
SWIG_JavaThrowException(jenv, exception_code, msg);
|
||||
}
|
||||
#define SWIG_exception(a,b) { _SWIG_exception(jenv, a,b); }
|
||||
#define SWIG_exception(code, msg) { SWIG_JavaException(jenv, code, msg); }
|
||||
%}
|
||||
#endif // SWIGJAVA
|
||||
|
||||
#ifdef SWIGOCAML
|
||||
%{
|
||||
#define OCAML_MSG_BUF_LEN 1024
|
||||
static void _SWIG_exception(int code, const char *msg) {
|
||||
char msg_buf[OCAML_MSG_BUF_LEN];
|
||||
sprintf( msg_buf, "Exception(%d): %s\n", code, msg );
|
||||
failwith( msg_buf );
|
||||
}
|
||||
#define SWIG_exception(a,b) _SWIG_exception((a),(b))
|
||||
%}
|
||||
#endif
|
||||
|
||||
#ifdef SWIGRUBY
|
||||
%{
|
||||
static void _SWIG_exception(int code, const char *msg) {
|
||||
switch (code) {
|
||||
case SWIG_MemoryError:
|
||||
rb_raise(rb_eNoMemError, msg);
|
||||
break;
|
||||
case SWIG_IOError:
|
||||
rb_raise(rb_eIOError, msg);
|
||||
break;
|
||||
case SWIG_RuntimeError:
|
||||
rb_raise(rb_eRuntimeError, msg);
|
||||
break;
|
||||
case SWIG_IndexError:
|
||||
rb_raise(rb_eIndexError, msg);
|
||||
break;
|
||||
case SWIG_TypeError:
|
||||
rb_raise(rb_eTypeError, msg);
|
||||
break;
|
||||
case SWIG_DivisionByZero:
|
||||
rb_raise(rb_eZeroDivError, msg);
|
||||
break;
|
||||
case SWIG_OverflowError:
|
||||
rb_raise(rb_eRangeError, msg);
|
||||
break;
|
||||
case SWIG_SyntaxError:
|
||||
rb_raise(rb_eSyntaxError, msg);
|
||||
break;
|
||||
case SWIG_ValueError:
|
||||
rb_raise(rb_eArgError, msg);
|
||||
break;
|
||||
case SWIG_SystemError:
|
||||
rb_raise(rb_eFatal, msg);
|
||||
break;
|
||||
case SWIG_UnknownError:
|
||||
rb_raise(rb_eRuntimeError, msg);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#define SWIG_exception(a, b) _SWIG_exception((a), (b))
|
||||
%}
|
||||
#endif
|
||||
|
||||
/* exception.i ends here */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue