1 /* ----------------------------------------------------------------------------- 2 * typecheck.i 3 * 4 * Typechecking rules 5 * ----------------------------------------------------------------------------- */ 6 7 %typecheck(SWIG_TYPECHECK_INTEGER) char, signed char, const char &, const signed char & { 8 if( !Is_block($input) ) $1 = 0; 9 else { 10 switch( SWIG_Tag_val($input) ) { 11 case C_char: $1 = 1; break; 12 default: $1 = 0; break; 13 } 14 } 15 } 16 17 %typecheck(SWIG_TYPECHECK_INTEGER) unsigned char, const unsigned char & { 18 if( !Is_block($input) ) $1 = 0; 19 else { 20 switch( SWIG_Tag_val($input) ) { 21 case C_uchar: $1 = 1; break; 22 default: $1 = 0; break; 23 } 24 } 25 } 26 27 %typecheck(SWIG_TYPECHECK_INTEGER) short, signed short, const short &, const signed short &, wchar_t { 28 if( !Is_block($input) ) $1 = 0; 29 else { 30 switch( SWIG_Tag_val($input) ) { 31 case C_short: $1 = 1; break; 32 default: $1 = 0; break; 33 } 34 } 35 } 36 37 %typecheck(SWIG_TYPECHECK_INTEGER) unsigned short, const unsigned short & { 38 if( !Is_block($input) ) $1 = 0; 39 else { 40 switch( SWIG_Tag_val($input) ) { 41 case C_ushort: $1 = 1; break; 42 default: $1 = 0; break; 43 } 44 } 45 } 46 47 // XXX arty 48 // Will move enum SWIGTYPE later when I figure out what to do with it... 49 50 %typecheck(SWIG_TYPECHECK_INTEGER) int, signed int, const int &, const signed int &, enum SWIGTYPE { 51 if( !Is_block($input) ) $1 = 0; 52 else { 53 switch( SWIG_Tag_val($input) ) { 54 case C_int: $1 = 1; break; 55 default: $1 = 0; break; 56 } 57 } 58 } 59 60 %typecheck(SWIG_TYPECHECK_INTEGER) unsigned int, const unsigned int & { 61 if( !Is_block($input) ) $1 = 0; 62 else { 63 switch( SWIG_Tag_val($input) ) { 64 case C_uint: $1 = 1; break; 65 case C_int32: $1 = 1; break; 66 default: $1 = 0; break; 67 } 68 } 69 } 70 71 %typecheck(SWIG_TYPECHECK_INTEGER) long, signed long, unsigned long, long long, signed long long, unsigned long long, const long &, const signed long &, const unsigned long &, const long long &, const signed long long &, const unsigned long long & { 72 if( !Is_block($input) ) $1 = 0; 73 else { 74 switch( SWIG_Tag_val($input) ) { 75 case C_int64: $1 = 1; break; 76 default: $1 = 0; break; 77 } 78 } 79 } 80 81 %typecheck(SWIG_TYPECHECK_INTEGER) bool, oc_bool, BOOL, const bool &, const oc_bool &, const BOOL & { 82 if( !Is_block($input) ) $1 = 0; 83 else { 84 switch( SWIG_Tag_val($input) ) { 85 case C_bool: $1 = 1; break; 86 default: $1 = 0; break; 87 } 88 } 89 } 90 91 %typecheck(SWIG_TYPECHECK_DOUBLE) float, const float & { 92 if( !Is_block($input) ) $1 = 0; 93 else { 94 switch( SWIG_Tag_val($input) ) { 95 case C_float: $1 = 1; break; 96 default: $1 = 0; break; 97 } 98 } 99 } 100 101 %typecheck(SWIG_TYPECHECK_DOUBLE) double, const double & { 102 if( !Is_block($input) ) $1 = 0; 103 else { 104 switch( SWIG_Tag_val($input) ) { 105 case C_double: $1 = 1; break; 106 default: $1 = 0; break; 107 } 108 } 109 } 110 111 %typecheck(SWIG_TYPECHECK_STRING) char * { 112 if( !Is_block($input) ) $1 = 0; 113 else { 114 switch( SWIG_Tag_val($input) ) { 115 case C_string: $1 = 1; break; 116 case C_ptr: { 117 swig_type_info *typeinfo = 118 (swig_type_info *)(long)SWIG_Int64_val(SWIG_Field($input,1)); 119 $1 = SWIG_TypeCheck("char *",typeinfo) || 120 SWIG_TypeCheck("signed char *",typeinfo) || 121 SWIG_TypeCheck("unsigned char *",typeinfo) || 122 SWIG_TypeCheck("const char *",typeinfo) || 123 SWIG_TypeCheck("const signed char *",typeinfo) || 124 SWIG_TypeCheck("const unsigned char *",typeinfo) || 125 SWIG_TypeCheck("std::string",typeinfo); 126 } break; 127 default: $1 = 0; break; 128 } 129 } 130 } 131 132 %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] { 133 void *ptr; 134 $1 = !caml_ptr_val_internal($input, &ptr,$descriptor); 135 } 136 137 #if 0 138 139 %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE { 140 void *ptr; 141 $1 = !caml_ptr_val_internal($input, &ptr, $&1_descriptor); 142 } 143 144 #endif 145 146 %typecheck(SWIG_TYPECHECK_VOIDPTR) void * { 147 void *ptr; 148 $1 = !caml_ptr_val_internal($input, &ptr, 0); 149 } 150 151 /* ------------------------------------------------------------ 152 * Exception handling 153 * ------------------------------------------------------------ */ 154 155 %typemap(throws) int, 156 long, 157 short, 158 unsigned int, 159 unsigned long, 160 unsigned short { 161 SWIG_exception($1,"Thrown exception from C++ (int)"); 162 } 163 164 %typemap(throws) SWIGTYPE CLASS { 165 $&1_ltype temp = new $1_ltype($1); 166 SWIG_exception((int)temp,"Thrown exception from C++ (object)"); 167 } 168 169 %typemap(throws) SWIGTYPE { 170 (void)$1; 171 SWIG_exception(0,"Thrown exception from C++ (unknown)"); 172 } 173 174 %typemap(throws) char * { 175 SWIG_exception(0,$1); 176 } 177