]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
support addressof expressions for reference types, fixes bug 514495
authorJuerg Billeter <j@bitron.ch>
Tue, 5 Feb 2008 10:39:54 +0000 (10:39 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 5 Feb 2008 10:39:54 +0000 (10:39 +0000)
2008-02-05  Juerg Billeter  <j@bitron.ch>

* vala/valapointertype.vala, vala/valasemanticanalyzer.vala: support
  addressof expressions for reference types, fixes bug 514495

svn path=/trunk/; revision=971

ChangeLog
vala/valapointertype.vala
vala/valasemanticanalyzer.vala

index f4813987105b89cbe7b2073ed5ea634e5e0c3628..e9177758dca8db90f2dded328eaf13f977f10940 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-05  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valapointertype.vala, vala/valasemanticanalyzer.vala: support
+         addressof expressions for reference types, fixes bug 514495
+
 2008-02-05  Jürg Billeter  <j@bitron.ch>
 
        * vala/valasemanticanalyzer.vala: fix crash when casting an invalid
index 9a9ede86e36db8d39c2831952f1d23f72ac9ad63..3ca05b98fac17caaac9caa98917524464c69a986 100644 (file)
@@ -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;
        }
 
index 2107f2c7444e5b8521291e5a6e82e76fc761d430..fbb6f0fa66edcef792cbae394ca7b02e69d26185 100644 (file)
@@ -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) {