pass non-simple structs also in object creation expressions always by
authorJuerg Billeter <j@bitron.ch>
Thu, 17 Jan 2008 15:02:05 +0000 (15:02 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 17 Jan 2008 15:02:05 +0000 (15:02 +0000)
2008-01-17  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegenerator.vala: pass non-simple structs also in
  object creation expressions always by reference, fixes bug 510029

svn path=/trunk/; revision=843

ChangeLog
gobject/valaccodegenerator.vala

index 8a70c3f..858144b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2008-01-17  Jürg Billeter  <j@bitron.ch>
 
+       * gobject/valaccodegenerator.vala: pass non-simple structs also in
+         object creation expressions always by reference, fixes bug 510029
+
+2008-01-17  Jürg Billeter  <j@bitron.ch>
+
        * vapigen/valagidlparser.vala: remove outdated type name heuristics,
          fixes bug 509597
 
index 8d2b4f6..7fb0f9c 100644 (file)
@@ -2540,6 +2540,14 @@ public class Vala.CCodeGenerator : CodeGenerator {
                                        ellipsis = param.ellipsis;
                                        if (!param.ellipsis) {
                                                cexpr = get_implicit_cast_expression (cexpr, arg.static_type, param.type_reference);
+
+                                               // pass non-simple struct instances always by reference
+                                               if (param.type_reference.data_type is Struct && !((Struct) param.type_reference.data_type).is_simple_type ()) {
+                                                       // we already use a reference for arguments of ref and out parameters
+                                                       if (!param.type_reference.is_ref && !param.type_reference.is_out) {
+                                                               cexpr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cexpr);
+                                                       }
+                                               }
                                        }
                                }