]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
use cast for field initializers when necessary
authorJuerg Billeter <j@bitron.ch>
Fri, 27 Jul 2007 11:31:20 +0000 (11:31 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 27 Jul 2007 11:31:20 +0000 (11:31 +0000)
2007-07-27  Juerg Billeter  <j@bitron.ch>

* gobject/valacodegenerator.vala: use cast for field initializers when
  necessary

svn path=/trunk/; revision=401

ChangeLog
gobject/valacodegenerator.vala

index 6ec4311338ada2fd6f2269fdb801dccc285ee5db..42c4fa646067603c86d09ea0a618bf57d5a4aaab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-27  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valacodegenerator.vala: use cast for field initializers when
+         necessary
+
 2007-07-27  Jürg Billeter  <j@bitron.ch>
 
        * vala/valasemanticanalyzer.vala: fix memory leak in cast expressions
index 43967442538167f50eb4af6b058af92697df3de3..eb546130ec4faede4ea145d25050f2838093edf4 100644 (file)
@@ -429,8 +429,17 @@ public class Vala.CodeGenerator : CodeVisitor {
                        }
 
                        if (f.initializer != null) {
-                               instance_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (lhs, (CCodeExpression) f.initializer.ccodenode)));
-                               
+                               var rhs = (CCodeExpression) f.initializer.ccodenode;
+                               if (f.type_reference.data_type != null
+                                   && f.initializer.static_type.data_type != null
+                                   && f.type_reference.data_type.is_reference_type ()
+                                   && f.initializer.static_type.data_type != f.type_reference.data_type) {
+                                       // FIXME: use C cast if debugging disabled
+                                       rhs = new InstanceCast (rhs, f.type_reference.data_type);
+                               }
+
+                               instance_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (lhs, rhs)));
+
                                if (f.type_reference.data_type is Array && !f.no_array_length &&
                                    f.initializer is ArrayCreationExpression) {
                                        var ma = new MemberAccess.simple (f.name);