diff options
author | Johan Dahlin <jdahlin@async.com.br> | 2009-01-12 23:24:01 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2009-01-12 23:24:01 +0000 |
commit | 9256e916164ec557ed66f92a0d6d95bb286cdf8b (patch) | |
tree | e481541d55ca9eafb63684f2ee41d48096b8eac5 /giscanner/girwriter.py | |
parent | e81c4681cc88a00fcd841c5a68d860d3714b55d7 (diff) | |
download | gobject-introspection-9256e916164ec557ed66f92a0d6d95bb286cdf8b.tar.gz |
Bug 563591 – Flags not recognized when there is no introspection data
2009-01-12 Johan Dahlin <jdahlin@async.com.br>
Bug 563591 – Flags not recognized when there is no introspection data
* giscanner/ast.py:
* giscanner/girwriter.py:
* giscanner/giscannermodule.c (type_get_is_bitfield):
* giscanner/glibast.py:
* giscanner/glibtransformer.py:
* giscanner/scannerparser.y:
* giscanner/sourcescanner.c (gi_source_type_copy):
* giscanner/sourcescanner.h:
* giscanner/sourcescanner.py:
* giscanner/transformer.py:
* tests/scanner/foo-1.0-expected.gir:
* tests/scanner/foo-1.0-expected.tgir:
* tests/scanner/foo.h:
Large parts of this patch was done by Jürg Billeter.
svn path=/trunk/; revision=1025
Diffstat (limited to 'giscanner/girwriter.py')
-rw-r--r-- | giscanner/girwriter.py | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py index f82a73e5..e72b0289 100644 --- a/giscanner/girwriter.py +++ b/giscanner/girwriter.py @@ -23,8 +23,9 @@ from __future__ import with_statement import os from ctypes.util import find_library -from .ast import (Callback, Class, Constant, Enum, Function, Interface, Member, - Array, Struct, Alias, Union, List, Map, Varargs) +from .ast import (Alias, Array, Bitfield, Callback, Class, Constant, Enum, + Function, Interface, List, Map, Member, Struct, Union, + Varargs) from .glibast import (GLibBoxed, GLibEnum, GLibEnumMember, GLibFlags, GLibObject, GLibInterface) from .xmlwriter import XMLWriter @@ -72,6 +73,8 @@ class GIRWriter(XMLWriter): self._write_function(node) elif isinstance(node, Enum): self._write_enum(node) + elif isinstance(node, Bitfield): + self._write_bitfield(node) elif isinstance(node, (Class, Interface)): self._write_class(node) elif isinstance(node, Callback): @@ -221,20 +224,30 @@ class GIRWriter(XMLWriter): attrs = [('name', enum.name)] self._append_version(enum, attrs) self._append_deprecated(enum, attrs) - if isinstance(enum, GLibFlags): - tag_name = 'bitfield' - else: - tag_name = 'enumeration' - if isinstance(enum, GLibEnum) or isinstance(enum, GLibFlags): + if isinstance(enum, GLibEnum): attrs.extend([('glib:type-name', enum.type_name), ('glib:get-type', enum.get_type), ('c:type', enum.ctype)]) else: attrs.append(('c:type', enum.symbol)) - with self.tagcontext(tag_name, attrs): + with self.tagcontext('enumeration', attrs): for member in enum.members: self._write_member(member) + def _write_bitfield(self, bitfield): + attrs = [('name', bitfield.name)] + self._append_version(bitfield, attrs) + self._append_deprecated(bitfield, attrs) + if isinstance(bitfield, GLibFlags): + attrs.extend([('glib:type-name', bitfield.type_name), + ('glib:get-type', bitfield.get_type), + ('c:type', bitfield.ctype)]) + else: + attrs.append(('c:type', bitfield.symbol)) + with self.tagcontext('bitfield', attrs): + for member in bitfield.members: + self._write_member(member) + def _write_member(self, member): attrs = [('name', member.name), ('value', str(member.value)), |