rendered paste bodyFrom: Andreas Rottmann <a.rottmann@gmx.at>Subject: Apply `(type bitfield)' annotations for enumsPreviously, such annotations would be ignored.--- giscanner/maintransformer.py | 11 +++++++++-- tests/scanner/Annotation-1.0-expected.gir | 4 ++++ tests/scanner/annotation.h | 9 +++++++++ 3 files changed, 22 insertions(+), 2 deletions(-)diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.pyindex 89f7ff6..9053abf 100644--- a/giscanner/maintransformer.py+++ b/giscanner/maintransformer.py@@ -219,8 +219,9 @@ usage is void (*_gtk_reserved1)(void);""" self._apply_annotations_function(node, chain) if isinstance(node, ast.Callback): self._apply_annotations_callable(node, chain, block = self._get_block(node))- if isinstance(node, (ast.Class, ast.Interface, ast.Union, ast.Enum,- ast.Bitfield, ast.Callback)):+ if isinstance(node, (ast.Enum, ast.Bitfield)):+ self._apply_annotations_enum(node, self._get_block(node))+ if isinstance(node, (ast.Class, ast.Interface, ast.Union, ast.Callback)): self._apply_annotations_annotated(node, self._get_block(node)) if isinstance(node, (ast.Class, ast.Interface, ast.Record, ast.Union)): block = self._get_block(node)@@ -409,6 +410,12 @@ usage is void (*_gtk_reserved1)(void);""" message.warn_node(parent, "Unknown container %r for element-type annotation" % (node.type, )) + def _apply_annotations_enum(self, node, block):+ enum_type = block.options.get(OPT_TYPE)+ if enum_type and enum_type.one() == 'bitfield':+ node.__class__ = ast.Bitfield+ self._apply_annotations_annotated(node, block)+ def _get_transfer_default_param(self, parent, node): if node.direction in [ast.PARAM_DIRECTION_INOUT, ast.PARAM_DIRECTION_OUT]:diff --git a/tests/scanner/Annotation-1.0-expected.gir b/tests/scanner/Annotation-1.0-expected.girindex 050d888..92d4ff2 100644--- a/tests/scanner/Annotation-1.0-expected.gir+++ b/tests/scanner/Annotation-1.0-expected.gir@@ -15,6 +15,10 @@ and/or use gtk-doc annotations. --> shared-library="libannotation.so" c:identifier-prefixes="Annotation" c:symbol-prefixes="annotation">+ <bitfield name="Bitfield" c:type="AnnotationBitfield">+ <member name="foo" value="1" c:identifier="ANNOTATION_FLAG_FOO"/>+ <member name="bar" value="2" c:identifier="ANNOTATION_FLAG_BAR"/>+ </bitfield> <callback name="Callback" c:type="AnnotationCallback"> <doc xml:whitespace="preserve">This is a callback.</doc> <return-value transfer-ownership="none">diff --git a/tests/scanner/annotation.h b/tests/scanner/annotation.hindex ef05ddb..9559e40 100644--- a/tests/scanner/annotation.h+++ b/tests/scanner/annotation.h@@ -4,6 +4,15 @@ #include <glib-object.h> /**+ * AnnotationBitfield: (type bitfield)+ **/+typedef enum+{+ ANNOTATION_FLAG_FOO = 1,+ ANNOTATION_FLAG_BAR = 2+} AnnotationBitfield;++/** * AnnotationCallback: * @in: (in) (transfer none): array of ints *-- tg: (4b94812..) t/fix-enum-type-annotation (depends on: master)