summaryrefslogtreecommitdiff
path: root/girepository/giroffsets.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2008-11-11 21:10:12 +0000
committerOwen Taylor <otaylor@src.gnome.org>2008-11-11 21:10:12 +0000
commit6bd026f9c700b60df590639935e61321c6e19455 (patch)
tree9327f781613dbf0c22c34f50a6f960f3674e6c2d /girepository/giroffsets.c
parent98527474d7b018cf30fc046830488c35abd67eab (diff)
downloadgobject-introspection-6bd026f9c700b60df590639935e61321c6e19455.tar.gz
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
Diffstat (limited to 'girepository/giroffsets.c')
-rw-r--r--girepository/giroffsets.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/girepository/giroffsets.c b/girepository/giroffsets.c
index 66d18555..1844dd1b 100644
--- a/girepository/giroffsets.c
+++ b/girepository/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;