diff options
Diffstat (limited to 'share/swig/2.0.11/chicken/chicken.swg')
-rw-r--r-- | share/swig/2.0.11/chicken/chicken.swg | 781 |
1 files changed, 781 insertions, 0 deletions
diff --git a/share/swig/2.0.11/chicken/chicken.swg b/share/swig/2.0.11/chicken/chicken.swg new file mode 100644 index 0000000..525c1a6 --- /dev/null +++ b/share/swig/2.0.11/chicken/chicken.swg @@ -0,0 +1,781 @@ +/* ----------------------------------------------------------------------------- + * chicken.swg + * + * CHICKEN configuration module. + * ----------------------------------------------------------------------------- */ + +/* chicken.h has to appear first. */ + +%insert(runtime) %{ +#include <assert.h> +#include <chicken.h> +%} + +%insert(runtime) "swigrun.swg"; // Common C API type-checking code +%insert(runtime) "chickenrun.swg"; // CHICKEN run-time code + +/* ----------------------------------------------------------------------------- + * standard typemaps + * ----------------------------------------------------------------------------- */ + +/* + CHICKEN: C + ---------- + + fixnum: int, short, unsigned int, unsigned short, unsigned char, + signed char + + char: char + + bool: bool + + flonum: float, double, long, long long, unsigned long, unsigned long + long + */ + +/* --- Primitive types --- */ + +%define SIMPLE_TYPEMAP(type_, from_scheme, to_scheme, checker, convtype, storage_) + +%typemap(in) type_ +%{ if (!checker ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument #$argnum is not of type 'type_'"); + } + $1 = ($1_ltype) from_scheme ($input); %} + +/* Const primitive references. Passed by value */ + +%typemap(in) const type_ & ($*1_ltype temp) +%{ if (!checker ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument #$argnum is not of type 'type_'"); + } + temp = ($*1_ltype) from_scheme ($input); + $1 = &temp; %} + +/* --- Variable input --- */ +%typemap(varin) type_ +%{ if (!checker ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Cannot use '$1_ltype' for variable '$name' of type 'type_'"); + } + $1 = ($1_ltype) from_scheme ($input); %} + +#if "storage_" == "0" + +%typemap(out) type_ +%{ + $result = to_scheme (convtype ($1)); +%} + +/* References to primitive types. Return by value */ + +%typemap(out) const type_ & +%{ + $result = to_scheme (convtype (*$1)); +%} + +/* --- Variable output --- */ +%typemap(varout) type_ +%{ + $result = to_scheme (convtype ($varname)); +%} + +%typemap(throws) type_ +%{ + SWIG_Chicken_ThrowException(to_scheme ( convtype ($1))); +%} + +#else + +%typemap(out) type_ +%{ + { + C_word *space = C_alloc(storage_); + $result = to_scheme (&space, convtype ($1)); + } +%} + +/* References to primitive types. Return by value */ + +%typemap(out) const type_ & +%{ + { + C_word *space = C_alloc(storage_); + $result = to_scheme (&space, convtype (*$1)); + } +%} + +/* --- Variable output --- */ +%typemap(varout) type_ +%{ + { + C_word *space = C_alloc(storage_); + $result = to_scheme (&space, convtype ($varname)); + } +%} + +%typemap(throws) type_ +%{ + { + C_word *space = C_alloc(storage_); + SWIG_Chicken_ThrowException(to_scheme (&space, convtype ($1))); + } +%} + +#endif + +/* --- Constants --- */ + +%typemap(constcode) type_ +"static const $1_type $result = $value;" + +%enddef + +SIMPLE_TYPEMAP(int, C_num_to_int, C_fix, C_swig_is_number, (int), 0); +//SIMPLE_TYPEMAP(enum SWIGTYPE, C_unfix, C_fix, C_swig_is_fixnum, (int), 0); +SIMPLE_TYPEMAP(short, C_num_to_int, C_fix, C_swig_is_number, (int), 0); +SIMPLE_TYPEMAP(long, C_num_to_long, C_long_to_num, C_swig_is_long, (long), C_SIZEOF_FLONUM); +SIMPLE_TYPEMAP(long long, C_num_to_long, C_long_to_num, C_swig_is_long, (long), C_SIZEOF_FLONUM); +SIMPLE_TYPEMAP(unsigned int, C_num_to_unsigned_int, C_unsigned_int_to_num, C_swig_is_number, (unsigned int), C_SIZEOF_FLONUM); +SIMPLE_TYPEMAP(unsigned short, C_num_to_unsigned_int, C_fix, C_swig_is_number, (unsigned int), 0); +SIMPLE_TYPEMAP(unsigned long, C_num_to_unsigned_long, C_unsigned_long_to_num, C_swig_is_long, (unsigned long), C_SIZEOF_FLONUM); +SIMPLE_TYPEMAP(unsigned long long, C_num_to_unsigned_long, C_unsigned_long_to_num, C_swig_is_long, (unsigned long), C_SIZEOF_FLONUM); +SIMPLE_TYPEMAP(unsigned char, C_character_code, C_make_character, C_swig_is_char, (unsigned int), 0); +SIMPLE_TYPEMAP(signed char, C_character_code, C_make_character, C_swig_is_char, (int), 0); +SIMPLE_TYPEMAP(char, C_character_code, C_make_character, C_swig_is_char, (char), 0); +SIMPLE_TYPEMAP(bool, C_truep, C_mk_bool, C_swig_is_bool, (bool), 0); +SIMPLE_TYPEMAP(float, C_c_double, C_flonum, C_swig_is_number, (double), C_SIZEOF_FLONUM); +SIMPLE_TYPEMAP(double, C_c_double, C_flonum, C_swig_is_number, (double), C_SIZEOF_FLONUM); + +/* enum SWIGTYPE */ +%apply int { enum SWIGTYPE }; +%apply const int& { const enum SWIGTYPE& }; + +%typemap(varin) enum SWIGTYPE +{ + if (!C_swig_is_fixnum($input) && sizeof(int) != sizeof($1)) { + swig_barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, "enum variable '$name' can not be set"); + } + *((int *)(void *)&$1) = C_unfix($input); +} + + +/* --- Input arguments --- */ + +/* Strings */ + +%typemap(in) char * +{ if ($input == C_SCHEME_FALSE) { + $1 = NULL; + } + else { + if (!C_swig_is_string ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument #$argnum is not of type 'char *'"); + } + $1 = ($ltype) SWIG_MakeString ($input); + } +} + +%typemap(freearg) char * "if ($1 != NULL) { free ($1); }" + +/* Pointers, references, and arrays */ +%typemap(in,closcode="(slot-ref $input 'swig-this)") SWIGTYPE *, SWIGTYPE [], SWIGTYPE & { + $1 = ($1_ltype)SWIG_MustGetPtr($input, $descriptor, $argnum, $disown); +} + +%typemap(in,closcode="(slot-ref $input 'swig-this)") SWIGTYPE *DISOWN { + $1 = ($1_ltype)SWIG_MustGetPtr($input, $descriptor, $argnum, SWIG_POINTER_DISOWN); +} + +/* Void pointer. Accepts any kind of pointer */ +%typemap(in) void * { + $1 = ($1_ltype)SWIG_MustGetPtr($input, NULL, $argnum, 0); +} + +%typemap(varin,closcode="(slot-ref $input 'swig-this)") SWIGTYPE * { + $1 = ($1_ltype)SWIG_MustGetPtr($input, $descriptor, 1, SWIG_POINTER_DISOWN); +} + +%typemap(varin,closcode="(slot-ref $input 'swig-this)") SWIGTYPE & { + $1 = *(($1_ltype)SWIG_MustGetPtr($input, $descriptor, 1, 0)); +} + +%typemap(varin) SWIGTYPE [] { + SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, "Type error"); +} + +%typemap(varin) SWIGTYPE [ANY] { + void *temp; + int ii; + $1_basetype *b = 0; + temp = SWIG_MustGetPtr($input, $1_descriptor, 1, 0); + b = ($1_basetype *) $1; + for (ii = 0; ii < $1_size; ii++) b[ii] = *(($1_basetype *) temp + ii); +} + +%typemap(varin) void * { + $1 = SWIG_MustGetPtr($input, NULL, 1, 0); +} + +%typemap(out) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] { + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + $result = SWIG_NewPointerObj($1, $descriptor, $owner); +} + +%typemap(out) SWIGTYPE *DYNAMIC, SWIGTYPE &DYNAMIC { + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor,(void **) &$1); + $result = SWIG_NewPointerObj($1, ty, $owner); +} + +%typemap(varout) SWIGTYPE *, SWIGTYPE [] { + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + $result = SWIG_NewPointerObj($varname, $descriptor, 0); +} + +%typemap(varout) SWIGTYPE & { + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + $result = SWIG_NewPointerObj((void *) &$varname, $1_descriptor, 0); +} + +/* special typemaps for class pointers */ +%typemap(in) SWIGTYPE (CLASS::*) { + char err_msg[256]; + + if (C_swig_is_pair($input)) { + /* try and convert pointer object */ + void *result; + if (!SWIG_ConvertPtr(C_block_item($input,1), &result, $descriptor, 0)) { + C_word ptr = C_block_item($input,0); + if (C_swig_is_string(ptr)) { + SWIG_UnpackData(C_c_string(ptr), (void *) &$1, sizeof($type)); + } else { + snprintf(err_msg, sizeof(err_msg), "Type error in argument #%i: expected %s", $argnum, ($descriptor->str ? $descriptor->str : $descriptor->name)); + SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, err_msg); + } + } else { + snprintf(err_msg, sizeof(err_msg), "Type error in argument #%i: expected %s", $argnum, ($descriptor->str ? $descriptor->str : $descriptor->name)); + SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, err_msg); + } + } else { + snprintf(err_msg, sizeof(err_msg), "Type error in argument #%i: expected %s", $argnum, ($descriptor->str ? $descriptor->str : $descriptor->name)); + SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, err_msg); + } +} + +%typemap(out) SWIGTYPE (CLASS::*) { + size_t ptr_size = sizeof($type); + C_word *known_space = C_alloc(C_SIZEOF_PAIR + C_SIZEOF_STRING(2*ptr_size) + C_SIZEOF_SWIG_POINTER); + char *temp = (char *)malloc(2*ptr_size); + C_word ptr = SWIG_NewPointerObj((void *) known_space, $descriptor, 0); + + SWIG_PackData(temp, (void *) &$1, ptr_size); + $result = C_pair(&known_space, C_string(&known_space, 2*ptr_size, temp), ptr); + free(temp); +} + +%typemap(varin) SWIGTYPE (CLASS::*) { + char err_msg[256]; + + if (C_swig_is_pair($input)) { + /* try and convert pointer object */ + void *result; + if (!SWIG_ConvertPtr(C_block_item($input,1), &result, $descriptor, 0)) { + C_word ptr = C_block_item($input,0); + if (C_swig_is_string(ptr)) { + SWIG_UnpackData(C_c_string(ptr), (void *) &$1, sizeof($type)); + } else { + snprintf(err_msg, sizeof(err_msg), "Type error in argument #%i: expected %s", 1, ($descriptor->str ? $descriptor->str : $descriptor->name)); + SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, err_msg); + } + } else { + snprintf(err_msg, sizeof(err_msg), "Type error in argument #%i: expected %s", 1, ($descriptor->str ? $descriptor->str : $descriptor->name)); + SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, err_msg); + } + } else { + snprintf(err_msg, sizeof(err_msg), "Type error in argument #%i: expected %s", 1, ($descriptor->str ? $descriptor->str : $descriptor->name)); + SWIG_Chicken_Barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, err_msg); + } +} + +%typemap(varout) SWIGTYPE (CLASS::*) { + size_t ptr_size = sizeof($type); + C_word *known_space = C_alloc(C_SIZEOF_PAIR + C_SIZEOF_STRING(2*ptr_size) + C_SIZEOF_SWIG_POINTER); + char *temp = (char *)malloc(2*ptr_size); + C_word ptr = SWIG_NewPointerObj((void *) known_space, $descriptor, 0); + + SWIG_PackData(temp, (void *) &$varname, ptr_size); + $result = C_pair(&known_space, C_string(&known_space, 2*ptr_size, temp), ptr); + free(temp); +} + + + +/* Pass-by-value */ + +%typemap(in,closcode="(slot-ref $input 'swig-this)") SWIGTYPE($&1_ltype argp) { + argp = ($&1_ltype)SWIG_MustGetPtr($input, $&1_descriptor, $argnum, 0); + $1 = *argp; +} + +%typemap(varin,closcode="(slot-ref $input 'swig-this)") SWIGTYPE { + $&1_ltype argp; + argp = ($&1_ltype)SWIG_MustGetPtr($input, $&1_descriptor, 1, 0); + $1 = *argp; +} + +%typemap(out) SWIGTYPE +#ifdef __cplusplus +{ + $&1_ltype resultptr; + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + resultptr = new $1_ltype((const $1_ltype &) $1); + $result = SWIG_NewPointerObj(resultptr, $&1_descriptor, 1); +} +#else +{ + $&1_ltype resultptr; + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + resultptr = ($&1_ltype) malloc(sizeof($1_type)); + memmove(resultptr, &$1, sizeof($1_type)); + $result = SWIG_NewPointerObj(resultptr, $&1_descriptor, 1); +} +#endif + +%typemap(varout) SWIGTYPE +#ifdef __cplusplus +{ + $&1_ltype resultptr; + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + resultptr = new $1_ltype((const $1_ltype&) $1); + $result = SWIG_NewPointerObj(resultptr, $&1_descriptor, 0); +} +#else +{ + $&1_ltype resultptr; + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + resultptr = ($&1_ltype) malloc(sizeof($1_type)); + memmove(resultptr, &$1, sizeof($1_type)); + $result = SWIG_NewPointerObj(resultptr, $&1_descriptor, 0); +} +#endif + +/* --- Output values --- */ + +/* Strings */ + +%typemap(out) + char * +{ char *s = (char*) $1; + if ($1 == NULL) { + $result = C_SCHEME_FALSE; + } + else { + int string_len = strlen ((char *) ($1)); + C_word *string_space = C_alloc (C_SIZEOF_STRING (string_len)); + $result = C_string (&string_space, string_len, s); + } +} + +%typemap(varout) + char * +{ char *s = (char*) $varname; + if ($varname == NULL) { + $result = C_SCHEME_FALSE; + } + else { + int string_len = strlen ($varname); + C_word *string_space = C_alloc (C_SIZEOF_STRING (string_len)); + $result = C_string (&string_space, string_len, s); + } +} + +%typemap(throws) char * +{ + if ($1 == NULL) { + SWIG_Chicken_ThrowException(C_SCHEME_FALSE); + } else { + int string_len = strlen($1); + C_word *string_space = C_alloc(C_SIZEOF_STRING(string_len)); + SWIG_Chicken_ThrowException(C_string(&string_space, string_len, (char *) $1)); + } +} + +/* Void */ +%typemap(out) void +%{ +$result = C_SCHEME_UNDEFINED; +%} + +/* Special typemap for character array return values */ + +%typemap(out) + char [ANY], const char [ANY] +%{ if ($1 == NULL) { + $result = C_SCHEME_FALSE; + } + else { + const int string_len = strlen ($1); + C_word *string_space = C_alloc (C_SIZEOF_STRING (string_len)); + $result = C_string (&string_space, string_len, $1); + } %} + +/* Primitive types--return by value */ + +/* --- Variable input --- */ + +/* A string */ +#ifdef __cplusplus +%typemap(varin) char * { + if ($input == C_SCHEME_FALSE) { + $1 = NULL; + } + else if (!C_swig_is_string ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "C variable '$name ($1_ltype)'"); + } + else { + char *temp = C_c_string ($input); + int len = C_header_size ($input); + if ($1) delete [] $1; + $1 = ($type) new char[len+1]; + strncpy((char*)$1, temp, len); + ((char*)$1) [len] = 0; + } +} +%typemap(varin,warning="451:Setting const char * variable may leak memory") const char * { + if ($input == C_SCHEME_FALSE) { + $1 = NULL; + } + else if (!C_swig_is_string ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "C variable '$name ($1_ltype)'"); + } + else { + char *temp = C_c_string ($input); + int len = C_header_size ($input); + $1 = ($type) new char[len+1]; + strncpy((char*)$1,temp,len); + ((char*)$1) [len] = 0; + } +} +#else +%typemap(varin) char * { + if ($input == C_SCHEME_FALSE) { + $1 = NULL; + } + else if (!C_swig_is_string ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "C variable '$name ($1_ltype)'"); + } + else { + char *temp = C_c_string ($input); + int len = C_header_size ($input); + if ($1) free((char*) $1); + $1 = ($type) malloc(len+1); + strncpy((char*)$1,temp,len); + ((char*)$1) [len] = 0; + } +} +%typemap(varin,warning="451:Setting const char * variable may leak memory") const char * { + if ($input == C_SCHEME_FALSE) { + $1 = NULL; + } + else if (!C_swig_is_string ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "C variable '$name ($1_ltype)'"); + } + else { + char *temp = C_c_string ($input); + int len = C_header_size ($input); + $1 = ($type) malloc(len+1); + strncpy((char*)$1,temp,len); + ((char*)$1) [len] = 0; + } +} +#endif + +%typemap(varin) char [] { + swig_barf(SWIG_BARF1_BAD_ARGUMENT_TYPE, "C/C++ variable '$name' is read-only"); +} + +/* Special case for string array variables */ +%typemap(varin) char [ANY] { + if ($input == C_SCHEME_FALSE) { + memset($1,0,$1_dim0*sizeof(char)); + } + else if (!C_swig_is_string ($input)) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "C variable '$name ($1_ltype)'"); + } + else { + char *temp = C_c_string ($input); + strncpy($1,temp,$1_dim0*sizeof(char)); + } +} + +/* --- Variable output --- */ + +/* Void */ +%typemap(varout) void "$result = C_SCHEME_UNDEFINED;"; + +/* Special typemap for character array return values */ +%typemap(varout) char [ANY], const char [ANY] +%{ if ($varname == NULL) { + $result = C_SCHEME_FALSE; + } + else { + const int string_len = strlen ($varname); + C_word *string_space = C_alloc (C_SIZEOF_STRING (string_len)); + $result = C_string (&string_space, string_len, (char *) $varname); + } +%} + + +/* --- Constants --- */ + +%typemap(constcode) char * +"static const char *$result = $value;" + +%typemap(constcode) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] +"static const void *$result = (void*) $value;" + +/* ------------------------------------------------------------ + * String & length + * ------------------------------------------------------------ */ + +%typemap(in) (char *STRING, int LENGTH), (char *STRING, size_t LENGTH) { + if ($input == C_SCHEME_FALSE) { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Cannot use a null/#f string for a char*, int arguments"); + } + else if (C_swig_is_string ($input)) { + $1 = ($1_ltype) C_c_string ($input); + $2 = ($2_ltype) C_header_size ($input); + } + else { + swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument #$argnum is not of type 'string'"); + } +} + +/* ------------------------------------------------------------ + * CHICKEN types + * ------------------------------------------------------------ */ + +%typemap(in) C_word "$1 = $input;"; +%typemap(out) C_word "$result = $1;"; + +/* ------------------------------------------------------------ + * Typechecking rules + * ------------------------------------------------------------ */ + +%typecheck(SWIG_TYPECHECK_INTEGER) + bool, const bool & +{ + $1 = C_swig_is_bool ($input); +} + +%typecheck(SWIG_TYPECHECK_INTEGER) + int, short, + unsigned int, unsigned short, + signed char, unsigned char, + const int &, const short &, + const unsigned int &, const unsigned short &, + enum SWIGTYPE +{ + $1 = C_swig_is_fixnum ($input); +} + +%typecheck(SWIG_TYPECHECK_INTEGER) + long, + unsigned long, + long long, unsigned long long, + const long &, + const unsigned long &, + const long long &, const unsigned long long & +{ + $1 = (C_swig_is_bool ($input) || + C_swig_is_fixnum ($input) || + C_swig_is_flonum ($input)) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_DOUBLE) + float, double, + const float &, const double & +{ + $1 = C_swig_is_flonum ($input); +} + +%typecheck(SWIG_TYPECHECK_CHAR) char { + $1 = C_swig_is_string ($input); +} + +%typecheck(SWIG_TYPECHECK_STRING) char * { + $1 = C_swig_is_string ($input); +} + +%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] { + void *ptr; + $1 = !SWIG_ConvertPtr($input, &ptr, $1_descriptor, 0); +} + +%typecheck(SWIG_TYPECHECK_VOIDPTR) void * { + void *ptr; + $1 = !SWIG_ConvertPtr($input, &ptr, 0, 0); +} + +%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE & +{ + void *ptr = 0; + if (SWIG_ConvertPtr($input, &ptr, $descriptor, 0)) { + /* error */ + $1 = 0; + } else { + $1 = (ptr != 0); + } +} + +%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE +{ + void *ptr = 0; + if (SWIG_ConvertPtr($input, &ptr, $&descriptor, 0)) { + /* error */ + $1 = 0; + } else { + $1 = (ptr != 0); + } +} + + +/* ------------------------------------------------------------ + * Exception handling + * ------------------------------------------------------------ */ + +/* ------------------------------------------------------------ + * --- Exception handling --- + * ------------------------------------------------------------ */ + +%typemap(throws) SWIGTYPE { + $<ype temp = new $ltype($1); + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + C_word ptr = SWIG_NewPointerObj(temp, $&descriptor,1); + SWIG_Chicken_ThrowException(ptr); +} + +%typemap(throws) SWIGTYPE * { + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + C_word ptr = SWIG_NewPointerObj((void *) $1, $descriptor, 0); + SWIG_Chicken_ThrowException(ptr); +} + +%typemap(throws) SWIGTYPE [ANY] { + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + C_word ptr = SWIG_NewPointerObj((void *) $1, $descriptor, 0); + SWIG_Chicken_ThrowException(ptr); +} + +%typemap(throws) SWIGTYPE & { + C_word *known_space = C_alloc(C_SIZEOF_SWIG_POINTER); + C_word ptr = SWIG_NewPointerObj((void *)&($1),$descriptor,0); + SWIG_Chicken_ThrowException(ptr); +} + +/* ------------------------------------------------------------ + * ANSI C typemaps + * ------------------------------------------------------------ */ + +%apply unsigned long { size_t }; + +/* ------------------------------------------------------------ + * Various + * ------------------------------------------------------------ */ + +/* Array reference typemaps */ +%apply SWIGTYPE & { SWIGTYPE ((&)[ANY]) } + +/* const pointers */ +%apply SWIGTYPE * { SWIGTYPE *const } + +/* ------------------------------------------------------------ + * Overloaded operator support + * ------------------------------------------------------------ */ + +#ifdef __cplusplus +%rename(__add__) *::operator+; +%rename(__pos__) *::operator+(); +%rename(__pos__) *::operator+() const; +%rename(__sub__) *::operator-; +%rename(__neg__) *::operator-(); +%rename(__neg__) *::operator-() const; +%rename(__mul__) *::operator*; +%rename(__div__) *::operator/; +%rename(__mod__) *::operator%; +%rename(__lshift__) *::operator<<; +%rename(__rshift__) *::operator>>; +%rename(__and__) *::operator&; +%rename(__or__) *::operator|; +%rename(__xor__) *::operator^; +%rename(__invert__) *::operator~; +%rename(__iadd__) *::operator+=; +%rename(__isub__) *::operator-=; +%rename(__imul__) *::operator*=; +%rename(__idiv__) *::operator/=; +%rename(__imod__) *::operator%=; +%rename(__ilshift__) *::operator<<=; +%rename(__irshift__) *::operator>>=; +%rename(__iand__) *::operator&=; +%rename(__ior__) *::operator|=; +%rename(__ixor__) *::operator^=; +%rename(__lt__) *::operator<; +%rename(__le__) *::operator<=; +%rename(__gt__) *::operator>; +%rename(__ge__) *::operator>=; +%rename(__eq__) *::operator==; +%rename(__ne__) *::operator!=; + +/* Special cases */ +%rename(__call__) *::operator(); + +#endif +/* Warnings for certain CHICKEN keywords */ +%include <chickenkw.swg> + +/* TinyCLOS <--> Low-level CHICKEN */ + +%typemap("clos_in") SIMPLE_CLOS_OBJECT * "(slot-ref $input (quote this))" +%typemap("clos_out") SIMPLE_CLOS_OBJECT * "(make $class (quote this) $1)" + +%insert(header) %{ +#ifdef __cplusplus +extern "C" { +#endif +/* Chicken initialization function */ +SWIGEXPORT void SWIG_init(C_word, C_word, C_word) C_noret; +#ifdef __cplusplus +} +#endif +%} + +%insert(closprefix) "swigclosprefix.scm" + +%insert(init) "swiginit.swg" + +%insert(init) %{ +/* CHICKEN initialization function */ +#ifdef __cplusplus +extern "C" { +#endif +SWIGEXPORT void SWIG_init(C_word argc, C_word closure, C_word continuation) { + int i; + C_word sym; + C_word tmp; + C_word *a; + C_word ret; + C_word *return_vec; + + SWIG_InitializeModule(0); + SWIG_PropagateClientData(); + ret = C_SCHEME_TRUE; + +#if $veclength + return_vec = C_alloc(C_SIZEOF_VECTOR($veclength)); + ret = (C_word) return_vec; + *(return_vec++) = C_VECTOR_TYPE | $veclength; +#endif + + a = C_alloc(2*$nummethods$symsize); + +%} |