blob: eec1e0d05b92445286f25d53a367b8d6a79341ed [file] [log] [blame]
/* -------------------------------------------------------------
* SWIG library containing argc and argv multi-argument typemaps
* ------------------------------------------------------------- */
%typemap(in) (int ARGC, char **ARGV) {
$1_ltype i, len;
Scheme_Object **elems;
SWIG_contract_assert($input != (Scheme_Object *)NULL &&
$input != scheme_null &&
SCHEME_TYPE($input) == scheme_vector_type, "null array");
len = SCHEME_VEC_SIZE($input);
$1 = len;
$2 = ($2_ltype) SWIG_MzScheme_Malloc((size_t)(len+1)*sizeof($*2_ltype), FUNC_NAME);
elems = SCHEME_VEC_ELS($input);
for (i = 0; i < len; i++) {
SWIG_contract_assert(SCHEME_TYPE(elems[i]) == scheme_char_string_type,
"elements in array must be strings");
$2[i] = ($*2_ltype)SCHEME_STR_VAL(elems[i]);
}
$2[i] = NULL;
}
%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) {
if ($input != (Scheme_Object *)NULL && $input != scheme_null &&
SCHEME_TYPE($input) == scheme_vector_type) {
size_t len = SCHEME_VEC_SIZE($input);
size_t i;
Scheme_Object **elems = SCHEME_VEC_ELS($input);
for (i = 0; i < len; i++) {
if (SCHEME_TYPE(elems[i]) != scheme_char_string_type) {
break;
}
}
/* All elements are strings! */
$1 = (i == len);
}
}
%typemap(freearg) (int ARGC, char **ARGV) {
SWIG_free((void *)$2);
}