From: Rico Tzschichholz Date: Sat, 23 Jan 2021 16:29:44 +0000 (+0100) Subject: vala: Apply stricter condition for lambda to delegate assignment X-Git-Tag: 0.51.1~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=305c79054bfccb4247f95b1ab4fe0ca655096740;p=thirdparty%2Fvala.git vala: Apply stricter condition for lambda to delegate assignment This moves an internal codegen error to the semantic-analyzer. --- 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; }