[vala] Fix explicit cast of instance method access to a delegate type



commit eb0b41fdda53e48c67031cb42f30698ef4e02007
Author: Luca Bruno <lucabru src gnome org>
Date:   Mon Jul 11 22:37:51 2011 +0200

    Fix explicit cast of instance method access to a delegate type
    
    Fixes bug 539166.

 tests/Makefile.am              |    1 +
 tests/delegates/bug539166.vala |   16 ++++++++++++++++
 vala/valacastexpression.vala   |    8 ++++++++
 3 files changed, 25 insertions(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7bc47e4..0291188 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 0000000..de764a2
--- /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 c3e622b..ca5f2a1 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;
 



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