[vala] Fix explicit cast of instance method access to a delegate type
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] Fix explicit cast of instance method access to a delegate type
- Date: Mon, 11 Jul 2011 21:02:43 +0000 (UTC)
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]