]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girwriter: Don't use instance-parameter inside callback (2)
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 5 Apr 2021 17:06:40 +0000 (19:06 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 5 Apr 2021 17:40:40 +0000 (19:40 +0200)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1167

codegen/valagirwriter.vala
tests/girwriter/GirTest-1.0.gir-expected

index b3f5ad18eaa535940a8c2e9da3184660be3d3fde..7bde7da2196e5d8c9c8fdf2bd14f102ba230fa20 100644 (file)
@@ -1125,7 +1125,7 @@ public class Vala.GIRWriter : CodeVisitor {
                buffer.append_printf ("</%s>\n", tag_type);
        }
 
-       private void write_params_and_return (List<Parameter> params, List<TypeParameter>? type_params, DataType? return_type, bool return_array_length, string? return_comment = null, bool constructor = false, Parameter? instance_param = null, bool user_data = false) {
+       private void write_params_and_return (string tag_name, List<Parameter> params, List<TypeParameter>? type_params, DataType? return_type, bool return_array_length, string? return_comment = null, bool constructor = false, Parameter? instance_param = null, bool user_data = false) {
                int last_index = 0;
                bool ret_is_struct = return_type != null && return_type.is_real_non_null_struct_type ();
 
@@ -1169,7 +1169,12 @@ public class Vala.GIRWriter : CodeVisitor {
                                        type.nullable = true;
                                }
                                int skip = 0;
-                               write_param_or_return (type, "instance-parameter", ref skip, false, "self");
+                               if (tag_name == "callback") {
+                                       write_param_or_return (type, "parameter", ref skip, false, "self");
+                                       index++;
+                               } else {
+                                       write_param_or_return (type, "instance-parameter", ref skip, false, "self");
+                               }
                        }
 
                        if (type_params != null) {
@@ -1234,7 +1239,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
                write_doc (get_delegate_comment (cb));
 
-               write_params_and_return (cb.get_parameters (), cb.get_type_parameters (), cb.return_type, get_ccode_array_length (cb), get_delegate_return_comment (cb), false, null, cb.has_target);
+               write_params_and_return ("callback", cb.get_parameters (), cb.get_type_parameters (), cb.return_type, get_ccode_array_length (cb), get_delegate_return_comment (cb), false, null, cb.has_target);
 
                indent--;
                write_indent ();
@@ -1359,15 +1364,7 @@ public class Vala.GIRWriter : CodeVisitor {
                        write_doc (get_method_comment (m));
                }
 
-               if (tag_name == "callback" && m.this_parameter != null) {
-                       m.this_parameter.set_attribute_string ("CCode", "cname", "self");
-                       var static_params = new ArrayList<Vala.Parameter> ();
-                       static_params.add (m.this_parameter);
-                       static_params.add_all (params);
-                       write_params_and_return (static_params, m.get_type_parameters (), return_type, get_ccode_array_length (m), return_comment, false);
-               } else {
-                       write_params_and_return (params, m.get_type_parameters (), return_type, get_ccode_array_length (m), return_comment, false, m.this_parameter);
-               }
+               write_params_and_return (tag_name, params, m.get_type_parameters (), return_type, get_ccode_array_length (m), return_comment, false, m.this_parameter);
 
                indent--;
                write_indent ();
@@ -1415,7 +1412,7 @@ public class Vala.GIRWriter : CodeVisitor {
                if (m.parent_symbol is Class) {
                        type_params = ((Class) m.parent_symbol).get_type_parameters ();
                }
-               write_params_and_return (m.get_parameters (), type_params, datatype, false, get_method_return_comment (m), true);
+               write_params_and_return (tag_name, m.get_parameters (), type_params, datatype, false, get_method_return_comment (m), true);
 
                indent--;
                write_indent ();
@@ -1492,7 +1489,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
                write_doc (get_signal_comment (sig));
 
-               write_params_and_return (sig.get_parameters (), null, sig.return_type, false, get_signal_return_comment (sig));
+               write_params_and_return ("glib:signal", sig.get_parameters (), null, sig.return_type, false, get_signal_return_comment (sig));
 
                indent--;
                write_indent ();
index 0a342ea5bd4939bedcf3216f3603fa21e4022837..d4bb4291e214e6c83c63fce82cfde9d877b41a56 100644 (file)
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
                                        </parameter>
                                        <parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
                                        </parameter>
                                        <parameter name="_res_" transfer-ownership="none">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
                                        </parameter>
                                        <parameter name="i1" transfer-ownership="none">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
                                        </parameter>
                                        <parameter name="_res_" transfer-ownership="none">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
                                        </parameter>
                                        <parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
                                        </parameter>
                                        <parameter name="_res_" transfer-ownership="none">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
                                        </parameter>
                                        <parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
                                        </parameter>
                                        <parameter name="_res_" transfer-ownership="none">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
                                        </parameter>
                                        <parameter name="param" transfer-ownership="none">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
                                        </parameter>
                                        <parameter name="_res_" transfer-ownership="none">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
                                        </parameter>
                                        <parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
                                        <type name="none" c:type="void"/>
                                </return-value>
                                <parameters>
-                                       <parameter name="this" transfer-ownership="none">
+                                       <parameter name="self" transfer-ownership="none">
                                                <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
                                        </parameter>
                                        <parameter name="_res_" transfer-ownership="none">