diff options
author | Torsten Schönfeld <kaffeetisch@gmx.de> | 2011-08-13 17:28:30 +0200 |
---|---|---|
committer | Torsten Schönfeld <kaffeetisch@gmx.de> | 2011-08-16 18:43:23 +0200 |
commit | 169b206cbb4b347e4b17854e8f0c62a40404f803 (patch) | |
tree | 929ddaefcedf7c9d4778ea355e58f0b1cc2f2f96 /girepository/girnode.c | |
parent | 64848acb817369436d629d153c5750789c0addc3 (diff) | |
download | gobject-introspection-169b206cbb4b347e4b17854e8f0c62a40404f803.tar.gz |
Allow enums and bitfields to have static methods
This uses the same backcompat machinery that was introduced for static
methods for non-class types, so this change does not break users of the
existing presentations.
New libgirepository API:
g_enum_info_get_n_methods
g_enum_info_get_method
https://bugzilla.gnome.org/show_bug.cgi?id=656499
Diffstat (limited to 'girepository/girnode.c')
-rw-r--r-- | girepository/girnode.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/girepository/girnode.c b/girepository/girnode.c index 166ca30a..fcc8ce5e 100644 --- a/girepository/girnode.c +++ b/girepository/girnode.c @@ -333,6 +333,10 @@ _g_ir_node_free (GIrNode *node) for (l = enum_->values; l; l = l->next) _g_ir_node_free ((GIrNode *)l->data); g_list_free (enum_->values); + + for (l = enum_->methods; l; l = l->next) + _g_ir_node_free ((GIrNode *)l->data); + g_list_free (enum_->methods); } break; @@ -467,6 +471,8 @@ _g_ir_node_get_size (GIrNode *node) size = sizeof (EnumBlob); for (l = enum_->values; l; l = l->next) size += _g_ir_node_get_size ((GIrNode *)l->data); + for (l = enum_->methods; l; l = l->next) + size += _g_ir_node_get_size ((GIrNode *)l->data); } break; @@ -718,6 +724,8 @@ _g_ir_node_get_full_size_internal (GIrNode *parent, for (l = enum_->values; l; l = l->next) size += _g_ir_node_get_full_size_internal (node, (GIrNode *)l->data); + for (l = enum_->methods; l; l = l->next) + size += _g_ir_node_get_full_size_internal (node, (GIrNode *)l->data); } break; @@ -2030,7 +2038,7 @@ _g_ir_node_build_typelib (GIrNode *node, blob->error_domain = 0; blob->n_values = 0; - blob->reserved2 = 0; + blob->n_methods = 0; for (l = enum_->values; l; l = l->next) { @@ -2039,6 +2047,14 @@ _g_ir_node_build_typelib (GIrNode *node, blob->n_values++; _g_ir_node_build_typelib (value, node, build, offset, offset2); } + + for (l = enum_->methods; l; l = l->next) + { + GIrNode *method = (GIrNode *)l->data; + + blob->n_methods++; + _g_ir_node_build_typelib (method, node, build, offset, offset2); + } } break; |