]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
use pointer indirection to access length variable of out array parameters,
authorJuerg Billeter <j@bitron.ch>
Sat, 27 Oct 2007 19:47:50 +0000 (19:47 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 27 Oct 2007 19:47:50 +0000 (19:47 +0000)
2007-10-27  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegenerator.vala: use pointer indirection to access
  length variable of out array parameters, fixes bug 480019

svn path=/trunk/; revision=670

ChangeLog
gobject/valaccodegenerator.vala

index 76ea5b71f332519562b4509a4c629a444f4f60fc..f8a7e7f7a9014afc41119c7ec4ee0aa0c05926d8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-27  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodegenerator.vala: use pointer indirection to access
+         length variable of out array parameters, fixes bug 480019
+
 2007-10-27  Jürg Billeter  <j@bitron.ch>
 
        * ccode/Makefile.am, ccode/valaccodeenum.vala,
index 34ea1f9d13cb44f3ea36f0aa9c57d7dcf9d09f39..953c98d72fab222aa7274492d605416677e3c5cb 100644 (file)
@@ -2066,8 +2066,13 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        if (array_expr.symbol_reference is FormalParameter) {
                                var param = (FormalParameter) array_expr.symbol_reference;
                                if (!param.no_array_length) {
-                                       var length_expr = new CCodeIdentifier (get_array_length_cname (param.name, dim));
+                                       CCodeExpression length_expr = new CCodeIdentifier (get_array_length_cname (param.name, dim));
+                                       if (param.type_reference.is_out || param.type_reference.is_ref) {
+                                               // accessing argument of out/ref param
+                                               length_expr = new CCodeParenthesizedExpression (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, length_expr));
+                                       }
                                        if (is_out) {
+                                               // passing array as out/ref
                                                return new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, length_expr);
                                        } else {
                                                return length_expr;