From fa628f64088d9a05f4d758d65956c1120dc0f954 Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Mon, 6 Aug 2007 11:52:24 +0000 Subject: [PATCH] fixes for multi-dimension arrays 2007-08-06 Juerg Billeter * gobject/valacodegenerator.vala, gobject/valacodegeneratorassignment.vala: fixes for multi-dimension arrays svn path=/trunk/; revision=418 --- ChangeLog | 6 ++++++ gobject/valacodegenerator.vala | 13 ++++++++----- gobject/valacodegeneratorassignment.vala | 9 ++++++--- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2a15c31..80e3d41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-08-06 Jürg Billeter + + * gobject/valacodegenerator.vala, + gobject/valacodegeneratorassignment.vala: fixes for multi-dimension + arrays + 2007-08-05 Jürg Billeter * vapi/Makefile.am, vapi/gtkmozembed.vala: add GtkMozEmbed bindings, diff --git a/gobject/valacodegenerator.vala b/gobject/valacodegenerator.vala index 057585d..edf9b7d 100644 --- a/gobject/valacodegenerator.vala +++ b/gobject/valacodegenerator.vala @@ -444,13 +444,16 @@ public class Vala.CodeGenerator : CodeVisitor { if (f.type_reference.data_type is Array && !f.no_array_length && f.initializer is ArrayCreationExpression) { + var array = (Array) f.type_reference.data_type; var ma = new MemberAccess.simple (f.name); ma.symbol_reference = f; - var array_len_lhs = get_array_length_cexpression (ma, 1); Gee.List sizes = ((ArrayCreationExpression) f.initializer).get_sizes (); - var size = sizes[0]; - instance_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (array_len_lhs, (CCodeExpression) size.ccodenode))); + for (int dim = 1; dim <= array.rank; dim++) { + var array_len_lhs = get_array_length_cexpression (ma, dim); + var size = sizes[dim - 1]; + instance_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (array_len_lhs, (CCodeExpression) size.ccodenode))); + } } } @@ -2067,8 +2070,8 @@ public class Vala.CodeGenerator : CodeVisitor { } else { // access to element in an array for (int i = 1; i < rank; i++) { - var cmul = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, cindex, get_array_length_cexpression (expr.container, i + 1)); - cindex = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, cmul, (CCodeExpression) indices[i].ccodenode); + var cmul = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeParenthesizedExpression (cindex), get_array_length_cexpression (expr.container, i + 1)); + cindex = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, cmul, new CCodeParenthesizedExpression ((CCodeExpression) indices[i].ccodenode)); } expr.ccodenode = new CCodeElementAccess (ccontainer, cindex); } diff --git a/gobject/valacodegeneratorassignment.vala b/gobject/valacodegeneratorassignment.vala index 4633cf5..c334f96 100644 --- a/gobject/valacodegeneratorassignment.vala +++ b/gobject/valacodegeneratorassignment.vala @@ -268,9 +268,12 @@ public class Vala.CodeGenerator { } if (array) { - var lhs_array_len = get_array_length_cexpression (a.left, 1); - var rhs_array_len = get_array_length_cexpression (a.right, 1); - ccomma.append_expression (new CCodeAssignment (lhs_array_len, rhs_array_len)); + var arr = (Array) a.left.static_type.data_type; + for (int dim = 1; dim <= arr.rank; dim++) { + var lhs_array_len = get_array_length_cexpression (a.left, dim); + var rhs_array_len = get_array_length_cexpression (a.right, dim); + ccomma.append_expression (new CCodeAssignment (lhs_array_len, rhs_array_len)); + } } ccomma.append_expression (new CCodeIdentifier (temp_decl.name)); -- 2.7.4