diff options
author | Andreas Rottmann <a.rottmann@gmx.at> | 2010-10-05 23:49:33 +0200 |
---|---|---|
committer | Andreas Rottmann <a.rottmann@gmx.at> | 2010-10-05 23:49:33 +0200 |
commit | d15e386c8e10dd6b645a444e29cc053100089a07 (patch) | |
tree | 295caab07108aecfc7d6c8b774b02cea4745b89b | |
parent | 4b94812bbfff446ac7d1684d67607be6a7cab4ec (diff) | |
download | gobject-introspection-d15e386c8e10dd6b645a444e29cc053100089a07.tar.gz |
Apply `(type bitfield)' annotations for enums
Previously, such annotations would be ignored.
-rw-r--r-- | giscanner/maintransformer.py | 11 | ||||
-rw-r--r-- | tests/scanner/Annotation-1.0-expected.gir | 4 | ||||
-rw-r--r-- | tests/scanner/annotation.h | 9 |
3 files changed, 22 insertions, 2 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index 89f7ff65..9053abf4 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.gir index 050d888b..92d4ff21 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.h index ef05ddb2..9559e400 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 * |