]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix delegate initializer for instance fields
authorRico Tzschichholz <ricotz@ubuntu.com>
Wed, 22 Mar 2017 15:04:00 +0000 (16:04 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 22 Mar 2017 15:08:37 +0000 (16:08 +0100)
Set delegate-target to "self" which is available in *_instance_init().

https://bugzilla.gnome.org/show_bug.cgi?id=683925

codegen/valaccodebasemodule.vala
tests/Makefile.am
tests/delegates/bug683925.vala [new file with mode: 0644]

index 2d3ae5eb62461ac0ee105a87dd00b3cff384f8ec..8a95c6431d7bdc39a32fe86adc0f22e5d2938d69 100644 (file)
@@ -1130,6 +1130,16 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                                        var rhs_array_len = get_array_length_cvalue (field_value, 1);
                                                        ccode.add_assignment (lhs_array_size, rhs_array_len);
                                                }
+                                       } else if (f.variable_type is DelegateType) {
+                                               var delegate_type = (DelegateType) f.variable_type;
+                                               if (delegate_type.delegate_symbol.has_target) {
+                                                       var field_value = get_field_cvalue (f, load_this_parameter ((TypeSymbol) f.parent_symbol));
+
+                                                       ccode.add_assignment (get_delegate_target_cvalue (field_value), new CCodeIdentifier ("self"));
+                                                       if (delegate_type.is_disposable ()) {
+                                                               ccode.add_assignment (get_delegate_target_destroy_notify_cvalue (field_value), new CCodeIdentifier ("NULL"));
+                                                       }
+                                               }
                                        }
                                }
 
index add13c5a861aa39f434f9d49309045964783c8f5..829df93bebda6600ada431cfe267c9f9064fb8e2 100644 (file)
@@ -153,6 +153,7 @@ TESTS = \
        delegates/bug638415.vala \
        delegates/bug639751.vala \
        delegates/bug659778.vala \
+       delegates/bug683925.vala \
        delegates/bug703804.vala \
        delegates/bug761360.vala \
        delegates/bug772204.test \
diff --git a/tests/delegates/bug683925.vala b/tests/delegates/bug683925.vala
new file mode 100644 (file)
index 0000000..5c0ba36
--- /dev/null
@@ -0,0 +1,24 @@
+delegate void FooFunc ();
+
+class Foo : Object {
+       bool check = false;
+
+       FooFunc func = default_func;
+
+       public Foo () {
+       }
+
+       void default_func () {
+               check = true;
+       }
+
+       public void run () {
+               func ();
+               assert (check);
+       }
+}
+
+void main(){
+       var foo = new Foo ();
+       foo.run ();
+}