diff options
author | Tommi Komulainen <tko@src.gnome.org> | 2008-10-23 17:40:29 +0000 |
---|---|---|
committer | Tommi Komulainen <tko@src.gnome.org> | 2008-10-23 17:40:29 +0000 |
commit | 777eb4f0af3ef16ff4e3206c4ca4901160082e3a (patch) | |
tree | ba87b45017e16ecb2ed06c87671c76513a0951f5 | |
parent | 1389b30ba32e7b0e1ee0ddeca9e43b4dc7bbe17f (diff) | |
download | gobject-introspection-777eb4f0af3ef16ff4e3206c4ca4901160082e3a.tar.gz |
deduce transfer-ownership from GTypes
* giscanner/glibtransformer.py (_adjust_transfer):
* tests/scanner/foo-1.0-expected.gir:
* tests/scanner/foo-1.0-expected.tgir: deduce
transfer-ownership from GTypes
svn path=/trunk/; revision=795
-rw-r--r-- | giscanner/glibtransformer.py | 14 | ||||
-rw-r--r-- | tests/scanner/foo-1.0-expected.gir | 6 | ||||
-rw-r--r-- | tests/scanner/foo-1.0-expected.tgir | 2 |
3 files changed, 18 insertions, 4 deletions
diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py index c2c07754..2f315451 100644 --- a/giscanner/glibtransformer.py +++ b/giscanner/glibtransformer.py @@ -781,6 +781,7 @@ class GLibTransformer(object): def _adjust_transfer(self, param): # Do GLib/GObject-specific type transformations here + transfer = None is_object = None if hasattr(param.type, '_gtype'): ftype = cgobject.type_fundamental(param.type._gtype) @@ -789,6 +790,17 @@ class GLibTransformer(object): is_object = ftype in [cgobject.TYPE_OBJECT, cgobject.TYPE_INTERFACE] + if ftype in [cgobject.TYPE_OBJECT, + cgobject.TYPE_INTERFACE, + cgobject.TYPE_STRING, + cgobject.TYPE_BOXED, + cgobject.TYPE_PARAM]: + transfer = 'full' + else: + # if type is a cgobject.TYPE_POINTER we could require direction + # and transfer-ownership annotations + transfer = 'none' + if is_object is None: is_object = (param.type.name == 'GObject.Object' or (self._namespace_name == 'GObject' and @@ -802,6 +814,8 @@ class GLibTransformer(object): if param.transfer is None or param.transfer_inferred: if is_out and is_object: param.transfer = 'full' + elif transfer is not None: + param.transfer = transfer def _adjust_throws(self, func): if func.parameters == []: diff --git a/tests/scanner/foo-1.0-expected.gir b/tests/scanner/foo-1.0-expected.gir index bf13138b..762c648f 100644 --- a/tests/scanner/foo-1.0-expected.gir +++ b/tests/scanner/foo-1.0-expected.gir @@ -153,14 +153,14 @@ </parameters> </callback> <glib:signal name="signal"> - <return-value> + <return-value transfer-ownership="full"> <type name="utf8" c:type="gchararray"/> </return-value> <parameters> - <parameter name="object"> + <parameter name="object" transfer-ownership="full"> <type name="GObject.Object" c:type="GObject"/> </parameter> - <parameter name="p0"> + <parameter name="p0" transfer-ownership="none"> <type name="any" c:type="gpointer"/> </parameter> </parameters> diff --git a/tests/scanner/foo-1.0-expected.tgir b/tests/scanner/foo-1.0-expected.tgir index becf0147..2399efd1 100644 --- a/tests/scanner/foo-1.0-expected.tgir +++ b/tests/scanner/foo-1.0-expected.tgir @@ -101,7 +101,7 @@ <type name="utf8"/> </return-value> <parameters> - <parameter name="object"> + <parameter name="object" transfer-ownership="full"> <type name="GObject.Object"/> </parameter> <parameter name="p0"> |