[vala/0.40] codegen: Fix vfunc signature of delegate-typed property in interface



commit 0eab53570007c6cbdcbac696da28a56bc8ae2e8f
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Thu Nov 14 17:28:08 2019 +0100

    codegen: Fix vfunc signature of delegate-typed property in interface

 codegen/valagtypemodule.vala                   |  4 ++++
 tests/Makefile.am                              |  1 +
 tests/objects/interface-property-delegate.vala | 29 ++++++++++++++++++++++++++
 3 files changed, 34 insertions(+)
---
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index bf61f2a2f..9c9635be0 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -2133,6 +2133,8 @@ public class Vala.GTypeModule : GErrorModule {
                                                for (int dim = 1; dim <= array_type.rank; dim++) {
                                                        vdeclarator.add_parameter (new CCodeParameter 
(get_array_length_cname ("result", dim), "int*"));
                                                }
+                                       } else if ((prop.property_type is DelegateType) && 
get_ccode_delegate_target (prop) && ((DelegateType) prop.property_type).delegate_symbol.has_target) {
+                                               vdeclarator.add_parameter (new CCodeParameter 
(get_delegate_target_cname ("result"), "gpointer*"));
                                        }
 
                                        var vdecl = new CCodeDeclaration (creturn_type);
@@ -2155,6 +2157,8 @@ public class Vala.GTypeModule : GErrorModule {
                                                for (int dim = 1; dim <= array_type.rank; dim++) {
                                                        vdeclarator.add_parameter (new CCodeParameter 
(get_array_length_cname ("value", dim), "int"));
                                                }
+                                       } else if ((prop.property_type is DelegateType) && 
get_ccode_delegate_target (prop) && ((DelegateType) prop.property_type).delegate_symbol.has_target) {
+                                               vdeclarator.add_parameter (new CCodeParameter 
(get_delegate_target_cname ("value"), "gpointer"));
                                        }
 
                                        var vdecl = new CCodeDeclaration ("void");
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2dca4e3e6..fa5a33ace 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -296,6 +296,7 @@ TESTS = \
        objects/interface-base-access.vala \
        objects/interfaces.vala \
        objects/interface-property-base-access.vala \
+       objects/interface-property-delegate.vala \
        objects/methods.vala \
        objects/paramspec.vala \
        objects/properties.vala \
diff --git a/tests/objects/interface-property-delegate.vala b/tests/objects/interface-property-delegate.vala
new file mode 100644
index 000000000..485f12516
--- /dev/null
+++ b/tests/objects/interface-property-delegate.vala
@@ -0,0 +1,29 @@
+delegate void FooFunc ();
+
+interface IFoo {
+       public abstract unowned FooFunc prop { get; set; }
+}
+
+class Foo : IFoo {
+       public unowned FooFunc prop { get; set; }
+}
+
+class Bar {
+       public bool reached;
+
+       public Bar () {
+               var foo = new Foo ();
+               foo.prop = bar;
+
+               foo.prop ();
+       }
+
+       void bar () {
+               reached = true;
+       }
+}
+
+void main () {
+       var bar = new Bar ();
+       assert (bar.reached);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]