// // except.i // Dave Beazley // April 14, 1997 // // 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 #define SWIG_RuntimeError 3 #define SWIG_IndexError 4 #define SWIG_TypeError 5 #define SWIG_DivisionByZero 6 #define SWIG_OverflowError 7 #define SWIG_SyntaxError 8 #define SWIG_ValueError 9 #define SWIG_SystemError 10 #define SWIG_UnknownError 99 %} #ifdef SWIGTCL8 %{ #define SWIG_exception(a,b) Tcl_SetStringObj(tcl_result,b,-1); return TCL_ERROR %} #else #ifdef SWIGTCL %{ #define SWIG_exception(a,b) Tcl_SetResult(interp,b,TCL_VOLATILE); return TCL_ERROR %} #endif #endif #ifdef SWIGPERL5 %{ #define SWIG_exception(a,b) croak(b) %} #endif #ifdef SWIGPERL4 %{ #define SWIG_exception(a,b) fatal(b) %} #endif #ifdef SWIGPYTHON %{ static void _SWIG_exception(int code, char *msg) { switch(code) { case SWIG_MemoryError: PyErr_SetString(PyExc_MemoryError,msg); break; case SWIG_IOError: PyErr_SetString(PyExc_IOError,msg); break; case SWIG_RuntimeError: PyErr_SetString(PyExc_RuntimeError,msg); break; case SWIG_IndexError: PyErr_SetString(PyExc_IndexError,msg); break; case SWIG_TypeError: PyErr_SetString(PyExc_TypeError,msg); break; case SWIG_DivisionByZero: PyErr_SetString(PyExc_ZeroDivisionError,msg); break; case SWIG_OverflowError: PyErr_SetString(PyExc_OverflowError,msg); break; case SWIG_SyntaxError: PyErr_SetString(PyExc_SyntaxError,msg); break; case SWIG_ValueError: PyErr_SetString(PyExc_ValueError,msg); break; case SWIG_SystemError: PyErr_SetString(PyExc_SystemError,msg); break; default: PyErr_SetString(PyExc_RuntimeError,msg); break; } } #define SWIG_exception(a,b) _SWIG_exception(a,b); return NULL %} #endif #ifdef SWIGGUILE %echo %{ exception.i : Guile not currently supported. %} #endif