vala r2205 - in trunk: . gobject



Author: juergbi
Date: Wed Dec 17 22:55:10 2008
New Revision: 2205
URL: http://svn.gnome.org/viewvc/vala?rev=2205&view=rev

Log:
2008-12-17  JÃrg Billeter  <j bitron ch>

	* gobject/valaccodebasemodule.vala:

	Fix initialization of static array fields, fixes bug 472545


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodebasemodule.vala

Modified: trunk/gobject/valaccodebasemodule.vala
==============================================================================
--- trunk/gobject/valaccodebasemodule.vala	(original)
+++ trunk/gobject/valaccodebasemodule.vala	Wed Dec 17 22:55:10 2008
@@ -973,6 +973,23 @@
 				if (!is_constant_ccode_expression (rhs)) {
 					if (f.parent_symbol is Class) {
 						class_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (lhs, rhs)));
+
+						if (f.field_type is ArrayType && !f.no_array_length &&
+						    f.initializer is ArrayCreationExpression) {
+							var array_type = (ArrayType) f.field_type;
+							var ma = new MemberAccess.simple (f.name);
+							ma.symbol_reference = f;
+					
+							Gee.List<Expression> sizes = ((ArrayCreationExpression) f.initializer).get_sizes ();
+							for (int dim = 1; dim <= array_type.rank; dim++) {
+								var array_len_lhs = head.get_array_length_cexpression (ma, dim);
+								var size = sizes[dim - 1];
+								class_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (array_len_lhs, (CCodeExpression) size.ccodenode)));
+							}
+						}
+
+						append_temp_decl (class_init_fragment, temp_vars);
+						temp_vars.clear ();
 					} else {
 						f.error = true;
 						Report.error (f.source_reference, "Non-constant field initializers not supported in this context");



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]