diff options
author | Simon Feltman <sfeltman@src.gnome.org> | 2014-02-27 02:05:54 -0800 |
---|---|---|
committer | Simon Feltman <sfeltman@src.gnome.org> | 2014-02-27 13:51:18 -0800 |
commit | 7027bb256d0d1ab5dd58b6d7fb02ff2f547ae4c2 (patch) | |
tree | e145d73c84392eb5f3b8c72c46a377f027d29a8c /girepository/gitypelib.c | |
parent | 93a63a77cfda14f7bd69aef88d6a2502903d62f0 (diff) | |
download | gobject-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.c | 9 |
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)) |