blob: dacecb0855dbae45b73c6866ea720660259d9d16 [file] [log] [blame]
/* ------------------------------------------------------------
* SWIG library containing argc and argv multi-argument typemaps
* ------------------------------------------------------------ */
%{
SWIGINTERN int SWIG_AsVal_string SWIG_JSC_AS_DECL_ARGS(JSValueRef obj, JSStringRef* str)
{
if (!JSValueIsString SWIG_JSC_FROM_CALL_ARGS(obj)) {
return SWIG_TypeError;
}
if(str != SWIG_NULLPTR) {
*str = JSValueToStringCopy SWIG_JSC_AS_CALL_ARGS(obj, SWIG_NULLPTR);
}
return SWIG_OK;
}
%}
%typemap(in) (int ARGC, char **ARGV) {
int i, len;
size_t arraysize;
JSObjectRef array;
if (!JSValueIsArray SWIG_JSC_FROM_CALL_ARGS($input)) {
SWIG_exception_fail(SWIG_ERROR, "not array");
}
array = JSValueToObject SWIG_JSC_AS_CALL_ARGS($input, SWIG_NULLPTR);
len = SWIGJSC_ArrayLength SWIG_JSC_FROM_CALL_ARGS(array);
arraysize = (len+1)*sizeof($*2_ltype);
$1 = len;
$2 = ($2_ltype) malloc(arraysize);
if ($2 == SWIG_NULLPTR) {
SWIG_exception_fail(SWIG_ERROR, "memory allocation of array failed");
}
memset($2, 0, arraysize);
for (i = 0; i < len; i++) {
int res, slen;
$*2_ltype pstr;
JSStringRef str;
JSValueRef jsvalue = JSObjectGetPropertyAtIndex(context, array, i, SWIG_NULLPTR);
res = SWIG_AsVal_string SWIG_JSC_AS_CALL_ARGS(jsvalue, &str);
if (!SWIG_IsOK(res)) {
SWIG_exception_fail(SWIG_ERROR, "failed to convert to string");
}
slen = JSStringGetMaximumUTF8CStringSize(str);
pstr = ($*2_ltype) malloc(slen);
if (pstr == SWIG_NULLPTR) {
SWIG_exception_fail(SWIG_ERROR, "memory allocation of a string failed");
}
if (slen) {
res = JSStringGetUTF8CString(str, pstr, slen);
if (res > slen) {
SWIG_exception_fail(SWIG_ERROR, "wrong string length");
}
}
$2[i] = pstr;
}
$2[i] = SWIG_NULLPTR;
}
%typemap(freearg) (int ARGC, char **ARGV) {
if ($2 != SWIG_NULLPTR) {
$1_ltype i;
for (i = 0; i < $1; i++) {
free((void *)$2[i]);
}
free((void *)$2);
}
}