diff options
author | Johan Dahlin <johan@gnome.org> | 2008-04-30 01:48:36 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2008-04-30 01:48:36 +0000 |
commit | 8b449c3170c3e5cc0ce477de172913558ee7a9e1 (patch) | |
tree | f665bbe3918fbd258de26b2882198a481fd54cdb | |
parent | bc5755c7746752978dd34cad7454a79e2ff71b35 (diff) | |
download | gobject-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-- | ChangeLog | 9 | ||||
-rw-r--r-- | TODO | 1 | ||||
-rw-r--r-- | giscanner/ast.py | 5 | ||||
-rw-r--r-- | giscanner/girwriter.py | 17 | ||||
-rw-r--r-- | giscanner/transformer.py | 6 | ||||
-rw-r--r-- | tests/parser/Foo-expected.gir | 12 |
6 files changed, 34 insertions, 16 deletions
@@ -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: @@ -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> |