You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.1 KiB
38 lines
1.1 KiB
5 years ago
|
/* This file defines an internal function for processing default arguments
|
||
|
with proxy classes.
|
||
|
|
||
|
There seems to be no straightforward way to write proxy functions
|
||
|
involving default arguments. For example :
|
||
|
|
||
|
def foo(arg1,arg2,*args):
|
||
|
proxyc.foo(arg1,arg2,args)
|
||
|
|
||
|
This fails because args is now a tuple and SWIG doesn't know what to
|
||
|
do with it.
|
||
|
|
||
|
This file allows a different approach :
|
||
|
|
||
|
def foo(arg1,arg2,*args):
|
||
|
proxyc.__call_defarg(proxyc.foo,(arg1,arg2,)+args)
|
||
|
|
||
|
Basically, we form a new tuple from the object, call this special
|
||
|
__call_defarg method and it passes control to the real wrapper function.
|
||
|
An ugly hack, but it works.
|
||
|
*/
|
||
|
|
||
|
SWIGINTERN PyObject *swig_call_defargs(PyObject *self, PyObject *args) {
|
||
|
PyObject *func;
|
||
|
PyObject *parms;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args,"OO",&func,&parms))
|
||
|
return NULL;
|
||
|
|
||
|
if (!PyCallable_Check(func)) {
|
||
|
SWIG_PYTHON_THREAD_BEGIN_BLOCK;
|
||
|
PyErr_SetString(PyExc_TypeError, "__call_defarg : Need a callable object!");
|
||
|
SWIG_PYTHON_THREAD_END_BLOCK;
|
||
|
return NULL;
|
||
|
}
|
||
|
return PyEval_CallObject(func,parms);
|
||
|
}
|