summaryrefslogtreecommitdiff
path: root/girepository/gitypelib.c
diff options
context:
space:
mode:
authorSimon Feltman <sfeltman@src.gnome.org>2014-02-27 02:05:54 -0800
committerSimon Feltman <sfeltman@src.gnome.org>2014-02-27 13:51:18 -0800
commit7027bb256d0d1ab5dd58b6d7fb02ff2f547ae4c2 (patch)
treee145d73c84392eb5f3b8c72c46a377f027d29a8c /girepository/gitypelib.c
parent93a63a77cfda14f7bd69aef88d6a2502903d62f0 (diff)
downloadgobject-introspection-7027bb256d0d1ab5dd58b6d7fb02ff2f547ae4c2.tar.gz
g-ir-compiler: Add support for callback fields on GObjects
Use ParseState enum instead of a boolean for the ParseContexts embedded_type flag. This allows specific tracking of the embedded type currently being parsed which can now either be STATE_STRUCT_FIELD or STATE_CLASS_FIELD (or allow for future expansion). Add ParseState::STATE_NONE as the default for this field. Fix GObject FieldBlob validation to take into account the sizeof CallbackBlobs (copied from the struct validator). Add static g_object_info_get_field_offset which parallels g_struct_info_get_field_offset which is needed since callback fields may vary in size. https://bugzilla.gnome.org/show_bug.cgi?id=725198
Diffstat (limited to 'girepository/gitypelib.c')
-rw-r--r--girepository/gitypelib.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/girepository/gitypelib.c b/girepository/gitypelib.c
index 8883496e..41b54fd8 100644
--- a/girepository/gitypelib.c
+++ b/girepository/gitypelib.c
@@ -1773,10 +1773,17 @@ validate_object_blob (ValidateContext *ctx,
push_context (ctx, get_string_nofail (typelib, blob->name));
- for (i = 0; i < blob->n_fields; i++, offset2 += sizeof (FieldBlob))
+ for (i = 0; i < blob->n_fields; i++)
{
+ FieldBlob *blob = (FieldBlob*) &typelib->data[offset2];
+
if (!validate_field_blob (ctx, offset2, error))
return FALSE;
+
+ offset2 += sizeof (FieldBlob);
+ /* Special case fields which are callbacks. */
+ if (blob->has_embedded_type)
+ offset2 += sizeof (CallbackBlob);
}
for (i = 0; i < blob->n_properties; i++, offset2 += sizeof (PropertyBlob))