[gobject-introspection: 2/2] Bug 573332 - Allow annotation of enums as bitfield
- From: Andreas Rottmann <rotty src gnome org>
- To: svn-commits-list gnome org
- Subject: [gobject-introspection: 2/2] Bug 573332 - Allow annotation of enums as bitfield
- Date: Wed, 4 Mar 2009 10:21:52 -0500 (EST)
commit b8e3172424ba956a0d18eae8deb305310b2cab74
Author: Andreas Rottmann <a rottmann gmx at>
Date: Wed Mar 4 15:59:28 2009 +0100
Bug 573332 - Allow annotation of enums as bitfields
Add support for a `(type bitfield)' annotation for enums.
Signed-off-by: Andreas Rottmann <a rottmann gmx at>
---
gir/glib-2.0.c | 4 +++-
giscanner/annotationparser.py | 7 +++++++
tests/scanner/utility-1.0-expected.gir | 10 +++++-----
tests/scanner/utility-1.0-expected.tgir | 10 +++++-----
tests/scanner/utility.c | 4 ++++
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 ec98c4d..0fb1c68 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 b831f93..35300b0 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 7ff6ca5..0ca72cb 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 46ba292..2653584 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 756de17..a54afad 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 b493a67..cad93ff 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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]