diff options
author | Jürg Billeter <j@bitron.ch> | 2008-06-05 11:45:46 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2008-06-05 11:45:46 +0000 |
commit | 4bd7483b630c9efc3ac509d241fd8a4946e1ee4d (patch) | |
tree | c12f8e6bfc9d44f72e0942887ec1f6c04d6b9916 | |
parent | ecd9197acc471fcb4dba6d06ff51e49972a83710 (diff) | |
download | gobject-introspection-4bd7483b630c9efc3ac509d241fd8a4946e1ee4d.tar.gz |
Use <type> element for field types Update testcase
2008-06-05 Jürg Billeter <j@bitron.ch>
* giscanner/ast.py:
* giscanner/girwriter.py:
* giscanner/transformer.py:
Use <type> element for field types
* tests/parser/Foo-expected.gir:
Update testcase
svn path=/trunk/; revision=285
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | giscanner/ast.py | 10 | ||||
-rw-r--r-- | giscanner/girwriter.py | 6 | ||||
-rw-r--r-- | giscanner/transformer.py | 7 | ||||
-rw-r--r-- | tests/parser/Foo-expected.gir | 24 |
5 files changed, 44 insertions, 12 deletions
@@ -1,3 +1,12 @@ +2008-06-05 Jürg Billeter <j@bitron.ch> + + * giscanner/ast.py: + * giscanner/girwriter.py: + * giscanner/transformer.py: + Use <type> element for field types + * tests/parser/Foo-expected.gir: + Update testcase + 2008-06-04 Johan Dahlin <jdahlin@async.com.br> * giscanner/glibtransformer.py: diff --git a/giscanner/ast.py b/giscanner/ast.py index be3962d8..8f40d63f 100644 --- a/giscanner/ast.py +++ b/giscanner/ast.py @@ -151,6 +151,16 @@ class Struct(Node): self.symbol = symbol +class Field(Node): + def __init__(self, name, typenode, symbol): + Node.__init__(self, name) + self.type = typenode + self.symbol = symbol + + def __repr__(self): + return 'Field(%r, %r)' % (self.name, self.type) + + class Return(Node): def __init__(self, rtype): Node.__init__(self) diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py index f26373b3..58eeccd0 100644 --- a/giscanner/girwriter.py +++ b/giscanner/girwriter.py @@ -218,9 +218,9 @@ class GIRWriter(XMLWriter): self._write_callback(field) return - attrs = [('name', field.name), - ('value', str(field.value))] - self.write_tag('field', attrs) + attrs = [('name', field.name)] + with self.tagcontext('field', attrs): + self._write_type(field.type) def _write_signal(self, signal): attrs = [('name', signal.name)] diff --git a/giscanner/transformer.py b/giscanner/transformer.py index 3047d528..7562e157 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -19,7 +19,8 @@ # from giscanner.ast import (Callback, Enum, Function, Namespace, Member, - Parameter, Return, Sequence, Struct, Type) + Parameter, Return, Sequence, Struct, Field, + Type) from giscanner.sourcescanner import ( SourceSymbol, ctype_name, symbol_type_name, CTYPE_POINTER, CTYPE_BASIC_TYPE, CTYPE_UNION, CTYPE_ARRAY, @@ -179,8 +180,8 @@ class Transformer(object): symbol.base_type.base_type.type == CTYPE_FUNCTION): node = self._create_callback(symbol) else: - node = Member(symbol.ident, self._create_source_type(symbol), - symbol.ident) + ftype = self._create_type(symbol.base_type) + node = Field(symbol.ident, ftype, symbol.ident) return node def _create_typedef(self, symbol): diff --git a/tests/parser/Foo-expected.gir b/tests/parser/Foo-expected.gir index 5dfd41f2..c00079d0 100644 --- a/tests/parser/Foo-expected.gir +++ b/tests/parser/Foo-expected.gir @@ -298,15 +298,27 @@ </parameters> </callback> <record name="FooStruct" c:type="FooStruct"> - <field name="priv" value="FooStructPrivate*"/> - <field name="member" value="int"/> + <field name="priv"> + <type name="FooStructPrivate*" c:type="FooStructPrivate*"/> + </field> + <field name="member"> + <type name="int" c:type="int"/> + </field> </record> <record name="FooStructPrivate" c:type="FooStructPrivate"/> <record name="FooRectangle" c:type="FooRectangle"> - <field name="x" value="gint"/> - <field name="y" value="gint"/> - <field name="width" value="gint"/> - <field name="height" value="gint"/> + <field name="x"> + <type name="gint" c:type="gint"/> + </field> + <field name="y"> + <type name="gint" c:type="gint"/> + </field> + <field name="width"> + <type name="gint" c:type="gint"/> + </field> + <field name="height"> + <type name="gint" c:type="gint"/> + </field> </record> </namespace> </repository> |