[pygtk] virtual function without a return value
Gustavo J. A. M. Carneiro
gjc at inescporto.pt
Mon Jun 11 06:26:53 WST 2007
On Dom, 2007-06-10 at 21:46 +0200, Sébastien Granjoux wrote:
> Hi All,
>
> I'm writing a wrapper for a GInterface derived type, so I have written a
> .defs file with something like
>
> (define-virtual activate
> (of-object "Plugin")
> (c-name "plugin_activate")
> (return-type "none")
> )
>
>
> Using codegen I get a function
>
> static void _wrap_Plugin__proxy_do_activate(Plugin *self)
> {
> ...
> py_retval = PyObject_CallObject(py_method, py_args);
> ...
> py_retval = Py_BuildValue("(N)", py_retval);
> if (!PyArg_ParseTuple(py_retval, "")) {
> if (PyErr_Occurred())
>
>
> I don't understand why codegen generates some code to extract the return
> value from the python method as the C function doesn't need to return
> anything. Moreover, I have an error (not fatal) "TypeError: function
> takes exactly 0 arguments (1 given)" in PyArg_ParseTuple which I think
> is due to the empty string "".
>
> Is it something wrong in codegen or do I have made an error somewhere ?
I think it's a bug in codegen. A patch (codegen/reversewrapper.py)
would be most welcome; it just needs to special case where
PyArg_ParseTuple is called to parse return value if the template string
is "", then just check for Py_None instead of calling PyArg_ParseTuple.
--
Gustavo J. A. M. Carneiro
<gjc at inescporto.pt> <gustavo at users.sourceforge.net>
"The universe is always one step beyond logic" -- Frank Herbert
More information about the pygtk
mailing list