From abe72cffc3d6884ee8ab41fcba63fec941461b0d Mon Sep 17 00:00:00 2001 From: Lorenz Wildberg Date: Fri, 29 Oct 2021 11:50:30 +0100 Subject: [PATCH] vala: Improve error message for invalid handler of dynamic signal --- tests/Makefile.am | 1 + tests/objects/signals-dynamic-lambda-handler.test | 8 ++++++++ vala/valamemberaccess.vala | 6 +++++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/objects/signals-dynamic-lambda-handler.test diff --git a/tests/Makefile.am b/tests/Makefile.am index 5e151ac7c..036c809b9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -516,6 +516,7 @@ TESTS = \ objects/signals-delegate.vala \ objects/signals-delegate-parameter.vala \ objects/signals-dymanic-invalid-handler.test \ + objects/signals-dynamic-lambda-handler.test \ objects/signals-error-marshal.vala \ objects/signals-fundamental-return.vala \ objects/signals-gobject-return.vala \ diff --git a/tests/objects/signals-dynamic-lambda-handler.test b/tests/objects/signals-dynamic-lambda-handler.test new file mode 100644 index 000000000..ae86c9f1c --- /dev/null +++ b/tests/objects/signals-dynamic-lambda-handler.test @@ -0,0 +1,8 @@ +Invalid Code + +void main () { + dynamic Object? foo = null; + foo.on_bar.connect ((baz) => { + // lambdas are not allowed + }); +} diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index fef4e6d3f..2a3abcfb8 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -459,7 +459,11 @@ public class Vala.MemberAccess : Expression { unowned MemberAccess? arg = s.handler as MemberAccess; if (arg == null || !arg.check (context) || !(arg.symbol_reference is Method)) { error = true; - Report.error (s.handler.source_reference, "Invalid handler for `%s'".printf (s.get_full_name ())); + if (s.handler is LambdaExpression) { + Report.error (s.handler.source_reference, "Lambdas are not allowed for dynamic signals"); + } else { + Report.error (s.handler.source_reference, "Cannot infer call signature for dynamic signal `%s' from given expression".printf (s.get_full_name ())); + } } } s.access = SymbolAccessibility.PUBLIC; -- 2.47.2