summaryrefslogtreecommitdiff
path: root/girepository/girnode.c
diff options
context:
space:
mode:
Diffstat (limited to 'girepository/girnode.c')
-rw-r--r--girepository/girnode.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/girepository/girnode.c b/girepository/girnode.c
index 796f2001..5e74b0b0 100644
--- a/girepository/girnode.c
+++ b/girepository/girnode.c
@@ -218,6 +218,7 @@ _g_ir_node_free (GIrNode *node)
g_free (node->name);
g_free (function->symbol);
+ g_free (function->property);
_g_ir_node_free ((GIrNode *)function->result);
for (l = function->parameters; l; l = l->next)
_g_ir_node_free ((GIrNode *)l->data);
@@ -1648,8 +1649,8 @@ _g_ir_node_build_typelib (GIrNode *node,
blob->blob_type = BLOB_TYPE_FUNCTION;
blob->deprecated = function->deprecated;
blob->is_static = !function->is_method;
- blob->setter = function->is_setter;
- blob->getter = function->is_getter;
+ blob->setter = FALSE;
+ blob->getter = FALSE;
blob->constructor = function->is_constructor;
blob->wraps_vfunc = function->wraps_vfunc;
blob->throws = function->throws; /* Deprecated. Also stored in SignatureBlob. */
@@ -1658,6 +1659,21 @@ _g_ir_node_build_typelib (GIrNode *node,
blob->symbol = _g_ir_write_string (function->symbol, strings, data, offset2);
blob->signature = signature;
+ if (function->is_setter || function->is_getter)
+ {
+ int index = get_index_of_member_type ((GIrNodeInterface*)parent,
+ G_IR_NODE_PROPERTY,
+ function->property);
+ if (index == -1)
+ {
+ g_error ("Unknown property %s for accessor %s", function->property, node->name);
+ }
+
+ blob->setter = function->is_setter;
+ blob->getter = function->is_getter;
+ blob->index = (guint) index;
+ }
+
/* function->result is special since it doesn't appear in the serialized format but
* we do want the attributes for it to appear
*/