summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommi Komulainen <tko@src.gnome.org>2008-10-23 17:40:29 +0000
committerTommi Komulainen <tko@src.gnome.org>2008-10-23 17:40:29 +0000
commit777eb4f0af3ef16ff4e3206c4ca4901160082e3a (patch)
treeba87b45017e16ecb2ed06c87671c76513a0951f5
parent1389b30ba32e7b0e1ee0ddeca9e43b4dc7bbe17f (diff)
downloadgobject-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.py14
-rw-r--r--tests/scanner/foo-1.0-expected.gir6
-rw-r--r--tests/scanner/foo-1.0-expected.tgir2
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">