Re: gobject-introspection and GBoxed



Hi Tomeu,

On 12 January 2012 11:02, Tomeu Vizoso <tomeu sugarlabs org> wrote:
> Looks like a bug in pygobject, could you file a bug with a backtrace?
>
> It may be worth trying out with the latest release to scope better the problem.

I've tried with git master gobject-introspection and 3.0.3 pygobject
and the crash has gone but it still doesn't work. Should I file a bug
or am I making a stupid error?

I have this in the header:

----
/* A very simple boxed type for testing. Just holds an int.
 */
typedef struct _VipsThing {
        int i;
} VipsThing;

/**
 * VIPS_TYPE_THING:
 *
 * The #GType for a #VipsThing.
 */
#define VIPS_TYPE_THING (vips_thing_get_type())
GType vips_thing_get_type( void );
VipsThing *vips_thing_new( int i );
int vips_thing_get_i( VipsThing *thing );
-----

this in the .c file:

-----------
/* A very simple boxed type for testing. Just an int.
 */

/**
 * vips_thing_new:
 * @n:
 *
 * Returns: (transfer full): a new #VipsThing.
 */
VipsThing *
vips_thing_new( int i )
{
        VipsThing *thing;

        thing = g_new( VipsThing, 1 );
        thing->i = i;

        printf( "vips_thing_new: %d %p\n", i, thing );

        return( thing );
}

static VipsThing *
vips_thing_copy( VipsThing *thing )
{
        VipsThing *thing2;

        thing2 = vips_thing_new( thing->i );

        printf( "vips_thing_copy: %d %p = %p\n", thing->i, thing2, thing );

        return( thing2 );
}

static void
vips_thing_free( VipsThing *thing )
{
        printf( "vips_thing_free: %d %p\n", thing->i, thing );

        g_free( thing );
}

int
vips_thing_get_i( VipsThing *thing )
{
        printf( "vips_thing_get_i: %d %p\n", thing->i, thing );

        return( thing->i );
}

G_DEFINE_BOXED_TYPE( VipsThing, vips_thing,
        (GBoxedCopyFunc) vips_thing_copy,
        (GBoxedFreeFunc) vips_thing_free );
-------------------

But this happens in Python:

>>> from gi.repository import Vips
>>> dir(Vips)
... long list, all the GObject based types I use are there and work,
so I think the introspection stuff is OK
... Vips.thing* is not there, but Vips.Thing is
>>> Vips.Thing
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/john/vips/lib/python2.7/site-packages/gi/module.py",
line 243, in __getattr__
    return getattr(self._introspection_module, name)
NotImplementedError: <gi.BoxedInfo object (Thing) at 0x0x7f9e7ac674d0>
>>> Vips.Thing(12)
NotImplementedError: <gi.BoxedInfo object (Thing) at 0x0x7f9e7ac676c8>
>>> Vips.Thing.new(12)
NotImplementedError: <gi.BoxedInfo object (Thing) at 0x0x7f9e7ac675f0>
>>> dir(Vips.Thing)
NotImplementedError: <gi.BoxedInfo object (Thing) at 0x0x7f9e7ac67a70>
>>> Vips.thing_new
AttributeError: 'gi.repository.Vips' object has no attribute 'thing_new'
>>>

The "/home/john/vips/lib/python2.7/site-packages/gi/module.py" in the
backtrace proves that I'm using my own build of gi master and not the
host one, I hope.

John


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]