[vala] Use intermediate variables to initialize static structs
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vala] Use intermediate variables to initialize static structs
- Date: Wed, 3 Feb 2010 19:05:49 +0000 (UTC)
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]