Home | History | Annotate | Download | only in 2.0.11
      1 /* -----------------------------------------------------------------------------
      2  * exception.i
      3  *
      4  * SWIG library file providing language independent exception handling
      5  * ----------------------------------------------------------------------------- */
      6 
      7 #if defined(SWIGUTL)
      8 #error "This version of exception.i should not be used"
      9 #endif
     10 
     11 
     12 %insert("runtime") "swigerrors.swg"
     13 
     14 
     15 #ifdef SWIGPHP
     16 %{
     17 #include "zend_exceptions.h"
     18 #define SWIG_exception(code, msg) { zend_throw_exception(NULL, (char*)msg, code TSRMLS_CC); }
     19 %}
     20 #endif
     21 
     22 #ifdef SWIGGUILE
     23 %{
     24   SWIGINTERN void SWIG_exception_ (int code, const char *msg,
     25                                const char *subr) {
     26 #define ERROR(scmerr)					\
     27 	scm_error(scm_from_locale_string((char *) (scmerr)),	\
     28 		  (char *) subr, (char *) msg,		\
     29 		  SCM_EOL, SCM_BOOL_F)
     30 #define MAP(swigerr, scmerr)			\
     31 	case swigerr:				\
     32 	  ERROR(scmerr);			\
     33 	  break
     34     switch (code) {
     35       MAP(SWIG_MemoryError,	"swig-memory-error");
     36       MAP(SWIG_IOError,		"swig-io-error");
     37       MAP(SWIG_RuntimeError,	"swig-runtime-error");
     38       MAP(SWIG_IndexError,	"swig-index-error");
     39       MAP(SWIG_TypeError,	"swig-type-error");
     40       MAP(SWIG_DivisionByZero,	"swig-division-by-zero");
     41       MAP(SWIG_OverflowError,	"swig-overflow-error");
     42       MAP(SWIG_SyntaxError,	"swig-syntax-error");
     43       MAP(SWIG_ValueError,	"swig-value-error");
     44       MAP(SWIG_SystemError,	"swig-system-error");
     45     default:
     46       ERROR("swig-error");
     47     }
     48 #undef ERROR
     49 #undef MAP
     50   }
     51 
     52 #define SWIG_exception(a,b) SWIG_exception_(a, b, FUNC_NAME)
     53 %}
     54 #endif
     55 
     56 #ifdef SWIGMZSCHEME
     57 
     58 %{
     59 SWIGINTERN void SWIG_exception_ (int code, const char *msg) {
     60 #define ERROR(errname)				\
     61 	scheme_signal_error(errname " (%s)", msg);
     62 #define MAP(swigerr, errname)			\
     63 	case swigerr:				\
     64 	  ERROR(errname);			\
     65 	  break
     66     switch (code) {
     67       MAP(SWIG_MemoryError,	"swig-memory-error");
     68       MAP(SWIG_IOError,		"swig-io-error");
     69       MAP(SWIG_RuntimeError,	"swig-runtime-error");
     70       MAP(SWIG_IndexError,	"swig-index-error");
     71       MAP(SWIG_TypeError,	"swig-type-error");
     72       MAP(SWIG_DivisionByZero,	"swig-division-by-zero");
     73       MAP(SWIG_OverflowError,	"swig-overflow-error");
     74       MAP(SWIG_SyntaxError,	"swig-syntax-error");
     75       MAP(SWIG_ValueError,	"swig-value-error");
     76       MAP(SWIG_SystemError,	"swig-system-error");
     77     default:
     78       ERROR("swig-error");
     79     }
     80 #undef ERROR
     81 #undef MAP
     82   }
     83 
     84 #define SWIG_exception(a,b) SWIG_exception_(a, b)
     85 %}
     86 #endif
     87 
     88 #ifdef SWIGJAVA
     89 %{
     90 SWIGINTERN void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) {
     91   SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError;
     92   switch(code) {
     93   case SWIG_MemoryError:
     94     exception_code = SWIG_JavaOutOfMemoryError;
     95     break;
     96   case SWIG_IOError:
     97     exception_code = SWIG_JavaIOException;
     98     break;
     99   case SWIG_SystemError:
    100   case SWIG_RuntimeError:
    101     exception_code = SWIG_JavaRuntimeException;
    102     break;
    103   case SWIG_OverflowError:
    104   case SWIG_IndexError:
    105     exception_code = SWIG_JavaIndexOutOfBoundsException;
    106     break;
    107   case SWIG_DivisionByZero:
    108     exception_code = SWIG_JavaArithmeticException;
    109     break;
    110   case SWIG_SyntaxError:
    111   case SWIG_ValueError:
    112   case SWIG_TypeError:
    113     exception_code = SWIG_JavaIllegalArgumentException;
    114     break;
    115   case SWIG_UnknownError:
    116   default:
    117     exception_code = SWIG_JavaUnknownError;
    118     break;
    119   }
    120   SWIG_JavaThrowException(jenv, exception_code, msg);
    121 }
    122 %}
    123 
    124 #define SWIG_exception(code, msg)\
    125 { SWIG_JavaException(jenv, code, msg); return $null; }
    126 #endif // SWIGJAVA
    127 
    128 #ifdef SWIGOCAML
    129 %{
    130 #define OCAML_MSG_BUF_LEN 1024
    131 SWIGINTERN void SWIG_exception_(int code, const char *msg) {
    132   char msg_buf[OCAML_MSG_BUF_LEN];
    133   sprintf( msg_buf, "Exception(%d): %s\n", code, msg );
    134   failwith( msg_buf );
    135 }
    136 #define SWIG_exception(a,b) SWIG_exception_((a),(b))
    137 %}
    138 #endif
    139 
    140 
    141 #ifdef SWIGCHICKEN
    142 %{
    143 SWIGINTERN void SWIG_exception_(int code, const char *msg) {
    144   C_word *a;
    145   C_word scmmsg;
    146   C_word list;
    147 
    148   a = C_alloc (C_SIZEOF_STRING (strlen (msg)) + C_SIZEOF_LIST(2));
    149   scmmsg = C_string2 (&a, (char *) msg);
    150   list = C_list(&a, 2, C_fix(code), scmmsg);
    151   SWIG_ThrowException(list);
    152 }
    153 #define SWIG_exception(a,b) SWIG_exception_((a),(b))
    154 %}
    155 #endif
    156 
    157 #ifdef SWIGCSHARP
    158 %{
    159 SWIGINTERN void SWIG_CSharpException(int code, const char *msg) {
    160   if (code == SWIG_ValueError) {
    161     SWIG_CSharpExceptionArgumentCodes exception_code = SWIG_CSharpArgumentOutOfRangeException;
    162     SWIG_CSharpSetPendingExceptionArgument(exception_code, msg, 0);
    163   } else {
    164     SWIG_CSharpExceptionCodes exception_code = SWIG_CSharpApplicationException;
    165     switch(code) {
    166     case SWIG_MemoryError:
    167       exception_code = SWIG_CSharpOutOfMemoryException;
    168       break;
    169     case SWIG_IndexError:
    170       exception_code = SWIG_CSharpIndexOutOfRangeException;
    171       break;
    172     case SWIG_DivisionByZero:
    173       exception_code = SWIG_CSharpDivideByZeroException;
    174       break;
    175     case SWIG_IOError:
    176       exception_code = SWIG_CSharpIOException;
    177       break;
    178     case SWIG_OverflowError:
    179       exception_code = SWIG_CSharpOverflowException;
    180       break;
    181     case SWIG_RuntimeError:
    182     case SWIG_TypeError:
    183     case SWIG_SyntaxError:
    184     case SWIG_SystemError:
    185     case SWIG_UnknownError:
    186     default:
    187       exception_code = SWIG_CSharpApplicationException;
    188       break;
    189     }
    190     SWIG_CSharpSetPendingException(exception_code, msg);
    191   }
    192 }
    193 %}
    194 
    195 #define SWIG_exception(code, msg)\
    196 { SWIG_CSharpException(code, msg); return $null; }
    197 #endif // SWIGCSHARP
    198 
    199 #ifdef SWIGLUA
    200 
    201 %{
    202 #define SWIG_exception(a,b)\
    203 { lua_pushfstring(L,"%s:%s",#a,b);SWIG_fail; }
    204 %}
    205 
    206 #endif // SWIGLUA
    207 
    208 #ifdef SWIGD
    209 %{
    210 SWIGINTERN void SWIG_DThrowException(int code, const char *msg) {
    211   SWIG_DExceptionCodes exception_code;
    212   switch(code) {
    213   case SWIG_IndexError:
    214     exception_code = SWIG_DNoSuchElementException;
    215     break;
    216   case SWIG_IOError:
    217     exception_code = SWIG_DIOException;
    218     break;
    219   case SWIG_ValueError:
    220     exception_code = SWIG_DIllegalArgumentException;
    221     break;
    222   case SWIG_DivisionByZero:
    223   case SWIG_MemoryError:
    224   case SWIG_OverflowError:
    225   case SWIG_RuntimeError:
    226   case SWIG_TypeError:
    227   case SWIG_SyntaxError:
    228   case SWIG_SystemError:
    229   case SWIG_UnknownError:
    230   default:
    231     exception_code = SWIG_DException;
    232     break;
    233   }
    234   SWIG_DSetPendingException(exception_code, msg);
    235 }
    236 %}
    237 
    238 #define SWIG_exception(code, msg)\
    239 { SWIG_DThrowException(code, msg); return $null; }
    240 #endif // SWIGD
    241 
    242 #ifdef __cplusplus
    243 /*
    244   You can use the SWIG_CATCH_STDEXCEPT macro with the %exception
    245   directive as follows:
    246 
    247   %exception {
    248     try {
    249       $action
    250     }
    251     catch (my_except& e) {
    252       ...
    253     }
    254     SWIG_CATCH_STDEXCEPT // catch std::exception
    255     catch (...) {
    256      SWIG_exception(SWIG_UnknownError, "Unknown exception");
    257     }
    258   }
    259 */
    260 %{
    261 #include <stdexcept>
    262 %}
    263 %define SWIG_CATCH_STDEXCEPT
    264   /* catching std::exception  */
    265   catch (std::invalid_argument& e) {
    266     SWIG_exception(SWIG_ValueError, e.what() );
    267   } catch (std::domain_error& e) {
    268     SWIG_exception(SWIG_ValueError, e.what() );
    269   } catch (std::overflow_error& e) {
    270     SWIG_exception(SWIG_OverflowError, e.what() );
    271   } catch (std::out_of_range& e) {
    272     SWIG_exception(SWIG_IndexError, e.what() );
    273   } catch (std::length_error& e) {
    274     SWIG_exception(SWIG_IndexError, e.what() );
    275   } catch (std::runtime_error& e) {
    276     SWIG_exception(SWIG_RuntimeError, e.what() );
    277   } catch (std::exception& e) {
    278     SWIG_exception(SWIG_SystemError, e.what() );
    279   }
    280 %enddef
    281 %define SWIG_CATCH_UNKNOWN
    282   catch (std::exception& e) {
    283     SWIG_exception(SWIG_SystemError, e.what() );
    284   }
    285   catch (...) {
    286     SWIG_exception(SWIG_UnknownError, "unknown exception");
    287   }
    288 %enddef
    289 
    290 /* rethrow the unknown exception */
    291 
    292 #if defined(SWIGCSHARP) || defined(SWIGD)
    293 %typemap(throws,noblock=1, canthrow=1) (...) {
    294   SWIG_exception(SWIG_RuntimeError,"unknown exception");
    295 }
    296 #else
    297 %typemap(throws,noblock=1) (...) {
    298   SWIG_exception(SWIG_RuntimeError,"unknown exception");
    299 }
    300 #endif
    301 
    302 #endif /* __cplusplus */
    303 
    304 /* exception.i ends here */
    305