summaryrefslogtreecommitdiff
path: root/giscanner/girwriter.py
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-08-19 21:55:26 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-08-19 21:55:26 +0000
commit4a8757aa34ec96b8ec6c887bb9442ebf1e752b0e (patch)
tree4cb3f80fc39089ebe1c772222ade311d40c34b50 /giscanner/girwriter.py
parent69f58876f3a0fbefb00325fc75d2a3f502620560 (diff)
downloadgobject-introspection-4a8757aa34ec96b8ec6c887bb9442ebf1e752b0e.tar.gz
Add basic support for union, base the code much on Struct. Add a testcase.
2008-08-19 Johan Dahlin <johan@gnome.org> * giscanner/ast.py: * giscanner/girwriter.py: * giscanner/glibtransformer.py: * giscanner/transformer.py: * tests/scanner/Foo-expected.gir: Add basic support for union, base the code much on Struct. Add a testcase. svn path=/trunk/; revision=404
Diffstat (limited to 'giscanner/girwriter.py')
-rw-r--r--giscanner/girwriter.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index 996893e3..a5e8ffc2 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -21,7 +21,7 @@
from __future__ import with_statement
from .ast import (Callback, Class, Enum, Function, Interface, Member,
- Sequence, Struct, Alias)
+ Sequence, Struct, Alias, Union)
from .glibast import (GLibBoxed, GLibEnum, GLibEnumMember,
GLibFlags, GLibObject, GLibInterface)
from .xmlwriter import XMLWriter
@@ -62,6 +62,8 @@ class GIRWriter(XMLWriter):
self._write_callback(node)
elif isinstance(node, Struct):
self._write_record(node)
+ elif isinstance(node, Union):
+ self._write_union(node)
elif isinstance(node, Member):
# FIXME: atk_misc_instance singleton
pass
@@ -227,6 +229,16 @@ class GIRWriter(XMLWriter):
else:
self.write_tag('record', attrs)
+ def _write_union(self, union):
+ attrs = [('name', union.name),
+ ('c:type', union.symbol)]
+ if union.fields:
+ with self.tagcontext('union', attrs):
+ for field in union.fields:
+ self._write_field(field)
+ else:
+ self.write_tag('union', attrs)
+
def _write_field(self, field):
# FIXME: Just function
if isinstance(field, (Callback, Function)):