diff options
-rw-r--r-- | gir/glib-2.0.c | 4 | ||||
-rw-r--r-- | giscanner/annotationparser.py | 7 | ||||
-rw-r--r-- | tests/scanner/utility-1.0-expected.gir | 10 | ||||
-rw-r--r-- | tests/scanner/utility-1.0-expected.tgir | 10 | ||||
-rw-r--r-- | tests/scanner/utility.c | 4 | ||||
-rw-r--r-- | tests/scanner/utility.h | 6 |
6 files changed, 27 insertions, 14 deletions
diff --git a/gir/glib-2.0.c b/gir/glib-2.0.c index ec98c4d5..0fb1c68b 100644 --- a/gir/glib-2.0.c +++ b/gir/glib-2.0.c @@ -19,4 +19,6 @@ * @context: (allow-none): */ - +/** + * GIOCondition: (type bitfield) + **/ diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py index b831f937..35300b03 100644 --- a/giscanner/annotationparser.py +++ b/giscanner/annotationparser.py @@ -59,6 +59,9 @@ OPT_SCOPE = 'scope' OPT_TRANSFER = 'transfer' OPT_TYPE = 'type' +# Specific option values +OPT_VAL_BITFIELD = 'bitfield' + # Array options - array specific annotations OPT_ARRAY_FIXED_SIZE = 'fixed-size' OPT_ARRAY_LENGTH = 'length' @@ -344,6 +347,10 @@ class AnnotationApplier(object): self._parse_node_common(enum, block) if block: enum.doc = block.comment + type_opt = block.options.get(OPT_TYPE) + if type_opt and type_opt.one() == OPT_VAL_BITFIELD: + # This is hack, but hey, it works :-) + enum.__class__ = Bitfield def _parse_bitfield(self, bitfield): block = self._blocks.get(bitfield.symbol) diff --git a/tests/scanner/utility-1.0-expected.gir b/tests/scanner/utility-1.0-expected.gir index 7ff6ca5a..0ca72cb8 100644 --- a/tests/scanner/utility-1.0-expected.gir +++ b/tests/scanner/utility-1.0-expected.gir @@ -42,11 +42,11 @@ and/or use gtk-doc annotations. --> </parameter> </parameters> </callback> - <enumeration name="FlagType" c:type="UtilityFlagType"> - <member name="a" value="0" c:identifier="UTILITY_FLAG_A"/> - <member name="b" value="1" c:identifier="UTILITY_FLAG_B"/> - <member name="c" value="2" c:identifier="UTILITY_FLAG_C"/> - </enumeration> + <bitfield name="FlagType" c:type="UtilityFlagType"> + <member name="a" value="1" c:identifier="UTILITY_FLAG_A"/> + <member name="b" value="2" c:identifier="UTILITY_FLAG_B"/> + <member name="c" value="4" c:identifier="UTILITY_FLAG_C"/> + </bitfield> <class name="Object" c:type="UtilityObject" parent="GObject.Object" diff --git a/tests/scanner/utility-1.0-expected.tgir b/tests/scanner/utility-1.0-expected.tgir index 46ba2922..26535846 100644 --- a/tests/scanner/utility-1.0-expected.tgir +++ b/tests/scanner/utility-1.0-expected.tgir @@ -29,11 +29,11 @@ </parameter> </parameters> </callback> - <enumeration name="FlagType"> - <member name="a" value="0"/> - <member name="b" value="1"/> - <member name="c" value="2"/> - </enumeration> + <bitfield name="FlagType"> + <member name="a" value="1"/> + <member name="b" value="2"/> + <member name="c" value="4"/> + </bitfield> <class name="Object" parent="GObject.Object" glib:type-struct="ObjectClass" glib:type-name="UtilityObject" glib:get-type="utility_object_get_type"> <field name="parent_instance"> <type name="GObject.Object"/> diff --git a/tests/scanner/utility.c b/tests/scanner/utility.c index 756de178..a54afad9 100644 --- a/tests/scanner/utility.c +++ b/tests/scanner/utility.c @@ -2,6 +2,10 @@ G_DEFINE_TYPE (UtilityObject, utility_object, G_TYPE_OBJECT); +/** + * UtilityFlagType: (type bitfield) + **/ + static void utility_object_class_init (UtilityObjectClass *klass) { diff --git a/tests/scanner/utility.h b/tests/scanner/utility.h index b493a677..cad93ff5 100644 --- a/tests/scanner/utility.h +++ b/tests/scanner/utility.h @@ -62,9 +62,9 @@ typedef enum typedef enum { - UTILITY_FLAG_A, - UTILITY_FLAG_B, - UTILITY_FLAG_C + UTILITY_FLAG_A = 1, + UTILITY_FLAG_B = 2, + UTILITY_FLAG_C = 4 } UtilityFlagType; typedef struct |