From: Rico Tzschichholz Date: Mon, 1 Nov 2021 13:02:04 +0000 (+0100) Subject: vala: Using SignalHandler.disconnect() is required for dynamic signals X-Git-Tag: 0.55.1~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0421eb9fa72c93c9e4a535a95632b4fec8a30487;p=thirdparty%2Fvala.git vala: Using SignalHandler.disconnect() is required for dynamic signals --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 2628320bb..413132a6f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -539,6 +539,7 @@ TESTS = \ objects/signals-enum-marshal.vala \ objects/signals-delegate.vala \ objects/signals-delegate-parameter.vala \ + objects/signals-dynamic-invalid-disconnect.test \ objects/signals-dymanic-invalid-handler.test \ objects/signals-dynamic-lambda-handler.test \ objects/signals-error-marshal.vala \ diff --git a/tests/objects/signals-dynamic-invalid-disconnect.test b/tests/objects/signals-dynamic-invalid-disconnect.test new file mode 100644 index 000000000..e1787ef24 --- /dev/null +++ b/tests/objects/signals-dynamic-invalid-disconnect.test @@ -0,0 +1,15 @@ +Invalid Code + +class Foo : Object { + public signal void sig (); +} + +void sig_cb () { +} + +void main () { + var real = new Foo (); + dynamic Object foo = real; + + foo.sig.disconnect (sig_cb); +} diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index f3b87994a..c8b3b267b 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -499,6 +499,9 @@ public class Vala.MemberAccess : Expression { s.access = SymbolAccessibility.PUBLIC; dynamic_object_type.type_symbol.scope.add (null, s); symbol_reference = s; + } else if (ma.member_name == "disconnect") { + error = true; + Report.error (ma.source_reference, "Use SignalHandler.disconnect() to disconnect from dynamic signal"); } } if (symbol_reference == null) {