[vala] Use intermediate variables to initialize static structs



commit 0958339872e8510a34f85edbc5a60ee21d46d840
Author: Marc-André Lureau <marcandre lureau gmail com>
Date:   Thu Jan 28 01:01:04 2010 +0100

    Use intermediate variables to initialize static structs
    
    Fixes bug 608250.

 codegen/valaccodebasemodule.vala |   20 +++++++++++++++++++-
 1 files changed, 19 insertions(+), 1 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index cde57cf..ca5af4a 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) {



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