[vala/staging] vala: Apply stricter condition for lambda to delegate assignment



commit 305c79054bfccb4247f95b1ab4fe0ca655096740
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sat Jan 23 17:29:44 2021 +0100

    vala: Apply stricter condition for lambda to delegate assignment
    
    This moves an internal codegen error to the semantic-analyzer.

 tests/Makefile.am                        |  1 +
 tests/delegates/lambda-incompatible.test | 11 +++++++++++
 vala/valadelegate.vala                   |  2 +-
 3 files changed, 13 insertions(+), 1 deletion(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 274831bf7..52b1b6669 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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
index 000000000..450fe456e
--- /dev/null
+++ b/tests/delegates/lambda-incompatible.test
@@ -0,0 +1,11 @@
+Invalid Code
+
+[CCode (has_target = false)]
+delegate void FooFunc ();
+
+void main () {
+       int i = 0;
+       FooFunc f = () => {
+               i++;
+       };
+}
diff --git a/vala/valadelegate.vala b/vala/valadelegate.vala
index 770d39ac6..83a3415dc 100644
--- a/vala/valadelegate.vala
+++ b/vala/valadelegate.vala
@@ -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;
                }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]