add basic support for instance_pos attribute to struct creation methods,
authorJuerg Billeter <j@bitron.ch>
Mon, 12 May 2008 15:01:22 +0000 (15:01 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 12 May 2008 15:01:22 +0000 (15:01 +0000)
2008-05-12  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegenerator.vala: add basic support for
instance_pos attribute to struct creation methods, fixes bug 530774

svn path=/trunk/; revision=1373

ChangeLog
gobject/valaccodegenerator.vala

index 9458f7b..2ff93a4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-12  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodegenerator.vala: add basic support for
+       instance_pos attribute to struct creation methods, fixes bug 530774
+
 2008-05-11  Jürg Billeter  <j@bitron.ch>
 
        * gobject/valaccodetypesymbolbinding.vala: fix double properties
index 3e70088..a3aecd1 100644 (file)
@@ -2942,7 +2942,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
                        creation_call = new CCodeFunctionCall (new CCodeIdentifier (m.get_cname ()));
 
-                       if (expr.type_reference.data_type is Struct) {
+                       if (expr.type_reference.data_type is Struct && !(m.cinstance_parameter_position < 0)) {
                                creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance));
                        } else if (expr.type_reference.data_type is Class) {
                                var cl = (Class) expr.type_reference.data_type;
@@ -3040,6 +3040,11 @@ public class Vala.CCodeGenerator : CodeGenerator {
                                i++;
                        }
 
+                       if (expr.type_reference.data_type is Struct && m.cinstance_parameter_position < 0) {
+                               // instance parameter is at the end in a struct creation method
+                               creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance));
+                       }
+
                        if (expr.can_fail) {
                                // method can fail
                                current_method_inner_error = true;