diff options
author | Owen Taylor <otaylor@redhat.com> | 2008-11-11 21:10:12 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2008-11-11 21:10:12 +0000 |
commit | 6bd026f9c700b60df590639935e61321c6e19455 (patch) | |
tree | 9327f781613dbf0c22c34f50a6f960f3674e6c2d /girepository/giroffsets.c | |
parent | 98527474d7b018cf30fc046830488c35abd67eab (diff) | |
download | gobject-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.c | 21 |
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; |