summaryrefslogtreecommitdiff
path: root/giscanner/girwriter.py
diff options
context:
space:
mode:
authorJohan Dahlin <jdahlin@async.com.br>2009-01-12 23:24:01 +0000
committerJohan Dahlin <johan@src.gnome.org>2009-01-12 23:24:01 +0000
commit9256e916164ec557ed66f92a0d6d95bb286cdf8b (patch)
treee481541d55ca9eafb63684f2ee41d48096b8eac5 /giscanner/girwriter.py
parente81c4681cc88a00fcd841c5a68d860d3714b55d7 (diff)
downloadgobject-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.py29
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)),