PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/rel-1-3-26/SWIG/Lib/chicken/chickenrun.swg

#
Unknown | 353 lines | 306 code | 47 blank | 0 comment | 0 complexity | 1da41008351fa6f8b1426afd8e48ae0e MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* -*- c -*-
  2. * -----------------------------------------------------------------------
  3. * swig_lib/chicken/chickenrun.swg
  4. *
  5. * Author: John Lenz <jelenz@wisc.edu>
  6. * ----------------------------------------------------------------------- */
  7. #include <chicken.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. #define SWIG_malloc(size) \
  15. malloc(size)
  16. #define SWIG_free(mem) \
  17. free(mem)
  18. #define SWIG_MakeString(c) \
  19. SWIG_Chicken_MakeString(c)
  20. #define SWIG_ConvertPtr(s, result, type, flags) \
  21. SWIG_Chicken_ConvertPtr(s, result, type, flags)
  22. #define SWIG_MustGetPtr(s, type, argnum, flags) \
  23. SWIG_Chicken_MustGetPtr(s, type, argnum, flags)
  24. #define SWIG_NewPointerObj(ptr, type, owner) \
  25. SWIG_Chicken_NewPointerObj((void*)ptr, type, owner, 1, &known_space)
  26. #define SWIG_NewPointerObjProxy(ptr, type, owner, proxy) \
  27. SWIG_Chicken_NewPointerObj((void*)ptr, type, owner, proxy, &known_space)
  28. #define swig_barf SWIG_Chicken_Barf
  29. #define SWIG_ThrowException(val) SWIG_Chicken_ThrowException(val)
  30. #define SWIG_contract_assert(expr, message) if (!(expr)) { \
  31. SWIG_Chicken_Barf(SWIG_BARF1_CONTRACT_ASSERT, C_text(message)); } else
  32. /* Runtime API */
  33. #define SWIG_GetModule(clientdata) SWIG_Chicken_GetModule()
  34. #define SWIG_SetModule(clientdata, pointer) SWIG_Chicken_SetModule(pointer)
  35. #define C_swig_is_bool(x) C_truep (C_booleanp (x))
  36. #define C_swig_is_char(x) C_truep (C_charp (x))
  37. #define C_swig_is_fixnum(x) C_truep (C_fixnump (x))
  38. #define C_swig_is_flonum(x) (C_truep (C_blockp (x)) && C_truep (C_flonump (x)))
  39. #define C_swig_is_string(x) (C_truep (C_blockp (x)) && C_truep (C_stringp (x)))
  40. #define C_swig_is_vector(x) (C_truep (C_blockp (x)) && C_truep (C_vectorp (x)))
  41. #define C_swig_is_list(x) (C_truep (C_i_listp (x)))
  42. #define C_swig_is_pair(x) (C_truep (C_blockp(x)) && C_truep (C_pairp(x)))
  43. #define C_swig_is_ptr(x) (C_truep (C_blockp (x)) && C_truep (C_pointerp (x)))
  44. #define C_swig_is_swigpointer(x) (C_truep (C_blockp(x)) && C_truep (C_swigpointerp(x)))
  45. #define C_swig_is_closurep(x) (C_truep (C_blockp(x)) && C_truep(C_closurep(x)))
  46. #define C_swig_is_number(x) (C_swig_is_fixnum(x) || C_swig_is_flonum(x))
  47. #define C_swig_is_long(x) C_swig_is_number(x)
  48. #define SWIG_APPEND_VALUE(object) \
  49. if (resultobj == C_SCHEME_UNDEFINED) \
  50. resultobj = object; \
  51. else { \
  52. C_word *pair_space = C_alloc(C_SIZEOF_PAIR); \
  53. if (!gswig_list_p) { \
  54. gswig_list_p = 1; \
  55. C_word *pair_space2 = C_alloc(C_SIZEOF_PAIR); \
  56. resultobj = C_pair(&pair_space2, resultobj, C_SCHEME_END_OF_LIST); \
  57. resultobjlast = resultobj; \
  58. } \
  59. C_word tmp = C_pair(&pair_space, object, C_SCHEME_END_OF_LIST); \
  60. C_set_block_item(resultobjlast, 1, tmp); \
  61. resultobjlast = tmp; \
  62. }
  63. /* given a SWIG pointer wrapped in a C_word, return the proxy create function, if any */
  64. #define SWIG_Chicken_FindCreateProxy(val, x) \
  65. if (C_swig_is_swigpointer(x)) { \
  66. swig_type_info *t = (swig_type_info *) C_block_item(x, 1); \
  67. if (t && t->clientdata && ((swig_chicken_clientdata *)t->clientdata)->gc_proxy_create) { \
  68. val = CHICKEN_gc_root_ref( ((swig_chicken_clientdata *)t->clientdata)->gc_proxy_create); \
  69. } else { \
  70. val = C_SCHEME_FALSE; \
  71. } \
  72. } else { \
  73. val = C_SCHEME_FALSE; \
  74. }
  75. #define SWIG_POINTER_DISOWN 1
  76. enum {
  77. SWIG_BARF1_BAD_ARGUMENT_TYPE /* 1 arg */,
  78. SWIG_BARF1_ARGUMENT_NULL /* 1 arg */,
  79. SWIG_BARF1_CONTRACT_ASSERT /* 1 arg */,
  80. };
  81. typedef C_word (*swig_chicken_destructor)(C_word,C_word,C_word,C_word);
  82. typedef struct swig_chicken_clientdata {
  83. void *gc_proxy_create;
  84. swig_chicken_destructor destroy;
  85. } swig_chicken_clientdata;
  86. static char *
  87. SWIG_Chicken_MakeString(C_word str) {
  88. char *ret;
  89. size_t l;
  90. l = C_header_size(str);
  91. ret = (char *) SWIG_malloc( (l + 1) * sizeof(char));
  92. if (!ret) return NULL;
  93. memcpy(ret, C_c_string(str), l);
  94. ret[l] = '\0';
  95. return ret;
  96. }
  97. static C_word SWIG_Chicken_LookupSymbol(char *name, C_SYMBOL_TABLE *stable) {
  98. C_word *a = C_alloc(C_SIZEOF_STRING (strlen (name)));
  99. C_word n = C_string2(&a, name);
  100. C_word sym = C_find_symbol(n, stable);
  101. if (C_truep(sym)) {
  102. return C_symbol_value(sym);
  103. } else {
  104. return C_SCHEME_FALSE;
  105. }
  106. }
  107. /* Just a helper function. Do not export it */
  108. static void SWIG_Chicken_Panic (C_char *) C_noret;
  109. static void SWIG_Chicken_Panic (C_char *msg)
  110. {
  111. C_word *a = C_alloc (C_SIZEOF_STRING (strlen (msg)));
  112. C_word scmmsg = C_string2 (&a, msg);
  113. C_halt (scmmsg);
  114. exit (5); /* should never get here */
  115. }
  116. static void
  117. SWIG_Chicken_Barf(int code, C_char *msg, ...) C_noret;
  118. static void
  119. SWIG_Chicken_Barf(int code, C_char *msg, ...)
  120. {
  121. char *errorhook = C_text("\003syserror-hook");
  122. C_word *a = C_alloc (C_SIZEOF_STRING (strlen (errorhook)));
  123. C_word err = C_intern2 (&a, errorhook);
  124. int c = -1;
  125. int i, barfval;
  126. va_list v;
  127. C_temporary_stack = C_temporary_stack_bottom;
  128. err = C_block_item(err, 0);
  129. if(C_immediatep (err))
  130. SWIG_Chicken_Panic (C_text ("`##sys#error-hook' is not defined"));
  131. switch (code) {
  132. case SWIG_BARF1_BAD_ARGUMENT_TYPE:
  133. barfval = C_BAD_ARGUMENT_TYPE_ERROR;
  134. c = 1;
  135. break;
  136. case SWIG_BARF1_ARGUMENT_NULL:
  137. barfval = C_BAD_ARGUMENT_TYPE_ERROR;
  138. c = 1;
  139. break;
  140. case SWIG_BARF1_CONTRACT_ASSERT:
  141. barfval = C_BAD_ARGUMENT_TYPE_ERROR;
  142. c = 1;
  143. break;
  144. default:
  145. SWIG_Chicken_Panic (C_text (msg));
  146. };
  147. if(c > 0 && !C_immediatep (err)) {
  148. C_save (C_fix (barfval));
  149. i = c;
  150. if (i) {
  151. C_word *b = C_alloc (C_SIZEOF_STRING (strlen (msg)));
  152. C_word scmmsg = C_string2 (&b, msg);
  153. C_save (scmmsg);
  154. i--;
  155. }
  156. va_start (v, msg);
  157. while(i--)
  158. C_save (va_arg (v, C_word));
  159. va_end (v);
  160. C_do_apply (c + 1, err,
  161. C_SCHEME_UNDEFINED); /* <- no continuation is passed:
  162. '##sys#error-hook' may not
  163. return! */
  164. }
  165. else if (msg) {
  166. SWIG_Chicken_Panic (msg);
  167. }
  168. else {
  169. SWIG_Chicken_Panic (C_text ("unspecified panic"));
  170. }
  171. }
  172. static void SWIG_Chicken_ThrowException(C_word value) C_noret;
  173. static void SWIG_Chicken_ThrowException(C_word value)
  174. {
  175. char *aborthook = C_text("\003sysabort");
  176. C_word *a = C_alloc(C_SIZEOF_STRING(strlen(aborthook)));
  177. C_word abort = C_intern2(&a, aborthook);
  178. abort = C_block_item(abort, 0);
  179. if (C_immediatep(abort))
  180. SWIG_Chicken_Panic(C_text("`##sys#abort' is not defined"));
  181. C_save(value);
  182. C_do_apply(1, abort, C_SCHEME_UNDEFINED);
  183. }
  184. static void
  185. SWIG_Chicken_Finalizer(C_word argc, C_word closure, C_word continuation, C_word s)
  186. {
  187. swig_type_info *type;
  188. swig_chicken_clientdata *cdata;
  189. if (argc == 3 && s != C_SCHEME_FALSE && C_swig_is_swigpointer(s)) {
  190. type = (swig_type_info *) C_block_item(s, 1);
  191. if (type) {
  192. cdata = (swig_chicken_clientdata *) type->clientdata;
  193. if (cdata && cdata->destroy) {
  194. /* this will not return, but will continue correctly */
  195. cdata->destroy(3,closure,continuation,s);
  196. }
  197. }
  198. }
  199. C_kontinue(continuation, C_SCHEME_UNDEFINED);
  200. }
  201. static C_word finalizer_obj[2] = {(C_word) (C_CLOSURE_TYPE|1), (C_word) SWIG_Chicken_Finalizer};
  202. static C_word
  203. SWIG_Chicken_NewPointerObj(void *ptr, swig_type_info *type, int owner, int create_proxy, C_word **data)
  204. {
  205. swig_chicken_clientdata *cdata = (swig_chicken_clientdata *) type->clientdata;
  206. if (ptr == NULL)
  207. return C_SCHEME_FALSE;
  208. else {
  209. C_word cptr = C_swigmpointer(data, ptr, type);
  210. /* add finalizer to object */
  211. #ifndef SWIG_CHICKEN_NO_COLLECTION
  212. if (owner)
  213. C_do_register_finalizer(cptr, (C_word) finalizer_obj);
  214. #endif
  215. /* wrap the result inside a proxy class if one is available */
  216. if (create_proxy && cdata && cdata->gc_proxy_create) {
  217. C_word closure = CHICKEN_gc_root_ref(cdata->gc_proxy_create);
  218. if (C_swig_is_closurep(closure)) {
  219. C_save(cptr);
  220. return C_callback(closure, 1);
  221. }
  222. }
  223. return cptr;
  224. }
  225. }
  226. /* Return 0 if successful. */
  227. static int
  228. SWIG_Chicken_ConvertPtr(C_word s, void **result, swig_type_info *type, int flags)
  229. {
  230. swig_cast_info *cast;
  231. swig_type_info *from;
  232. if (s == C_SCHEME_FALSE) {
  233. *result = NULL;
  234. } else if (C_swig_is_swigpointer(s)) {
  235. /* try and convert type */
  236. from = (swig_type_info *) C_block_item(s, 1);
  237. if (!from) return 1;
  238. if (type) {
  239. cast = SWIG_TypeCheckStruct(from, type);
  240. if (cast) {
  241. *result = SWIG_TypeCast(cast, (void *) C_block_item(s, 0));
  242. } else {
  243. return 1;
  244. }
  245. } else {
  246. *result = (void *) C_block_item(s, 0);
  247. }
  248. /* check if we are disowning this object */
  249. if (flags & SWIG_POINTER_DISOWN) {
  250. C_do_unregister_finalizer(s);
  251. }
  252. } else {
  253. return 1;
  254. }
  255. return 0;
  256. }
  257. static SWIGINLINE void *
  258. SWIG_Chicken_MustGetPtr (C_word s, swig_type_info *type, int argnum, int flags)
  259. {
  260. void *result;
  261. char err_msg[256];
  262. if (SWIG_Chicken_ConvertPtr(s, &result, type, flags)) {
  263. /* type mismatch */
  264. snprintf(err_msg, sizeof(err_msg), "Type error in argument #%i: expected %s", argnum, (type->str ? type->str : type->name));
  265. SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, err_msg);
  266. }
  267. return result;
  268. }
  269. static char *chicken_runtimevar_name = "type_pointer" SWIG_TYPE_TABLE_NAME;
  270. static swig_module_info *
  271. SWIG_Chicken_GetModule() {
  272. swig_module_info *ret = 0;
  273. C_word sym;
  274. /* lookup the type pointer... it is stored in it's own symbol table */
  275. C_SYMBOL_TABLE *stable = C_find_symbol_table("swig_runtime_data" SWIG_RUNTIME_VERSION);
  276. if (stable != NULL) {
  277. sym = SWIG_Chicken_LookupSymbol(chicken_runtimevar_name, stable);
  278. if (C_truep(sym) && C_swig_is_ptr(sym)) {
  279. ret = (swig_module_info *) C_block_item(sym, 0);
  280. }
  281. }
  282. return ret;
  283. }
  284. static void
  285. SWIG_Chicken_SetModule(swig_module_info *module) {
  286. C_word *a;
  287. C_SYMBOL_TABLE *stable;
  288. C_word sym;
  289. C_word pointer;
  290. static C_word *space = 0;
  291. /* type pointer is stored in it's own symbol table */
  292. stable = C_find_symbol_table("swig_runtime_data" SWIG_RUNTIME_VERSION);
  293. if (stable == NULL) {
  294. stable = C_new_symbol_table("swig_runtime_data" SWIG_RUNTIME_VERSION, 16);
  295. }
  296. if (!space) {
  297. space = (C_word *) C_malloc((C_SIZEOF_POINTER + C_SIZEOF_INTERNED_SYMBOL(C_strlen(chicken_runtimevar_name))) * sizeof(C_word));
  298. }
  299. a = space;
  300. pointer = C_mpointer(&a, (void *) module);
  301. sym = C_intern_in(&a, C_strlen(chicken_runtimevar_name), chicken_runtimevar_name, stable);
  302. C_set_block_item(sym, 0, pointer);
  303. }
  304. #ifdef __cplusplus
  305. }
  306. #endif