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