From: Marc-André Lureau Date: Thu, 28 Jan 2010 00:01:04 +0000 (+0100) Subject: Use intermediate variables to initialize static structs X-Git-Tag: 0.7.10~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0958339872e8510a34f85edbc5a60ee21d46d840;p=thirdparty%2Fvala.git Use intermediate variables to initialize static structs Fixes bug 608250. --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index cde57cfb4..ca5af4a4a 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1177,7 +1177,25 @@ internal class Vala.CCodeBaseModule : CCodeModule { var rhs = (CCodeExpression) f.initializer.ccodenode; if (!is_constant_ccode_expression (rhs)) { if (f.parent_symbol is Class) { - class_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (lhs, rhs))); + if (f.initializer is InitializerList) { + var block = new CCodeBlock (); + var frag = new CCodeFragment (); + + var temp_decl = get_temp_variable (f.field_type); + var cdecl = new CCodeDeclaration (temp_decl.variable_type.get_cname ()); + var vardecl = new CCodeVariableDeclarator (temp_decl.name, rhs); + cdecl.add_declarator (vardecl); + vardecl.init0 = true; + frag.append (cdecl); + + var tmp = get_variable_cexpression (get_variable_cname (temp_decl.name)); + frag.append (new CCodeExpressionStatement (new CCodeAssignment (lhs, tmp))); + + block.add_statement (frag); + class_init_fragment.append (block); + } else { + class_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (lhs, rhs))); + } if (f.field_type is ArrayType && !f.no_array_length && f.initializer is ArrayCreationExpression) {