summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-04-30 01:48:36 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-04-30 01:48:36 +0000
commit8b449c3170c3e5cc0ce477de172913558ee7a9e1 (patch)
treef665bbe3918fbd258de26b2882198a481fd54cdb
parentbc5755c7746752978dd34cad7454a79e2ff71b35 (diff)
downloadgobject-introspection-8b449c3170c3e5cc0ce477de172913558ee7a9e1.tar.gz
Use transfer-ownership everywhere, to mark ownership/calle/caller etc.
2008-04-29 Johan Dahlin <johan@gnome.org> * giscanner/ast.py: * giscanner/girwriter.py: * giscanner/transformer.py: * tests/parser/Foo-expected.gir: * TODO: Use transfer-ownership everywhere, to mark ownership/calle/caller etc. svn path=/trunk/; revision=260
-rw-r--r--ChangeLog9
-rw-r--r--TODO1
-rw-r--r--giscanner/ast.py5
-rw-r--r--giscanner/girwriter.py17
-rw-r--r--giscanner/transformer.py6
-rw-r--r--tests/parser/Foo-expected.gir12
6 files changed, 34 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index ea3bd0bb..ff93deae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-04-29 Johan Dahlin <johan@gnome.org>
+
+ * giscanner/ast.py:
+ * giscanner/girwriter.py:
+ * giscanner/transformer.py:
+ * tests/parser/Foo-expected.gir:
+ * TODO:
+ Use transfer-ownership everywhere, to mark ownership/calle/caller etc.
+
2008-04-29 Johan Dahlin <jdahlin@async.com.br>
* Makefile.am:
diff --git a/TODO b/TODO
index 5bb60548..d258667d 100644
--- a/TODO
+++ b/TODO
@@ -8,7 +8,6 @@ XML format
- For argument/return values etc, store only c:identifier in the
<class/> definition. Requires a link to the references type in the
Type node.
-- c:owner -> ownership-transfer=yes/no
- replace gidl/gdk-pixbuf.gidl with something generated from headers,
verify all information is available, possible to write
diff --git a/giscanner/ast.py b/giscanner/ast.py
index fbe47572..86f9aaf0 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -55,7 +55,7 @@ class Parameter(Node):
Node.__init__(self, name)
self.type = Type(type_name)
self.direction = 'in'
- self.transfer = 'none'
+ self.transfer = False
def __repr__(self):
return 'Parameter(%r, %r)' % (self.name, self.type)
@@ -94,7 +94,7 @@ class Return(Node):
def __init__(self, type_name):
Node.__init__(self)
self.type = Type(type_name)
- self.transfer = 'none'
+ self.transfer = False
def __repr__(self):
return 'Return(%r)' % (self.type,)
@@ -167,3 +167,4 @@ class Sequence(Type):
def __init__(self, name, element_type):
Type.__init__(self, name)
self.element_type = element_type
+ self.transfer = False
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index 5127fa1b..c93dd623 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -79,7 +79,12 @@ class GIRWriter(XMLWriter):
def _write_return_type(self, return_):
if not return_:
return
- with self.tagcontext('return-value'):
+
+ attrs = []
+ if return_.transfer:
+ attrs.append(('transfer-ownership',
+ str(int(return_.transfer))))
+ with self.tagcontext('return-value', attrs):
if isinstance(return_.type, Sequence):
self._write_sequence(return_.type)
else:
@@ -96,8 +101,9 @@ class GIRWriter(XMLWriter):
attrs = [('name', parameter.name)]
if parameter.direction != 'in':
attrs.append(('direction', parameter.direction))
- if parameter.transfer != 'none':
- attrs.append(('transfer', parameter.transfer))
+ if parameter.transfer:
+ attrs.append(('transfer-ownership',
+ str(int(parameter.transfer))))
with self.tagcontext('parameter', attrs):
self._write_type(parameter.type)
@@ -111,7 +117,10 @@ class GIRWriter(XMLWriter):
self.write_tag('type', attrs)
def _write_sequence(self, sequence):
- attrs = [('c:owner', sequence.cowner)]
+ attrs = []
+ if sequence.transfer:
+ attrs.append(('transfer-ownership',
+ str(int(sequence.transfer))))
with self.tagcontext('sequence', attrs):
attrs = [('c:identifier', sequence.element_type)]
self.write_tag('element-type', attrs)
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index 5382b6ad..d3e7647d 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -137,7 +137,7 @@ class Transformer(object):
elif option == 'out':
param.direction = 'out'
elif option == 'callee-owns':
- param.transfer = 'full'
+ param.transfer = True
else:
print 'Unhandled parameter annotation option: %s' % (
option,)
@@ -150,12 +150,12 @@ class Transformer(object):
return_ = Return(return_type)
for option in options:
if option == 'caller-owns':
- return_.transfer = 'full'
+ return_.transfer = True
elif option.startswith('seq '):
value, element_options = option[3:].split(None, 2)
element_type = self._parse_type_annotation(value)
seq = Sequence(return_type, element_type)
- seq.cowner = 'caller'
+ seq.transfer = True
return_.type = seq
else:
print 'Unhandled parameter annotation option: %s' % (
diff --git a/tests/parser/Foo-expected.gir b/tests/parser/Foo-expected.gir
index 85599d8a..6284a081 100644
--- a/tests/parser/Foo-expected.gir
+++ b/tests/parser/Foo-expected.gir
@@ -57,7 +57,7 @@
</parameters>
</method>
<method name="create_object" c:identifier="foo_object_create_object">
- <return-value>
+ <return-value transfer-ownership="1">
<type name="GLib.Object" c:type="GObject*"/>
</return-value>
<parameters>
@@ -126,7 +126,7 @@
<parameter name="object">
<type name="Object" c:type="FooObject*"/>
</parameter>
- <parameter name="toown" transfer="full">
+ <parameter name="toown" transfer-ownership="1">
<type name="GLib.Object" c:type="GObject*"/>
</parameter>
</parameters>
@@ -139,17 +139,17 @@
<parameter name="object">
<type name="Object" c:type="FooObject*"/>
</parameter>
- <parameter name="toown1" transfer="full">
+ <parameter name="toown1" transfer-ownership="1">
<type name="GLib.Object" c:type="GObject*"/>
</parameter>
- <parameter name="toown2" transfer="full">
+ <parameter name="toown2" transfer-ownership="1">
<type name="GLib.Object" c:type="GObject*"/>
</parameter>
</parameters>
</method>
<method name="get_strings" c:identifier="foo_object_get_strings">
<return-value>
- <sequence c:owner="caller">
+ <sequence transfer-ownership="1">
<element-type c:identifier="char*"/>
</sequence>
</return-value>
@@ -161,7 +161,7 @@
</method>
<method name="get_objects" c:identifier="foo_object_get_objects">
<return-value>
- <sequence c:owner="caller">
+ <sequence transfer-ownership="1">
<element-type c:identifier="FooObject*"/>
</sequence>
</return-value>