mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-24 09:58:54 +02: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:
@@ -228,6 +228,9 @@ struct _GIrNodeInterface
|
|||||||
GList *interfaces;
|
GList *interfaces;
|
||||||
GList *prerequisites;
|
GList *prerequisites;
|
||||||
|
|
||||||
|
gint alignment;
|
||||||
|
gint size;
|
||||||
|
|
||||||
GList *members;
|
GList *members;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
21
giroffsets.c
21
giroffsets.c
@@ -150,6 +150,14 @@ get_interface_size_alignment (GIrNodeField *field,
|
|||||||
*alignment = struct_->alignment;
|
*alignment = struct_->alignment;
|
||||||
break;
|
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:
|
case G_IR_NODE_UNION:
|
||||||
{
|
{
|
||||||
GIrNodeUnion *union_ = (GIrNodeUnion *)iface;
|
GIrNodeUnion *union_ = (GIrNodeUnion *)iface;
|
||||||
@@ -426,6 +434,19 @@ g_ir_node_compute_offsets (GIrNode *node,
|
|||||||
&struct_->size, &struct_->alignment);
|
&struct_->size, &struct_->alignment);
|
||||||
break;
|
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:
|
case G_IR_NODE_UNION:
|
||||||
{
|
{
|
||||||
GIrNodeUnion *union_ = (GIrNodeUnion *)node;
|
GIrNodeUnion *union_ = (GIrNodeUnion *)node;
|
||||||
|
Reference in New Issue
Block a user