]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
GIR writer: Fix missing transfer-ownership attributes
authorDidier 'Ptitjes <ptitjes@free.fr>
Sat, 21 Mar 2009 03:15:25 +0000 (04:15 +0100)
committerJürg Billeter <j@bitron.ch>
Thu, 30 Apr 2009 21:16:19 +0000 (23:16 +0200)
Fix missing transfer-ownership attribute on parameters and return value.

Signed-off-by: Didier 'Ptitjes <ptitjes@free.fr>
gobject/valagirwriter.vala

index 407942d746633ace36fb3eb4583e1d92bc3e09c3..2a22e847122676a57f81effcb8a036615a4c5817 100644 (file)
@@ -398,7 +398,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
                if (instance_type != null) {
                        write_indent ();
-                       stream.printf ("<parameter name=\"self\">\n");
+                       stream.printf ("<parameter name=\"self\" transfer-ownership=\"none\">\n");
                        indent++;
 
                        write_type (instance_type);
@@ -416,17 +416,23 @@ public class Vala.GIRWriter : CodeVisitor {
                                // in/out paramter
                                if (param.parameter_type.value_owned) {
                                        stream.printf (" transfer-ownership=\"full\"");
+                               } else {
+                                       stream.printf (" transfer-ownership=\"none\"");
                                }
                        } else if (param.direction == ParameterDirection.OUT) {
                                // out paramter
                                stream.printf (" direction=\"out\"");
                                if (param.parameter_type.value_owned) {
                                        stream.printf (" transfer-ownership=\"full\"");
+                               } else {
+                                       stream.printf (" transfer-ownership=\"none\"");
                                }
                        } else {
                                // normal in paramter
                                if (param.parameter_type.value_owned) {
                                        stream.printf (" transfer-ownership=\"full\"");
+                               } else {
+                                       stream.printf (" transfer-ownership=\"none\"");
                                }
                        }
                        stream.printf (">\n");
@@ -531,7 +537,8 @@ public class Vala.GIRWriter : CodeVisitor {
 
                write_params (m.get_parameters ());
 
-               write_return_type (CCodeBaseModule.get_data_type_for_symbol ((TypeSymbol) m.parent_symbol));
+               var datatype = CCodeBaseModule.get_data_type_for_symbol ((TypeSymbol) m.parent_symbol);
+               write_return_type (datatype, true);
 
                indent--;
                write_indent ();
@@ -588,11 +595,13 @@ public class Vala.GIRWriter : CodeVisitor {
                }
        }
 
-       private void write_return_type (DataType type) {
+       private void write_return_type (DataType type, bool constructor = false) {
                write_indent ();
                stream.printf ("<return-value");
-               if (type.value_owned) {
+               if (type.value_owned || constructor) {
                        stream.printf (" transfer-ownership=\"full\"");
+               } else {
+                       stream.printf (" transfer-ownership=\"none\"");
                }
                stream.printf (">\n");
                indent++;