From: Luca Bruno Date: Mon, 11 Jul 2011 20:37:51 +0000 (+0200) Subject: Fix explicit cast of instance method access to a delegate type X-Git-Tag: 0.13.2~158 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb0b41fdda53e48c67031cb42f30698ef4e02007;p=thirdparty%2Fvala.git Fix explicit cast of instance method access to a delegate type Fixes bug 539166. --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 7bc47e4f3..02911887f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -68,6 +68,7 @@ TESTS = \ structs/bug623092.vala \ structs/bug651441.vala \ delegates/delegates.vala \ + delegates/bug539166.vala \ delegates/bug595610.vala \ delegates/bug595639.vala \ delegates/bug638415.vala \ diff --git a/tests/delegates/bug539166.vala b/tests/delegates/bug539166.vala new file mode 100644 index 000000000..de764a25a --- /dev/null +++ b/tests/delegates/bug539166.vala @@ -0,0 +1,16 @@ +delegate void Deleg (); + +class Foo : Object { + public Object baz = new Object (); + + public void bar () { + assert (baz != null); + } +} + +void main () { + var foo = new Foo (); + var deleg = (Deleg) foo.bar; + foo = null; + deleg (); +} diff --git a/vala/valacastexpression.vala b/vala/valacastexpression.vala index c3e622b1c..ca5f2a1be 100644 --- a/vala/valacastexpression.vala +++ b/vala/valacastexpression.vala @@ -137,6 +137,14 @@ public class Vala.CastExpression : Expression { // FIXME: check whether cast is allowed + if (type_reference is DelegateType && inner.value_type is MethodType) { + if (target_type != null) { + inner.value_type.value_owned = target_type.value_owned; + } else { + inner.value_type.value_owned = true; + } + } + value_type = type_reference; value_type.value_owned = inner.value_type.value_owned;