Home | History | Annotate | Download | only in python
      1 /* This file defines an internal function for processing default arguments
      2    with proxy classes.
      3 
      4    There seems to be no straightforward way to write proxy functions
      5    involving default arguments. For example :
      6 
      7              def foo(arg1,arg2,*args):
      8                      proxyc.foo(arg1,arg2,args)
      9 
     10    This fails because args is now a tuple and SWIG doesn't know what to
     11    do with it.
     12 
     13    This file allows a different approach :
     14 
     15             def foo(arg1,arg2,*args):
     16                     proxyc.__call_defarg(proxyc.foo,(arg1,arg2,)+args)
     17 
     18    Basically, we form a new tuple from the object, call this special
     19    __call_defarg method and it passes control to the real wrapper function.
     20    An ugly hack, but it works.
     21 */
     22 
     23 SWIGINTERN PyObject *swig_call_defargs(PyObject *self, PyObject *args) {
     24   PyObject *func;
     25   PyObject *parms;
     26 
     27   if (!PyArg_ParseTuple(args,"OO",&func,&parms))
     28     return NULL;
     29 
     30   if (!PyCallable_Check(func)) {
     31     SWIG_PYTHON_THREAD_BEGIN_BLOCK;
     32     PyErr_SetString(PyExc_TypeError, "__call_defarg : Need a callable object!");
     33     SWIG_PYTHON_THREAD_END_BLOCK;
     34     return NULL;
     35   }
     36   return PyEval_CallObject(func,parms);
     37 }
     38