diff options
author | Stefan Zager <szager@gmail.com> | 2011-04-12 18:55:24 +0000 |
---|---|---|
committer | Stefan Zager <szager@gmail.com> | 2011-04-12 18:55:24 +0000 |
commit | 8f07b3f851ed7f538b68ba151daee1b2d509f119 (patch) | |
tree | d2685c89ba32b1df82be3ada51fa16915056bb58 /Examples | |
parent | 71a7a52b1652be5c0cbae7a063ed3e77f8ace2ba (diff) | |
download | swig-8f07b3f851ed7f538b68ba151daee1b2d509f119.tar.gz |
Testcase and fix for bug 1163440: vararg typemaps.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12639 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Examples')
-rw-r--r-- | Examples/test-suite/common.mk | 3 | ||||
-rw-r--r-- | Examples/test-suite/python/varargs_typemap_runme.py | 4 | ||||
-rw-r--r-- | Examples/test-suite/varargs_typemap.i | 43 |
3 files changed, 49 insertions, 1 deletions
diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 892ced2c1..9f15df50f 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -510,7 +510,8 @@ C_TEST_CASES += \ typedef_struct \ typemap_subst \ union_parameter \ - unions + unions \ + varargs_typemap # Multi-module C++ test cases . (Can be run individually using make testcase.multicpptest) diff --git a/Examples/test-suite/python/varargs_typemap_runme.py b/Examples/test-suite/python/varargs_typemap_runme.py new file mode 100644 index 000000000..8622051da --- /dev/null +++ b/Examples/test-suite/python/varargs_typemap_runme.py @@ -0,0 +1,4 @@ +import varargs_typemap + +if (varargs_typemap.testfunc(1, 2.0, "three") != "three") : + raise RuntimeError("testfunc failed!") diff --git a/Examples/test-suite/varargs_typemap.i b/Examples/test-suite/varargs_typemap.i new file mode 100644 index 000000000..54c0526f8 --- /dev/null +++ b/Examples/test-suite/varargs_typemap.i @@ -0,0 +1,43 @@ +%module varargs_typemap + + /* The typemap and action are taken from the "Variable length arguments" + * chapter of the SWIG manual. + */ + +%typemap(in) (...)(char *args[10]) { + int i; + int argc; + for (i = 0; i < 10; i++) args[i] = 0; + argc = PyTuple_Size(varargs); + if (argc > 10) { + PyErr_SetString(PyExc_ValueError,"Too many arguments"); + return NULL; + } + for (i = 0; i < argc; i++) { + PyObject *o = PyTuple_GetItem(varargs,i); + if (!PyString_Check(o)) { + PyErr_SetString(PyExc_ValueError,"Expected a string"); + return NULL; + } + args[i] = PyString_AsString(o); + } + $1 = (void *) args; +} + +%feature("action") testfunc { + char **args = (char **) arg3; + result = testfunc(arg1, arg2, args[0], args[1], args[2], args[3], args[4], + args[5],args[6],args[7],args[8],args[9], NULL); +} + +%inline { +char* testfunc (int arg1, double arg2, ...) +{ + va_list ap; + char *c; + va_start(ap, arg2); + c = va_arg(ap, char*); + va_end(ap); + return c; +} +} |