stage4/generate_cc/generate_cc.cc
changeset 23 d5b55ac4efe6
parent 18 e6af5eb5f546
child 24 7e830409f72a
--- 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");