self.symbol = symbol
self.throws = not not throws
self.is_method = False
- self.is_virtual = False
self.doc = None
def get_parameter_index(self, name):
self.name, self.retval,
self.parameters)
+
+class VFunction(Function):
+ pass
+
+
class Type(Node):
def __init__(self, name, ctype=None):
self._write_parameters(func.parameters)
def _write_method(self, method):
- if method.is_virtual:
- tag_name = 'vfunc'
- else:
- tag_name = 'method'
- self._write_function(method, tag_name)
+ self._write_function(method, tag_name='method')
def _write_static_method(self, method):
self._write_function(method, tag_name='function')
except KeyError, e:
print "WARNING: DELETING node %s: %s" % (node.name, e)
self._remove_attribute(node.name)
- # Another pass, since we need to have the methods parsed
- # in order to correctly modify them after class/record
- # pairing
- for (ns, node) in nodes:
# associate GtkButtonClass with GtkButton
if isinstance(node, Record):
self._pair_class_record(node)
for field in maybe_class.fields:
if isinstance(field, Field):
field.writable = False
-
- # Pair up virtual methods by finding a slot in
- # the class with the same name
- for field in maybe_class.fields:
- if not isinstance(field, Callback):
- continue
- matched = False
- for method in pair_class.methods:
- if (method.name == field.name and
- len(method.parameters)+1 == len(field.parameters)):
- method.is_virtual = True
- break
-
+ # TODO: remove this, we should be computing vfuncs instead
+ if isinstance(pair_class, GLibInterface):
+ for field in maybe_class.fields[1:]:
+ pair_class.fields.append(field)
gclass_struct = GLibRecord.from_record(class_struct)
self._remove_attribute(class_struct.name)
self._add_attribute(gclass_struct, True)
glib:type-name="FooInterface"
glib:get-type="foo_interface_get_type"
glib:type-struct="InterfaceIface">
- <vfunc name="do_foo" c:identifier="foo_interface_do_foo">
+ <callback name="do_foo" c:type="do_foo">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="x" transfer-ownership="none">
- <type name="int" c:type="int"/>
+ <parameter name="self" transfer-ownership="none">
+ <type name="Interface" c:type="FooInterface*"/>
</parameter>
</parameters>
- </vfunc>
+ </callback>
</interface>
<record name="InterfaceIface"
c:type="FooInterfaceIface"
<parameter name="self" transfer-ownership="none">
<type name="Interface" c:type="FooInterface*"/>
</parameter>
- <parameter name="x" transfer-ownership="none">
- <type name="int" c:type="int"/>
- </parameter>
</parameters>
</callback>
</record>
</parameter>
</parameters>
</method>
- <vfunc name="virtual_method" c:identifier="foo_object_virtual_method">
- <return-value transfer-ownership="none">
- <type name="none" c:type="void"/>
- </return-value>
- <parameters>
- <parameter name="first_param" transfer-ownership="none">
- <type name="int" c:type="int"/>
- </parameter>
- </parameters>
- </vfunc>
<property name="string" writable="1" construct="1">
<type name="utf8" c:type="gchararray"/>
</property>
glib:get-type="foo_sub_interface_get_type"
glib:type-struct="SubInterfaceIface">
<prerequisite name="Interface"/>
- <vfunc name="do_bar" c:identifier="foo_sub_interface_do_bar">
+ <method name="do_bar" c:identifier="foo_sub_interface_do_bar">
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ </method>
+ <callback name="do_bar" c:type="do_bar">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
- </vfunc>
+ <parameters>
+ <parameter name="self" transfer-ownership="none">
+ <type name="SubInterface" c:type="FooSubInterface*"/>
+ </parameter>
+ </parameters>
+ </callback>
</interface>
<record name="SubInterfaceIface"
c:type="FooSubInterfaceIface"
<member name="second" value="2"/>
<member name="third" value="4"/>
</bitfield>
- <interface name="Interface" glib:type-name="FooInterface" glib:get-type="foo_interface_get_type" glib:type-struct="InterfaceIface">
- <vfunc name="do_foo" offset="0">
- <return-value transfer-ownership="none">
- <type name="none"/>
- </return-value>
- <parameters>
- <parameter name="x" transfer-ownership="none">
- <type name="int"/>
- </parameter>
- </parameters>
- </vfunc>
- </interface>
+ <interface name="Interface" glib:type-name="FooInterface" glib:get-type="foo_interface_get_type" glib:type-struct="InterfaceIface"/>
<record name="InterfaceIface" glib:is-gtype-struct="1">
<field name="parent_iface">
<type name="GObject.TypeInterface"/>
</parameter>
</parameters>
</glib:signal>
- <vfunc name="virtual_method" offset="0">
- <return-value transfer-ownership="none">
- <type name="none"/>
- </return-value>
- <parameters>
- <parameter name="first_param" transfer-ownership="none">
- <type name="int"/>
- </parameter>
- </parameters>
- </vfunc>
</class>
<record name="ObjectClass" glib:is-gtype-struct="1">
<field name="parent_class">
<record name="StructPrivate"/>
<interface name="SubInterface" glib:type-name="FooSubInterface" glib:get-type="foo_sub_interface_get_type" glib:type-struct="SubInterfaceIface">
<prerequisite name="Interface"/>
- <vfunc name="do_bar" offset="0">
+ <method name="do_bar" c:identifier="foo_sub_interface_do_bar">
<return-value transfer-ownership="none">
<type name="none"/>
</return-value>
- </vfunc>
+ </method>
</interface>
<record name="SubInterfaceIface" glib:is-gtype-struct="1">
<field name="parent_iface">
int foo_init_argv_address (int *argc, char ***argv);
void foo_private_function (FooObject *foo);
void foo_test_unsigned (unsigned int uint);
-void foo_interface_do_foo (FooInterface *self, int x);
-void foo_do_foo (FooInterface *self, int x);
+void foo_interface_do_foo (FooInterface *self);
+void foo_do_foo (FooInterface *self);
int foo_enum_method (FooEnumType foo_enum);
FooHidden * foo_hidden_copy (const FooHidden *boxed);
void foo_hidden_free (FooHidden *boxed);
return object_type;
}
-void foo_interface_do_foo (FooInterface *self, int x)
+void foo_interface_do_foo (FooInterface *self)
{
- FOO_INTERFACE_GET_INTERFACE(self)->do_foo (self, x);
+ FOO_INTERFACE_GET_INTERFACE(self)->do_foo (self);
}
enum {
}
void
-foo_do_foo (FooInterface *self, int x)
+foo_do_foo (FooInterface *self)
{
{
GTypeInterface parent_iface;
- void (*do_foo) (FooInterface *self, int x);
+ void (*do_foo) (FooInterface *self);
};
GType foo_interface_get_type (void) G_GNUC_CONST;
-void foo_interface_do_foo (FooInterface *iface, int x);
-
struct _FooSubInterfaceIface
{
GTypeInterface parent_iface;
void foo_object_handle_glyph (FooObject *object, UtilityGlyph glyph);
-void foo_object_virtual_method (FooObject *object, int first_param);
-
int foo_object_static_meth ();
struct _FooSubobject