]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix assignment to array fields using array_length_type
authorJürg Billeter <j@bitron.ch>
Fri, 9 Apr 2010 07:16:40 +0000 (09:16 +0200)
committerJürg Billeter <j@bitron.ch>
Wed, 21 Apr 2010 12:04:17 +0000 (14:04 +0200)
Fixes bug 614919.

codegen/valaccodearraymodule.vala

index 01bf85f3cfa5955eddbe833f4c52c7806a6dcceb..e8e125f3efd8be68d81700637292c1c4f0409285 100644 (file)
@@ -313,7 +313,16 @@ internal class Vala.CCodeArrayModule : CCodeMethodCallModule {
                                                }
 
                                                if (field.array_length_type != null) {
-                                                       length_expr = new CCodeCastExpression (length_expr, "gint");
+                                                       // cast if field does not use int for array length
+                                                       var parent_expr = array_expr.parent_node as Expression;
+                                                       if (array_expr.lvalue) {
+                                                               // don't cast if array is used as lvalue
+                                                       } else if (parent_expr != null && parent_expr.symbol_reference is ArrayLengthField &&
+                                                                  parent_expr.lvalue) {
+                                                               // don't cast if array length is used as lvalue
+                                                       } else {
+                                                               length_expr = new CCodeCastExpression (length_expr, "gint");
+                                                       }
                                                }
                                        } else {
                                                length_expr = new CCodeIdentifier (get_array_length_cname (field.get_cname (), dim));