All pastes #1955128 Raw Edit

Fix (type bitfield)'

public diff v1 · immutable
#1955128 ·published 2010-10-05 20:39 UTC
rendered paste body
From: 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)