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.52.8~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=229816134d3e4885871debe7e89fcd42f8de86ce;p=thirdparty%2Fvala.git vala: Using SignalHandler.disconnect() is required for dynamic signals --- diff --git a/tests/Makefile.am b/tests/Makefile.am index f862af631..33cccdc7c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -522,6 +522,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 a251ef118..b68676e44 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -490,6 +490,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) {