diff -r 08bcc40be1fa -r d5b55ac4efe6 stage4/generate_cc/generate_cc.cc --- a/stage4/generate_cc/generate_cc.cc Wed Apr 18 16:43:18 2007 +0200 +++ b/stage4/generate_cc/generate_cc.cc Thu May 10 17:39:50 2007 +0200 @@ -146,6 +146,9 @@ #define FB_FUNCTION_SUFFIX "_body__" +/* Idem as body, but for initializer FB function */ +#define FB_INIT_SUFFIX "_init__" + /* The FB body function is passed as the only parameter a pointer to the FB data * structure instance. The name of this parameter is given by the following constant. * In order not to clash with any variable in the IL and ST source codem the @@ -524,9 +527,10 @@ s4o.print(s4o.indent_spaces + "// FB private variables - TEMP, private and located variables\n"); vardecl = new generate_cc_vardecl_c(&s4o, generate_cc_vardecl_c::local_vf, - generate_cc_vardecl_c::temp_vt | + generate_cc_vardecl_c::temp_vt | generate_cc_vardecl_c::private_vt | - generate_cc_vardecl_c::located_vt); + generate_cc_vardecl_c::located_vt | + generate_cc_vardecl_c::external_vt); vardecl->print(symbol->var_declarations); delete vardecl; s4o.print("\n"); @@ -538,6 +542,47 @@ s4o.print(";\n\n"); + + + + + + + + + /* (B) Constructor */ + /* (B.1) Constructor name... */ + s4o.print(s4o.indent_spaces + "void "); + symbol->fblock_name->accept(*this); + s4o.print(FB_INIT_SUFFIX); + s4o.print("("); + + /* first and only parameter is a pointer to the data */ + symbol->fblock_name->accept(*this); + s4o.print(" *"); + s4o.print(FB_FUNCTION_PARAM); + s4o.print(") {\n"); + s4o.indent_right(); + + /* (B.2) Member initializations... */ + s4o.print(s4o.indent_spaces); + vardecl = new generate_cc_vardecl_c(&s4o, + generate_cc_vardecl_c::constructorinit_vf, + generate_cc_vardecl_c::input_vt | + generate_cc_vardecl_c::output_vt | + generate_cc_vardecl_c::inoutput_vt | + generate_cc_vardecl_c::private_vt | + generate_cc_vardecl_c::external_vt); + vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->"); + delete vardecl; + s4o.indent_left(); + s4o.print("\n" + s4o.indent_spaces + "}\n\n"); + + + + + + /* (B) Function with FB body */ /* (B.1) Function declaration */ s4o.print("// Code part\n");