summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog21
-rw-r--r--girepository/girparser.c26
-rw-r--r--giscanner/girwriter.py13
-rw-r--r--giscanner/transformer.py4
-rw-r--r--tests/boxed.gir16
-rw-r--r--tests/invoke/testfns-1.0.gir30
-rw-r--r--tests/object.gir16
-rw-r--r--tests/scanner/DrawableAdditions.xml2
-rw-r--r--tests/scanner/GtkFrob-1.0-expected.tgir2
-rw-r--r--tests/scanner/annotation-1.0-expected.tgir48
-rw-r--r--tests/scanner/drawable-1.0-expected.tgir12
-rw-r--r--tests/scanner/drawable-injected-1.0-expected.gir2
-rw-r--r--tests/scanner/drawable-injected-1.0-expected.tgir14
-rw-r--r--tests/scanner/foo-1.0-expected.tgir98
-rw-r--r--tools/generate.c27
15 files changed, 177 insertions, 154 deletions
diff --git a/ChangeLog b/ChangeLog
index e1e6300b..bc433d60 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,26 @@
2008-10-23 Tommi Komulainen <tommi.komulainen@iki.fi>
+ Bug 556739 – transfer-ownership attribute should be mandatory in .gir
+
+ * girepository/girparser.c (parse_param_transfer):
+ * giscanner/transformer.py (_create_parameter, _create_return):
+ * giscanner/girwriter.py (_write_return, _write_parameter):
+ * tools/generate.c (write_callable_info): always write and
+ require "transfer-ownership" for return-values and parameters
+
+ * tests/boxed.gir:
+ * tests/invoke/testfns-1.0.gir:
+ * tests/object.gir:
+ * tests/scanner/DrawableAdditions.xml:
+ * tests/scanner/GtkFrob-1.0-expected.tgir:
+ * tests/scanner/annotation-1.0-expected.tgir:
+ * tests/scanner/drawable-1.0-expected.tgir:
+ * tests/scanner/drawable-injected-1.0-expected.gir:
+ * tests/scanner/drawable-injected-1.0-expected.tgir:
+ * tests/scanner/foo-1.0-expected.tgir: Updated
+
+2008-10-23 Tommi Komulainen <tommi.komulainen@iki.fi>
+
* giscanner/cgobject.py: build fundamental types same way as glib
* giscanner/glibtransformer.py (_type_from_gtype): record GType
diff --git a/girepository/girparser.c b/girepository/girparser.c
index b92bc548..b898db4f 100644
--- a/girepository/girparser.c
+++ b/girepository/girparser.c
@@ -660,31 +660,29 @@ start_function (GMarkupParseContext *context,
static void
parse_param_transfer (GIrNodeParam *param, const gchar *transfer)
{
- if (transfer && strcmp (transfer, "none") == 0)
+ if (transfer == NULL)
+ {
+ g_warning ("required attribute 'transfer-ownership' missing");
+ }
+ else if (strcmp (transfer, "none") == 0)
{
param->transfer = FALSE;
param->shallow_transfer = FALSE;
}
- else if (transfer && strcmp (transfer, "container") == 0)
+ else if (strcmp (transfer, "container") == 0)
{
param->transfer = FALSE;
param->shallow_transfer = TRUE;
}
- else
+ else if (strcmp (transfer, "full") == 0)
{
- if (transfer)
- {
- if (strcmp (transfer, "full") != 0)
- g_warning ("Unknown transfer %s", transfer);
- else
- param->transfer = TRUE;
- }
- else if (param->in && !param->out)
- param->transfer = FALSE;
- else
- param->transfer = TRUE;
+ param->transfer = TRUE;
param->shallow_transfer = FALSE;
}
+ else
+ {
+ g_warning ("Unknown transfer-ownership value: %s", transfer);
+ }
}
static gboolean
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index 7cac6210..5c8aa12b 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -124,10 +124,10 @@ class GIRWriter(XMLWriter):
if not return_:
return
+ assert return_.transfer is not None, return_
+
attrs = []
- if return_.transfer:
- attrs.append(('transfer-ownership',
- return_.transfer))
+ attrs.append(('transfer-ownership', return_.transfer))
with self.tagcontext('return-value', attrs):
self._write_type(return_.type)
@@ -139,14 +139,15 @@ class GIRWriter(XMLWriter):
self._write_parameter(parameter)
def _write_parameter(self, parameter):
+ assert parameter.transfer is not None, parameter
+
attrs = []
if parameter.name is not None:
attrs.append(('name', parameter.name))
if parameter.direction != 'in':
attrs.append(('direction', parameter.direction))
- if parameter.transfer:
- attrs.append(('transfer-ownership',
- parameter.transfer))
+ attrs.append(('transfer-ownership',
+ parameter.transfer))
if parameter.allow_none:
attrs.append(('allow-none', '1'))
with self.tagcontext('parameter', attrs):
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index 5d1bf6d1..6b0a5a3e 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -509,6 +509,8 @@ class Transformer(object):
print 'Unhandled parameter annotation option: %r' % (
option, )
self._handle_generic_param_options(param, options)
+
+ assert param.transfer is not None, param
return param
def _create_return(self, source_type, options=None):
@@ -527,6 +529,8 @@ class Transformer(object):
else:
print 'Unhandled return type annotation option: %r' % (
option, )
+
+ assert return_.transfer is not None, return_
return return_
def _create_const(self, symbol):
diff --git a/tests/boxed.gir b/tests/boxed.gir
index 806104c4..4d993283 100644
--- a/tests/boxed.gir
+++ b/tests/boxed.gir
@@ -15,14 +15,14 @@
<type name="uint32"/>
</field>
<method name="frob_boxed1" c:identifier="frob_boxed1">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="box">
+ <parameter name="box" transfer-ownership="none">
<type name="BoxedType1"/>
</parameter>
- <parameter name="w">
+ <parameter name="w" transfer-ownership="none">
<type name="GLib.List">
<type name="boxed2"/>
</type>
@@ -39,11 +39,11 @@
</parameters>
</method>
<method name="lart" c:identifier="lart">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="boolean"/>
</return-value>
<parameters>
- <parameter name="box">
+ <parameter name="box" transfer-ownership="none">
<type name="boxed2"/>
</parameter>
<parameter name="val" transfer-ownership="full" direction="inout">
@@ -53,14 +53,14 @@
</method>
</glib:boxed>
<function name="freefunc" c:identifier="freefunc" deprecated="1">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="boolean"/>
</return-value>
<parameters>
- <parameter name="v1">
+ <parameter name="v1" transfer-ownership="none">
<type name="int"/>
</parameter>
- <parameter name="val2">
+ <parameter name="val2" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
diff --git a/tests/invoke/testfns-1.0.gir b/tests/invoke/testfns-1.0.gir
index 97238b3c..5218fa87 100644
--- a/tests/invoke/testfns-1.0.gir
+++ b/tests/invoke/testfns-1.0.gir
@@ -5,72 +5,72 @@
xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
<namespace name="test" version="1.0">
<function name="test1" c:identifier="test1">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
- <parameter name="in" direction="in">
+ <parameter name="in" direction="in" transfer-ownership="none">
<type name="int" c:type="gint"/>
</parameter>
</parameters>
</function>
<function name="test2" c:identifier="test2">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="in" c:type="gint" direction="in">
+ <parameter name="in" c:type="gint" direction="in" transfer-ownership="none">
<type name="int" c:type="gint"/>
</parameter>
- <parameter name="out" c:type="gint" direction="out">
+ <parameter name="out" c:type="gint" direction="out" transfer-ownership="none">
<type name="int" c:type="gint"/>
</parameter>
</parameters>
</function>
<function name="test3" c:identifier="test3">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="inout" c:type="gint" direction="inout">
+ <parameter name="inout" c:type="gint" direction="inout" transfer-ownership="none">
<type name="int" c:type="gint"/>
</parameter>
</parameters>
</function>
<function name="test4" c:identifier="test4">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="blurb" direction="in">
+ <parameter name="blurb" direction="in" transfer-ownership="none">
<type name="utf8" c:type="gchar*"/>
</parameter>
</parameters>
</function>
<function name="test5" c:identifier="test5">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="blurb" direction="out" transfer-ownership="full">
<type name="utf8" c:type="gchar*"/>
</parameter>
- <parameter name="len" direction="out">
+ <parameter name="len" direction="out" transfer-ownership="none">
<type name="int" c:type="gint"/>
</parameter>
</parameters>
</function>
<function name="test6" c:identifier="test6">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
- <parameter name="list" direction="in">
+ <parameter name="list" direction="in" transfer-ownership="none">
<type name="GLib.List<int>*" c:type="GList*"/>
</parameter>
</parameters>
@@ -82,14 +82,14 @@
<type name="utf8" c:type="gchar*"/>
</return-value>
<parameters>
- <parameter name="list" direction="in">
+ <parameter name="list" direction="in" transfer-ownership="none">
<type name="GLib.List<utf8>*" c:type="GList*"/>
</parameter>
</parameters>
</function>
<function name="broken" c:identifier="broken">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
</function>
diff --git a/tests/object.gir b/tests/object.gir
index 21645f54..c7ad2924 100644
--- a/tests/object.gir
+++ b/tests/object.gir
@@ -12,41 +12,41 @@
<type name="int"/>
</property>
<glib:signal name="signal1" when="LAST">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="boolean"/>
</return-value>
<parameters>
- <parameter name="obj">
+ <parameter name="obj" transfer-ownership="none">
<type name="Object1"/>
</parameter>
</parameters>
</glib:signal>
<glib:signal name="signal2" when="FIRST" no-recurse="1" detailed="1" action="1" no-hooks="1">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="obj">
+ <parameter name="obj" transfer-ownership="none">
<type name="Object1"/>
</parameter>
</parameters>
</glib:signal>
<vfunc name="vfunc1" offset="20">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="Object2"/>
</return-value>
<parameters>
- <parameter name="param1">
+ <parameter name="param1" transfer-ownership="none">
<type name="Object1"/>
</parameter>
</parameters>
</vfunc>
<vfunc name="vfunc2" offset="24">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="Object2"/>
</return-value>
<parameters>
- <parameter name="param1">
+ <parameter name="param1" transfer-ownership="none">
<type name="Object1"/>
</parameter>
</parameters>
diff --git a/tests/scanner/DrawableAdditions.xml b/tests/scanner/DrawableAdditions.xml
index 6dd6e050..7589a172 100644
--- a/tests/scanner/DrawableAdditions.xml
+++ b/tests/scanner/DrawableAdditions.xml
@@ -4,7 +4,7 @@
xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
<inject path="namespace/class[@name='TestDrawable']">
<method name="get_width" c:identifier="girepo_test_drawable_get_width">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int" c:type="gint"/>
</return-value>
</method>
diff --git a/tests/scanner/GtkFrob-1.0-expected.tgir b/tests/scanner/GtkFrob-1.0-expected.tgir
index 81156ac7..85c527d6 100644
--- a/tests/scanner/GtkFrob-1.0-expected.tgir
+++ b/tests/scanner/GtkFrob-1.0-expected.tgir
@@ -7,7 +7,7 @@
<include name="GLib" version="2.0"/>
<namespace name="GtkFrob" version="1.0" shared-library="gtkfrob">
<function name="language_manager_get_default" c:identifier="gtk_frob_language_manager_get_default">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
</function>
diff --git a/tests/scanner/annotation-1.0-expected.tgir b/tests/scanner/annotation-1.0-expected.tgir
index 6910e262..0e4c6557 100644
--- a/tests/scanner/annotation-1.0-expected.tgir
+++ b/tests/scanner/annotation-1.0-expected.tgir
@@ -8,11 +8,11 @@
<include name="GLib" version="2.0"/>
<namespace name="annotation" version="1.0" shared-library="annotation">
<callback name="Callback">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
- <parameter name="in">
+ <parameter name="in" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
@@ -24,7 +24,7 @@
</type>
</return-value>
<parameters>
- <parameter name="in">
+ <parameter name="in" transfer-ownership="none">
<type name="GLib.List">
<type name="utf8"/>
</type>
@@ -36,12 +36,12 @@
<type name="GObject.Object"/>
</field>
<method name="method" c:identifier="annotation_object_method">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
</method>
<method name="out" c:identifier="annotation_object_out">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
@@ -51,12 +51,12 @@
</parameters>
</method>
<method name="create_object" c:identifier="annotation_object_create_object">
- <return-value>
+ <return-value transfer-ownership="full">
<type name="GObject.Object"/>
</return-value>
</method>
<method name="allow_none" c:identifier="annotation_object_allow_none">
- <return-value>
+ <return-value transfer-ownership="full">
<type name="GObject.Object"/>
</return-value>
<parameters>
@@ -66,12 +66,12 @@
</parameters>
</method>
<method name="notrans" c:identifier="annotation_object_notrans">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="GObject.Object"/>
</return-value>
</method>
<method name="inout" c:identifier="annotation_object_inout">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
@@ -81,7 +81,7 @@
</parameters>
</method>
<method name="inout2" c:identifier="annotation_object_inout2">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
@@ -91,7 +91,7 @@
</parameters>
</method>
<method name="inout3" c:identifier="annotation_object_inout3">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
@@ -101,17 +101,17 @@
</parameters>
</method>
<method name="in" c:identifier="annotation_object_in">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
- <parameter name="inarg">
+ <parameter name="inarg" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
</method>
<method name="calleeowns" c:identifier="annotation_object_calleeowns">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
@@ -121,14 +121,14 @@
</parameters>
</method>
<method name="calleesowns" c:identifier="annotation_object_calleesowns">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
<parameter name="toown1" transfer-ownership="full" direction="out">
<type name="GObject.Object"/>
</parameter>
- <parameter name="toown2" direction="out">
+ <parameter name="toown2" transfer-ownership="none" direction="out">
<type name="GObject.Object"/>
</parameter>
</parameters>
@@ -148,11 +148,11 @@
</return-value>
</method>
<method name="use_buffer" c:identifier="annotation_object_use_buffer">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="bytes">
+ <parameter name="bytes" transfer-ownership="none">
<array zero-terminated="1">
<type name="uint8"/>
</array>
@@ -160,11 +160,11 @@
</parameters>
</method>
<method name="compute_sum" c:identifier="annotation_object_compute_sum">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="nums">
+ <parameter name="nums" transfer-ownership="none">
<array zero-terminated="1">
<type name="int"/>
</array>
@@ -172,22 +172,22 @@
</parameters>
</method>
<method name="compute_sum_n" c:identifier="annotation_object_compute_sum_n">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="nums">
+ <parameter name="nums" transfer-ownership="none">
<array length="2" zero-terminated="1">
<type name="int"/>
</array>
</parameter>
- <parameter name="n_nums">
+ <parameter name="n_nums" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
</method>
<method name="do_not_use" c:identifier="annotation_object_do_not_use" deprecated="1">
- <return-value>
+ <return-value transfer-ownership="full">
<type name="GObject.Object"/>
</return-value>
</method>
diff --git a/tests/scanner/drawable-1.0-expected.tgir b/tests/scanner/drawable-1.0-expected.tgir
index 1eef9886..ab121784 100644
--- a/tests/scanner/drawable-1.0-expected.tgir
+++ b/tests/scanner/drawable-1.0-expected.tgir
@@ -12,17 +12,17 @@
<type name="GObject.Object"/>
</field>
<method name="do_foo" c:identifier="test_drawable_do_foo">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="x">
+ <parameter name="x" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
</method>
<method name="get_origin" c:identifier="test_drawable_get_origin">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
@@ -35,7 +35,7 @@
</parameters>
</method>
<method name="get_size" c:identifier="test_drawable_get_size">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
@@ -48,11 +48,11 @@
</parameters>
</method>
<method name="do_foo_maybe_throw" c:identifier="test_drawable_do_foo_maybe_throw" throws="1">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="x">
+ <parameter name="x" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
diff --git a/tests/scanner/drawable-injected-1.0-expected.gir b/tests/scanner/drawable-injected-1.0-expected.gir
index e4d46840..ad7dc298 100644
--- a/tests/scanner/drawable-injected-1.0-expected.gir
+++ b/tests/scanner/drawable-injected-1.0-expected.gir
@@ -62,7 +62,7 @@
</parameters>
</method>
<method name="get_width" c:identifier="girepo_test_drawable_get_width">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int" c:type="gint"/>
</return-value>
</method>
diff --git a/tests/scanner/drawable-injected-1.0-expected.tgir b/tests/scanner/drawable-injected-1.0-expected.tgir
index fba3d099..9a1ee2b4 100644
--- a/tests/scanner/drawable-injected-1.0-expected.tgir
+++ b/tests/scanner/drawable-injected-1.0-expected.tgir
@@ -12,17 +12,17 @@
<type name="GObject.Object"/>
</field>
<method name="do_foo" c:identifier="test_drawable_do_foo">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="x">
+ <parameter name="x" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
</method>
<method name="get_origin" c:identifier="test_drawable_get_origin">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
@@ -35,7 +35,7 @@
</parameters>
</method>
<method name="get_size" c:identifier="test_drawable_get_size">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
@@ -48,17 +48,17 @@
</parameters>
</method>
<method name="do_foo_maybe_throw" c:identifier="test_drawable_do_foo_maybe_throw" throws="1">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="x">
+ <parameter name="x" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
</method>
<method name="get_width" c:identifier="girepo_test_drawable_get_width">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
</method>
diff --git a/tests/scanner/foo-1.0-expected.tgir b/tests/scanner/foo-1.0-expected.tgir
index 2399efd1..efe696c3 100644
--- a/tests/scanner/foo-1.0-expected.tgir
+++ b/tests/scanner/foo-1.0-expected.tgir
@@ -19,34 +19,34 @@
<type name="GObject.Object"/>
</field>
<constructor name="new" c:identifier="foo_object_new">
- <return-value>
+ <return-value transfer-ownership="full">
<type name="GObject.Object"/>
</return-value>
</constructor>
<method name="external_type" c:identifier="foo_object_external_type">
- <return-value>
+ <return-value transfer-ownership="full">
<type name="GObject.Object"/>
</return-value>
</method>
<method name="various" c:identifier="foo_object_various">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="data">
+ <parameter name="data" transfer-ownership="none">
<type name="any"/>
</parameter>
- <parameter name="some_type">
+ <parameter name="some_type" transfer-ownership="none">
<type name="GType"/>
</parameter>
</parameters>
</method>
<method name="with_tdef" c:identifier="foo_object_with_tdef">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="blah">
+ <parameter name="blah" transfer-ownership="none">
<type name="GLib.SList">
<type name="any"/>
</type>
@@ -58,23 +58,23 @@
<type name="any"/>
</return-value>
<parameters>
- <parameter name="target">
+ <parameter name="target" transfer-ownership="none">
<type name="utf8"/>
</parameter>
</parameters>
</method>
<method name="is_it_time_yet" c:identifier="foo_object_is_it_time_yet">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="time">
+ <parameter name="time" transfer-ownership="none">
<type name="time_t"/>
</parameter>
</parameters>
</method>
<method name="get_name" c:identifier="foo_object_get_name">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="utf8"/>
</return-value>
</method>
@@ -84,11 +84,11 @@
</return-value>
</method>
<method name="handle_glyph" c:identifier="foo_object_handle_glyph">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="glyph">
+ <parameter name="glyph" transfer-ownership="none">
<type name="uint32"/>
</parameter>
</parameters>
@@ -104,7 +104,7 @@
<parameter name="object" transfer-ownership="full">
<type name="GObject.Object"/>
</parameter>
- <parameter name="p0">
+ <parameter name="p0" transfer-ownership="none">
<type name="any"/>
</parameter>
</parameters>
@@ -132,7 +132,7 @@
</field>
</record>
<function name="init" c:identifier="foo_init">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
</function>
@@ -142,21 +142,21 @@
<member name="delta" value="2"/>
</enumeration>
<function name="enum_type_method" c:identifier="foo_enum_type_method">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
<parameters>
- <parameter name="foo_enum">
+ <parameter name="foo_enum" transfer-ownership="none">
<type name="EnumType"/>
</parameter>
</parameters>
</function>
<function name="enum_type_returnv" c:identifier="foo_enum_type_returnv">
- <return-value>
+ <return-value transfer-ownership="full">
<type name="EnumType"/>
</return-value>
<parameters>
- <parameter name="x">
+ <parameter name="x" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
@@ -184,30 +184,30 @@
</return-value>
</constructor>
<method name="method" c:identifier="foo_boxed_method">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
</method>
</record>
<record name="DBusData" glib:type-name="FooDBusData" glib:get-type="foo_dbus_data_get_type">
<method name="method" c:identifier="foo_dbus_data_method">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
</method>
</record>
<callback name="Callback">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="boolean"/>
</return-value>
<parameters>
- <parameter name="foo">
+ <parameter name="foo" transfer-ownership="none">
<type name="GObject.Object"/>
</parameter>
- <parameter name="b">
+ <parameter name="b" transfer-ownership="none">
<type name="boolean"/>
</parameter>
- <parameter name="data">
+ <parameter name="data" transfer-ownership="none">
<type name="any"/>
</parameter>
</parameters>
@@ -236,33 +236,33 @@
</field>
</record>
<function name="method_external_references" c:identifier="foo_method_external_references">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="object">
+ <parameter name="object" transfer-ownership="none">
<type name="GObject.Object"/>
</parameter>
- <parameter name="e">
+ <parameter name="e" transfer-ownership="none">
<type name="EnumType"/>
</parameter>
- <parameter name="f">
+ <parameter name="f" transfer-ownership="none">
<type name="utility.FlagType"/>
</parameter>
- <parameter name="s">
+ <parameter name="s" transfer-ownership="none">
<type name="utility.Struct"/>
</parameter>
</parameters>
</function>
<function name="rectangle_add" c:identifier="foo_rectangle_add">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
<parameter name="r1" transfer-ownership="full" direction="inout">
<type name="Rectangle"/>
</parameter>
- <parameter name="r2">
+ <parameter name="r2" transfer-ownership="none">
<type name="Rectangle"/>
</parameter>
</parameters>
@@ -272,16 +272,16 @@
<type name="Rectangle"/>
</return-value>
<parameters>
- <parameter name="x">
+ <parameter name="x" transfer-ownership="none">
<type name="int"/>
</parameter>
- <parameter name="y">
+ <parameter name="y" transfer-ownership="none">
<type name="int"/>
</parameter>
- <parameter name="width">
+ <parameter name="width" transfer-ownership="none">
<type name="int"/>
</parameter>
- <parameter name="height">
+ <parameter name="height" transfer-ownership="none">
<type name="int"/>
</parameter>
</parameters>
@@ -322,20 +322,20 @@
<type name="BRect"/>
</return-value>
<parameters>
- <parameter name="x">
+ <parameter name="x" transfer-ownership="none">
<type name="double"/>
</parameter>
- <parameter name="y">
+ <parameter name="y" transfer-ownership="none">
<type name="double"/>
</parameter>
</parameters>
</constructor>
<method name="add" c:identifier="foo_brect_add">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="b2">
+ <parameter name="b2" transfer-ownership="none">
<type name="BRect"/>
</parameter>
</parameters>
@@ -357,7 +357,7 @@
</return-value>
</constructor>
<method name="get_contained_type" c:identifier="foo_bunion_get_contained_type">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="int"/>
</return-value>
</method>
@@ -368,31 +368,31 @@
</field>
</union>
<function name="test_unsigned_qualifier" c:identifier="foo_test_unsigned_qualifier">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="unsigned_param">
+ <parameter name="unsigned_param" transfer-ownership="none">
<type name="uint"/>
</parameter>
</parameters>
</function>
<function name="test_unsigned_type" c:identifier="foo_test_unsigned_type">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="unsigned_param">
+ <parameter name="unsigned_param" transfer-ownership="none">
<type name="uint"/>
</parameter>
</parameters>
</function>
<function name="test_string_array" c:identifier="foo_test_string_array">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="array">
+ <parameter name="array" transfer-ownership="none">
<array zero-terminated="1">
<type name="utf8"/>
</array>
@@ -400,11 +400,11 @@
</parameters>
</function>
<function name="test_string_array_with_g" c:identifier="foo_test_string_array_with_g">
- <return-value>
+ <return-value transfer-ownership="none">
<type name="none"/>
</return-value>
<parameters>
- <parameter name="array">
+ <parameter name="array" transfer-ownership="none">
<array zero-terminated="1">
<type name="utf8"/>
</array>
diff --git a/tools/generate.c b/tools/generate.c
index 8a3b1d86..fad680f5 100644
--- a/tools/generate.c
+++ b/tools/generate.c
@@ -382,21 +382,19 @@ write_callable_info (const gchar *namespace,
xml_start_element (file, "return-value");
- if (g_type_info_is_pointer (type))
+ switch (g_callable_info_get_caller_owns (info))
{
- switch (g_callable_info_get_caller_owns (info))
- {
- case GI_TRANSFER_NOTHING:
- break;
- case GI_TRANSFER_CONTAINER:
- xml_printf (file, " transfer-ownership=\"container\"");
- break;
- case GI_TRANSFER_EVERYTHING:
- xml_printf (file, " transfer-ownership=\"full\"");
- break;
- default:
- g_assert_not_reached ();
- }
+ case GI_TRANSFER_NOTHING:
+ xml_printf (file, " transfer-ownership=\"none\"");
+ break;
+ case GI_TRANSFER_CONTAINER:
+ xml_printf (file, " transfer-ownership=\"container\"");
+ break;
+ case GI_TRANSFER_EVERYTHING:
+ xml_printf (file, " transfer-ownership=\"full\"");
+ break;
+ default:
+ g_assert_not_reached ();
}
if (g_callable_info_may_return_null (info))
@@ -421,6 +419,7 @@ write_callable_info (const gchar *namespace,
switch (g_arg_info_get_ownership_transfer (arg))
{
case GI_TRANSFER_NOTHING:
+ xml_printf (file, " transfer-ownership=\"none\"");
break;
case GI_TRANSFER_CONTAINER:
xml_printf (file, " transfer-ownership=\"container\"");