PageRenderTime 36ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/ocaml/typecheck.i

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