string? csource_filename;
public CCodeFragment source_type_member_definition;
+ public CCodeFragment module_init_fragment;
public CCodeFragment instance_init_fragment;
public CCodeFragment instance_finalize_fragment;
source_declarations = new CCodeDeclarationSpace ();
+ module_init_fragment = new CCodeFragment ();
source_type_member_definition = new CCodeFragment ();
next_temp_var_id = 0;
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);
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
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);