]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girwriter: Restore behaviour for delegate-types
authorRico Tzschichholz <ricotz@ubuntu.com>
Wed, 16 Oct 2019 17:16:20 +0000 (19:16 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 16 Oct 2019 17:25:26 +0000 (19:25 +0200)
Regression introduced by 061c02a91056b2f8c8b4cc985db4aec9c0a235fc

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

index e92ab1514ec487b4d4569c7089f03949edd2085b..d65e8b80c06e5e5dd32e6d332079b8d1bdca959e 100644 (file)
@@ -1544,6 +1544,10 @@ public class Vala.GIRWriter : CodeVisitor {
                } else if (type is PointerType) {
                        write_indent ();
                        buffer.append_printf ("<type name=\"gpointer\" c:type=\"%s%s\"/>\n", get_ccode_name (type), direction == ParameterDirection.IN ? "" : "*");
+               } else if (type is DelegateType) {
+                       var deleg_type = (DelegateType) type;
+                       write_indent ();
+                       buffer.append_printf ("<type name=\"%s\" c:type=\"%s%s\"/>\n", gi_type_name (deleg_type.delegate_symbol), get_ccode_name (type), direction == ParameterDirection.IN ? "" : "*");
                } else if (type.type_symbol != null) {
                        write_indent ();
                        string type_name = gi_type_name (type.type_symbol);
@@ -1568,10 +1572,6 @@ public class Vala.GIRWriter : CodeVisitor {
                                write_indent ();
                                buffer.append_printf ("</%s>\n", is_array ? "array" : "type");
                        }
-               } else if (type is DelegateType) {
-                       var deleg_type = (DelegateType) type;
-                       write_indent ();
-                       buffer.append_printf ("<type name=\"%s\" c:type=\"%s%s\"/>\n", gi_type_name (deleg_type.delegate_symbol), get_ccode_name (type), direction == ParameterDirection.IN ? "" : "*");
                } else if (type is GenericType) {
                        // generic type parameters not supported in GIR
                        write_indent ();
index 034f484181fccd02963d64c85356db97baa2d2e1..387df18ae04e21f46e1e00f2ba95a3dd0f9aed1f 100644 (file)
                                </parameter>
                        </parameters>
                </constructor>
+               <constructor name="typed" c:identifier="gir_test_generics_test_new_typed">
+                       <return-value transfer-ownership="full">
+                               <type name="GirTest.GenericsTest" c:type="GirTestGenericsTest*"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="g_type" transfer-ownership="none">
+                                       <type name="GType" c:type="GType"/>
+                               </parameter>
+                               <parameter name="g_dup_func" transfer-ownership="none">
+                                       <type name="GObject.BoxedCopyFunc" c:type="GBoxedCopyFunc"/>
+                               </parameter>
+                               <parameter name="g_destroy_func" transfer-ownership="none">
+                                       <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+                               </parameter>
+                               <parameter name="t_type" transfer-ownership="none">
+                                       <type name="GType" c:type="GType"/>
+                               </parameter>
+                               <parameter name="t_dup_func" transfer-ownership="none">
+                                       <type name="GObject.BoxedCopyFunc" c:type="GBoxedCopyFunc"/>
+                               </parameter>
+                               <parameter name="t_destroy_func" transfer-ownership="none">
+                                       <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+                               </parameter>
+                               <parameter name="cb" transfer-ownership="none" closure="7" scope="notified" destroy="8">
+                                       <type name="GirTest.DelegateGenericsTest" c:type="GirTestDelegateGenericsTest"/>
+                               </parameter>
+                               <parameter name="cb_target" transfer-ownership="none" allow-none="1">
+                                       <type name="gpointer" c:type="void*"/>
+                               </parameter>
+                               <parameter name="cb_target_destroy_notify" transfer-ownership="none" scope="call">
+                                       <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+                               </parameter>
+                       </parameters>
+               </constructor>
                <method name="method" c:identifier="gir_test_generics_test_method">
                        <return-value transfer-ownership="full">
                                <type name="none"/>
                        </parameter>
                </parameters>
        </callback>
+       <callback name="DelegateGenericsTest" c:type="GirTestDelegateGenericsTest">
+               <return-value transfer-ownership="full">
+                       <type name="gboolean" c:type="gboolean"/>
+               </return-value>
+               <parameters>
+                       <parameter name="g_type" transfer-ownership="none">
+                               <type name="GType" c:type="GType"/>
+                       </parameter>
+                       <parameter name="g_dup_func" transfer-ownership="none">
+                               <type name="GObject.BoxedCopyFunc" c:type="GBoxedCopyFunc"/>
+                       </parameter>
+                       <parameter name="g_destroy_func" transfer-ownership="none">
+                               <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+                       </parameter>
+                       <parameter name="t_type" transfer-ownership="none">
+                               <type name="GType" c:type="GType"/>
+                       </parameter>
+                       <parameter name="t_dup_func" transfer-ownership="none">
+                               <type name="GObject.BoxedCopyFunc" c:type="GBoxedCopyFunc"/>
+                       </parameter>
+                       <parameter name="t_destroy_func" transfer-ownership="none">
+                               <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+                       </parameter>
+                       <parameter name="g" transfer-ownership="none" allow-none="1">
+                               <type name="gpointer" c:type="gpointer"/>
+                       </parameter>
+                       <parameter name="t" transfer-ownership="none" allow-none="1">
+                               <type name="gpointer" c:type="gpointer"/>
+                       </parameter>
+                       <parameter name="user_data" transfer-ownership="none" closure="8">
+                               <type name="gpointer" c:type="void*"/>
+                       </parameter>
+               </parameters>
+       </callback>
        <callback name="SkippedDelegate" c:type="GirTestSkippedDelegate" introspectable="0">
                <return-value transfer-ownership="full">
                        <type name="none"/>
index 3ace08a5bc05adc334cdbf8353e14d88c756540b..7673706d9aaf9d27791cdf3b7147d9e13b4dc840 100644 (file)
@@ -79,6 +79,8 @@ namespace GirTest {
 
        public delegate bool DelegateTest (void* a, void* b);
 
+       public delegate bool DelegateGenericsTest<G,T> (G g, T t);
+
        [GIR (visible = false)]
        public delegate void SkippedDelegate ();
 
@@ -279,6 +281,9 @@ namespace GirTest {
                public GenericsTest (owned DelegateTest cb) {
                }
 
+               public GenericsTest.typed (owned DelegateGenericsTest<G,T> cb) {
+               }
+
                public void method (T param) {
                }
        }
index 52d23d16a68371c0547716a9027736e796644a55..854c2cfd5b61a75db745165c8a368fd56503eea2 100644 (file)
@@ -22,6 +22,7 @@ namespace GirTest {
        public class GenericsTest<G,T> {
                public GenericsTest (owned GirTest.DelegateTest cb);
                public void method (T param);
+               public GenericsTest.typed (owned GirTest.DelegateGenericsTest<G,T> cb);
        }
        [CCode (cheader_filename = "girtest.h")]
        public class ImplementionTest : GLib.Object, GirTest.InterfaceTest {
@@ -162,6 +163,8 @@ namespace GirTest {
                FISHY
        }
        [CCode (cheader_filename = "girtest.h")]
+       public delegate bool DelegateGenericsTest<G,T> (G g, T t);
+       [CCode (cheader_filename = "girtest.h")]
        public delegate bool DelegateTest (void* a, void* b);
        [CCode (cheader_filename = "girtest.h")]
        [GIR (visible = false)]