From: Jürg Billeter Date: Thu, 8 Apr 2010 09:06:27 +0000 (+0200) Subject: Fix type declaration order for captured variables and parameters X-Git-Tag: 0.8.1~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa872086a482ed8f61585ac603b0699f2d31f311;p=thirdparty%2Fvala.git Fix type declaration order for captured variables and parameters --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 7e99f283e..91b14e338 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1701,6 +1701,8 @@ internal class Vala.CCodeBaseModule : CCodeModule { } void capture_parameter (FormalParameter param, CCodeStruct data, CCodeBlock cblock, int block_id, CCodeBlock free_block) { + generate_type_declaration (param.parameter_type, source_declarations); + var param_type = param.parameter_type.copy (); param_type.value_owned = true; data.add_field (param_type.get_cname (), get_variable_cname (param.name)); @@ -1795,6 +1797,8 @@ internal class Vala.CCodeBaseModule : CCodeModule { } foreach (var local in local_vars) { if (local.captured) { + generate_type_declaration (local.variable_type, source_declarations); + data.add_field (local.variable_type.get_cname (), get_variable_cname (local.name) + local.variable_type.get_cdeclarator_suffix ()); if (local.variable_type is ArrayType) { @@ -1829,10 +1833,6 @@ internal class Vala.CCodeBaseModule : CCodeModule { } } - var typedef = new CCodeTypeDefinition ("struct _" + struct_name, new CCodeVariableDeclarator (struct_name)); - source_declarations.add_type_declaration (typedef); - source_declarations.add_type_definition (data); - var data_alloc = new CCodeFunctionCall (new CCodeIdentifier ("g_slice_new0")); data_alloc.add_argument (new CCodeIdentifier (struct_name)); @@ -1900,6 +1900,10 @@ internal class Vala.CCodeBaseModule : CCodeModule { cblock.add_statement (cfrag); } + var typedef = new CCodeTypeDefinition ("struct _" + struct_name, new CCodeVariableDeclarator (struct_name)); + source_declarations.add_type_declaration (typedef); + source_declarations.add_type_definition (data); + var data_free = new CCodeFunctionCall (new CCodeIdentifier ("g_slice_free")); data_free.add_argument (new CCodeIdentifier (struct_name)); data_free.add_argument (new CCodeIdentifier ("_data%d_".printf (block_id)));