mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
Compute field offsets and overall size for object structures
2008-11-11 Owen Taylor <otaylor@redhat.com> Compute field offsets and overall size for object structures Bug 560326 – Fails to build Gtk-2.0.typelib with "Unexpected non-pointer field of type object in structure" Do basic computation of field offsets for objects and interfaces; this doesn't attempt to address all of the "mess" for virtual functions described in Bug 560281. svn path=/trunk/; revision=888
This commit is contained in:
parent
ecc78cf338
commit
7c221ce28b
@ -228,6 +228,9 @@ struct _GIrNodeInterface
|
||||
GList *interfaces;
|
||||
GList *prerequisites;
|
||||
|
||||
gint alignment;
|
||||
gint size;
|
||||
|
||||
GList *members;
|
||||
};
|
||||
|
||||
|
21
giroffsets.c
21
giroffsets.c
@ -150,6 +150,14 @@ get_interface_size_alignment (GIrNodeField *field,
|
||||
*alignment = struct_->alignment;
|
||||
break;
|
||||
}
|
||||
case G_IR_NODE_OBJECT:
|
||||
case G_IR_NODE_INTERFACE:
|
||||
{
|
||||
GIrNodeInterface *interface = (GIrNodeInterface *)iface;
|
||||
*size = interface->size;
|
||||
*alignment = interface->alignment;
|
||||
break;
|
||||
}
|
||||
case G_IR_NODE_UNION:
|
||||
{
|
||||
GIrNodeUnion *union_ = (GIrNodeUnion *)iface;
|
||||
@ -426,6 +434,19 @@ g_ir_node_compute_offsets (GIrNode *node,
|
||||
&struct_->size, &struct_->alignment);
|
||||
break;
|
||||
}
|
||||
case G_IR_NODE_OBJECT:
|
||||
case G_IR_NODE_INTERFACE:
|
||||
{
|
||||
GIrNodeInterface *iface = (GIrNodeInterface *)node;
|
||||
|
||||
if (!check_needs_computation (node, module, iface->alignment))
|
||||
return;
|
||||
|
||||
compute_struct_field_offsets (node, iface->members,
|
||||
module, modules,
|
||||
&iface->size, &iface->alignment);
|
||||
break;
|
||||
}
|
||||
case G_IR_NODE_UNION:
|
||||
{
|
||||
GIrNodeUnion *union_ = (GIrNodeUnion *)node;
|
||||
|
Loading…
Reference in New Issue
Block a user