From: Jürg Billeter Date: Sun, 11 Jul 2010 13:20:39 +0000 (+0200) Subject: dova: Add support for module init function X-Git-Tag: 0.9.3~18 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f39734805fd2c7711e8daa933b3f29d15f1f145f;p=thirdparty%2Fvala.git dova: Add support for module init function --- diff --git a/codegen/valadovabasemodule.vala b/codegen/valadovabasemodule.vala index 2526caaba..d5028d63a 100644 --- a/codegen/valadovabasemodule.vala +++ b/codegen/valadovabasemodule.vala @@ -118,6 +118,7 @@ internal class Vala.DovaBaseModule : CCodeModule { string? csource_filename; public CCodeFragment source_type_member_definition; + public CCodeFragment module_init_fragment; public CCodeFragment instance_init_fragment; public CCodeFragment instance_finalize_fragment; @@ -242,6 +243,7 @@ internal class Vala.DovaBaseModule : CCodeModule { source_declarations = new CCodeDeclarationSpace (); + module_init_fragment = new CCodeFragment (); source_type_member_definition = new CCodeFragment (); next_temp_var_id = 0; @@ -503,10 +505,12 @@ internal class Vala.DovaBaseModule : CCodeModule { var_decl.initializer = default_value_for_type (f.field_type, true); if (f.initializer != null) { - var init = (CCodeExpression) f.initializer.ccodenode; - if (is_constant_ccode_expression (init)) { - var_decl.initializer = init; - } + var rhs = (CCodeExpression) f.initializer.ccodenode; + + module_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (lhs, rhs))); + + append_temp_decl (module_init_fragment, temp_vars); + temp_vars.clear (); } var var_def = new CCodeDeclaration (field_ctype); diff --git a/codegen/valadovaobjectmodule.vala b/codegen/valadovaobjectmodule.vala index a673d49d6..f04525edc 100644 --- a/codegen/valadovaobjectmodule.vala +++ b/codegen/valadovaobjectmodule.vala @@ -1185,6 +1185,10 @@ internal class Vala.DovaObjectModule : DovaArrayModule { var cinit = new CCodeFragment (); function.block.prepend_statement (cinit); + if (context.module_init_method == m) { + cinit.append (module_init_fragment); + } + if (m.closure) { // add variables for parent closure blocks // as closures only have one parameter for the innermost closure block @@ -1401,6 +1405,8 @@ internal class Vala.DovaObjectModule : DovaArrayModule { cmain.add_parameter (new CCodeFormalParameter ("argv", "char **")); var main_block = new CCodeBlock (); + main_block.add_statement (new CCodeExpressionStatement (new CCodeFunctionCall (new CCodeIdentifier ("dova_init")))); + var cdecl = new CCodeDeclaration ("int"); cdecl.add_declarator (new CCodeVariableDeclarator ("result", new CCodeConstant ("0"))); main_block.add_statement (cdecl);