diff options
author | Johan Dahlin <jdahlin@async.com.br> | 2008-05-31 23:20:56 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2008-05-31 23:20:56 +0000 |
commit | 04e4dcd86e2318f637c0e9c01cea1da4476c9a58 (patch) | |
tree | 7c0fa93890808bc33e67a0376268f56019b0e624 /giscanner/transformer.py | |
parent | 7a8c0642f5cc6e80e873f239984beeab7b9ba6ff (diff) | |
download | gobject-introspection-04e4dcd86e2318f637c0e9c01cea1da4476c9a58.tar.gz |
Add a new source type enum for member. Use __repr__ for improved debugging
2008-05-31 Johan Dahlin <jdahlin@async.com.br>
* giscanner/scannerparser.y:
* giscanner/sourcescanner.h:
* giscanner/sourcescanner.py:
Add a new source type enum for member.
Use __repr__ for improved debugging
* giscanner/girparser.py:
Ignore some more
* giscanner/transformer.py:
Improve parsing of struct members.
* tests/parser/foo-object.h:
Add a new testcase
svn path=/trunk/; revision=281
Diffstat (limited to 'giscanner/transformer.py')
-rw-r--r-- | giscanner/transformer.py | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/giscanner/transformer.py b/giscanner/transformer.py index 6622602c..f1dd2fa1 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -22,11 +22,11 @@ from giscanner.ast import (Callback, Enum, Function, Namespace, Member, Parameter, Return, Sequence, Struct, Type) from giscanner.sourcescanner import ( SourceSymbol, ctype_name, symbol_type_name, CTYPE_POINTER, - CTYPE_BASIC_TYPE, CTYPE_UNION, + CTYPE_BASIC_TYPE, CTYPE_UNION, CTYPE_ARRAY, CTYPE_TYPEDEF, CTYPE_VOID, CTYPE_BASIC_TYPE, CTYPE_ENUM, CTYPE_FUNCTION, CTYPE_STRUCT, CSYMBOL_TYPE_FUNCTION, CSYMBOL_TYPE_TYPEDEF, CSYMBOL_TYPE_STRUCT, CSYMBOL_TYPE_ENUM, - CSYMBOL_TYPE_UNION, CSYMBOL_TYPE_OBJECT) + CSYMBOL_TYPE_UNION, CSYMBOL_TYPE_OBJECT, CSYMBOL_TYPE_MEMBER) class Transformer(object): @@ -113,13 +113,14 @@ class Transformer(object): return self._create_enum(symbol) elif stype == CSYMBOL_TYPE_OBJECT: return self._create_object(symbol) + elif stype == CSYMBOL_TYPE_MEMBER: + return self._create_member(symbol) elif stype == CSYMBOL_TYPE_UNION: # Unions are not supported pass else: raise NotImplementedError( - 'Transformer: unhandled symbol: %r of type %s' - % (symbol.ident, symbol_type_name(stype))) + 'Transformer: unhandled symbol: %r' % (symbol,)) def _create_enum(self, symbol): members = [] @@ -131,7 +132,7 @@ class Transformer(object): return Enum(name, symbol.ident, members) def _create_object(self, symbol): - return Member(symbol.ident, symbol.base_type.name) + return self._create_member(symbol) def _create_function(self, symbol): directives = symbol.directives() @@ -140,7 +141,6 @@ class Transformer(object): directives.get('return', [])) name = self._remove_prefix(symbol.ident) name = self._strip_namespace_func(name) - return Function(name, return_, parameters, symbol.ident) def _create_source_type(self, source_type): @@ -152,11 +152,13 @@ class Transformer(object): value = source_type.name elif source_type.type == CTYPE_TYPEDEF: value = source_type.name + elif source_type.type == CTYPE_ARRAY: + return self._create_source_type(source_type.base_type) elif source_type.type == CTYPE_POINTER: value = self._create_source_type(source_type.base_type) + '*' else: - print 'BUILDER: Unhandled source type %s' % ( - ctype_name(source_type.type),) + print 'TRANSFORMER: Unhandled source type %r' % ( + source_type,) value = '???' return value @@ -167,6 +169,15 @@ class Transformer(object): yield self._create_parameter( child, options.get(child.ident, [])) + def _create_member(self, symbol): + ctype = symbol.base_type.type + if (ctype == CTYPE_POINTER and + symbol.base_type.base_type.type == CTYPE_FUNCTION): + node = self._create_callback(symbol) + else: + node = Member(symbol.ident, self._create_source_type(symbol)) + return node + def _create_typedef(self, symbol): ctype = symbol.base_type.type if (ctype == CTYPE_POINTER and @@ -179,7 +190,8 @@ class Transformer(object): elif ctype in (CTYPE_TYPEDEF, CTYPE_POINTER, CTYPE_BASIC_TYPE, - CTYPE_UNION): + CTYPE_UNION, + CTYPE_VOID): return else: raise NotImplementedError( @@ -241,13 +253,7 @@ class Transformer(object): struct = Struct(name, symbol.ident) for child in symbol.base_type.child_list: - # FIXME: This is obviously wrong, we're sending in data - # of the wrong type to _traverse_one - try: - field = self._traverse_one(child, child.base_type.type) - except NotImplementedError: - continue - + field = self._traverse_one(child) if field: struct.fields.append(field) |