]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Improve error message for invalid handler of dynamic signal
authorLorenz Wildberg <lorenz@wild-fisch.de>
Fri, 29 Oct 2021 10:50:30 +0000 (11:50 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 14 Nov 2021 11:38:22 +0000 (12:38 +0100)
tests/Makefile.am
tests/objects/signals-dynamic-lambda-handler.test [new file with mode: 0644]
vala/valamemberaccess.vala

index 2951db733a12c81aba6545d8a49b02c0f4f445a5..f862af631fc52063e562cbc3c1b47f9f6a7af523 100644 (file)
@@ -523,6 +523,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 (file)
index 0000000..ae86c9f
--- /dev/null
@@ -0,0 +1,8 @@
+Invalid Code
+
+void main () {
+       dynamic Object? foo = null;
+       foo.on_bar.connect ((baz) => {
+               // lambdas are not allowed
+       });
+}
index 82fe8d2d9c1e010825eba6e50712486428b329e9..a251ef11840982f3883ee088ef61538e9c8e9490 100644 (file)
@@ -480,7 +480,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'", 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", s.get_full_name ());
+                                                               }
                                                        }
                                                }
                                                s.access = SymbolAccessibility.PUBLIC;