]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dova: Add support for module init function
authorJürg Billeter <j@bitron.ch>
Sun, 11 Jul 2010 13:20:39 +0000 (15:20 +0200)
committerJürg Billeter <j@bitron.ch>
Sun, 11 Jul 2010 13:20:39 +0000 (15:20 +0200)
codegen/valadovabasemodule.vala
codegen/valadovaobjectmodule.vala

index 2526caabafe07c92e6a0b409a05c74d9ba6be7f5..d5028d63ac7f54a1ac414c461f9e5f3267edeb17 100644 (file)
@@ -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);
index a673d49d6f51e23e97c61b96fae40ef592815c4c..f04525edccdd57581f12b58c74377d5d04df733c 100644 (file)
@@ -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);