]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Apply stricter condition for lambda to delegate assignment
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 23 Jan 2021 16:29:44 +0000 (17:29 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sat, 23 Jan 2021 16:29:44 +0000 (17:29 +0100)
This moves an internal codegen error to the semantic-analyzer.

tests/Makefile.am
tests/delegates/lambda-incompatible.test [new file with mode: 0644]
vala/valadelegate.vala

index 274831bf7ca7221e9a563a4b47d941f19e45d552..52b1b6669c1ced7247de62caab2bcfa8710c0a24 100644 (file)
@@ -381,6 +381,7 @@ TESTS = \
        delegates/incompatible-target.test \
        delegates/instance-method-to-no-target.test \
        delegates/instance-method-to-no-target-2.test \
+       delegates/lambda-incompatible.test \
        delegates/lambda-mixed-instance-static.vala \
        delegates/lambda-shared-closure.vala \
        delegates/member-target-destroy.vala \
diff --git a/tests/delegates/lambda-incompatible.test b/tests/delegates/lambda-incompatible.test
new file mode 100644 (file)
index 0000000..450fe45
--- /dev/null
@@ -0,0 +1,11 @@
+Invalid Code
+
+[CCode (has_target = false)]
+delegate void FooFunc ();
+
+void main () {
+       int i = 0;
+       FooFunc f = () => {
+               i++;
+       };
+}
index 770d39ac63b8b504c3493a394e2199d786b284d7..83a3415dcd3ca41a10cdec566fe5caf8b1484b14 100644 (file)
@@ -188,7 +188,7 @@ public class Vala.Delegate : TypeSymbol, Callable {
                }
 
                // delegate without target for instance method or closure
-               if (first && m.binding == MemberBinding.INSTANCE && !has_target) {
+               if (first && !has_target && (m.binding == MemberBinding.INSTANCE || m.closure) && (parameters.size == 0 || m.closure)) {
                        return false;
                }