summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2008-06-05 11:45:46 +0000
committerJürg Billeter <juergbi@src.gnome.org>2008-06-05 11:45:46 +0000
commit4bd7483b630c9efc3ac509d241fd8a4946e1ee4d (patch)
treec12f8e6bfc9d44f72e0942887ec1f6c04d6b9916
parentecd9197acc471fcb4dba6d06ff51e49972a83710 (diff)
downloadgobject-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--ChangeLog9
-rw-r--r--giscanner/ast.py10
-rw-r--r--giscanner/girwriter.py6
-rw-r--r--giscanner/transformer.py7
-rw-r--r--tests/parser/Foo-expected.gir24
5 files changed, 44 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index e3c6bd1c..5af8e82f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>