From: Juerg Billeter Date: Tue, 5 Feb 2008 10:39:54 +0000 (+0000) Subject: support addressof expressions for reference types, fixes bug 514495 X-Git-Tag: VALA_0_1_7~120 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e099f48de2e9ef1b9bef3eb42ea7fea01ad80adc;p=thirdparty%2Fvala.git support addressof expressions for reference types, fixes bug 514495 2008-02-05 Juerg Billeter * vala/valapointertype.vala, vala/valasemanticanalyzer.vala: support addressof expressions for reference types, fixes bug 514495 svn path=/trunk/; revision=971 --- diff --git a/ChangeLog b/ChangeLog index f48139871..e9177758d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-02-05 Jürg Billeter + + * vala/valapointertype.vala, vala/valasemanticanalyzer.vala: support + addressof expressions for reference types, fixes bug 514495 + 2008-02-05 Jürg Billeter * vala/valasemanticanalyzer.vala: fix crash when casting an invalid diff --git a/vala/valapointertype.vala b/vala/valapointertype.vala index 9a9ede86e..3ca05b98f 100644 --- a/vala/valapointertype.vala +++ b/vala/valapointertype.vala @@ -1,6 +1,6 @@ /* valapointertype.vala * - * Copyright (C) 2007 Jürg Billeter + * Copyright (C) 2007-2008 Jürg Billeter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -60,6 +60,11 @@ public class Vala.PointerType : DataType { return true; } + if (base_type.is_reference_type_or_type_parameter ()) { + // Object* is compatible with Object if Object is a reference type + return base_type.compatible (target_type, enable_non_null); + } + return false; } diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index 2107f2c74..fbb6f0fa6 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -2323,7 +2323,11 @@ public class Vala.SemanticAnalyzer : CodeVisitor { return; } - expr.static_type = new PointerType (expr.inner.static_type); + if (expr.inner.static_type.is_reference_type_or_type_parameter ()) { + expr.static_type = new PointerType (new PointerType (expr.inner.static_type)); + } else { + expr.static_type = new PointerType (expr.inner.static_type); + } } public override void visit_reference_transfer_expression (ReferenceTransferExpression! expr) {