stage4/generate_c/generate_c.cc
changeset 244 3a478229db8b
parent 241 0ba6d614573e
child 248 9cb18ec14fa2
--- a/stage4/generate_c/generate_c.cc	Thu May 20 23:36:53 2010 +0200
+++ b/stage4/generate_c/generate_c.cc	Wed Jun 02 18:21:15 2010 +0200
@@ -674,11 +674,11 @@
   delete vardecl;
   
   /* (A.4) Generate private internal variables for SFC */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, generate_c_sfcdecl_c::sfcdecl_sd);
-  sfcdecl->print(symbol->fblock_body);
+  sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, symbol);
+  sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::sfcdecl_sd);
   delete sfcdecl;
   s4o_incl.print("\n");
-  
+
   /* (A.5) Function Block data structure type name. */
   s4o_incl.indent_left();
   s4o_incl.print("} ");
@@ -720,25 +720,23 @@
   vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->");
   delete vardecl;
   s4o.print("\n");
+
+  sfcdecl = new generate_c_sfcdecl_c(&s4o, symbol, FB_FUNCTION_PARAM"->");
+
   /* (B.3) Generate private internal variables for SFC */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::sfcinit_sd);
-  sfcdecl->print(symbol->fblock_body, FB_FUNCTION_PARAM"->");
-  delete sfcdecl;
+  sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::sfcinit_sd);
+
   s4o.indent_left();
   s4o.print(s4o.indent_spaces + "}\n\n");
 
   
   /* (C) Function with FB body */
   /* (C.1) Step definitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepdef_sd);
-  sfcdecl->print(symbol->fblock_body);
-  delete sfcdecl;
+  sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::stepdef_sd);
   
   /* (C.2) Action definitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actiondef_sd);
-  sfcdecl->print(symbol->fblock_body);
-  delete sfcdecl;
-  
+  sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::actiondef_sd);
+
   /* (C.3) Function declaration */
   s4o.print("// Code part\n");
   /* function interface */
@@ -798,13 +796,11 @@
   s4o.print(s4o.indent_spaces + "() \n\n");
 
   /* (C.6) Step undefinitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepundef_sd);
-  sfcdecl->print(symbol->fblock_body);
-  delete sfcdecl;
-  
+  sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::stepundef_sd);
+
   /* (C.7) Action undefinitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actionundef_sd);
-  sfcdecl->print(symbol->fblock_body);
+  sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::actionundef_sd);
+
   delete sfcdecl;
 
   s4o.indent_left();
@@ -864,10 +860,12 @@
                 generate_c_vardecl_c::external_vt);
   vardecl->print(symbol->var_declarations);
   delete vardecl;
+
   /* (A.4) Generate private internal variables for SFC */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, generate_c_sfcdecl_c::sfcdecl_sd);
-  sfcdecl->print(symbol->function_block_body);
+  sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, symbol);
+  sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::sfcdecl_sd);
   delete sfcdecl;
+  s4o_incl.print("\n");
   
   /* (A.5) Program data structure type name. */
   s4o_incl.indent_left();
@@ -908,24 +906,21 @@
   vardecl->print(symbol->var_declarations, NULL,  FB_FUNCTION_PARAM"->");
   delete vardecl;
   s4o.print("\n");
+
+  sfcdecl = new generate_c_sfcdecl_c(&s4o, symbol, FB_FUNCTION_PARAM"->");
+
   /* (B.3) Generate private internal variables for SFC */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::sfcinit_sd);
-  sfcdecl->print(symbol->function_block_body,FB_FUNCTION_PARAM"->");
-  delete sfcdecl;
+  sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::sfcinit_sd);
 
   s4o.indent_left();
   s4o.print(s4o.indent_spaces + "}\n\n");
 
   /* (C) Function with PROGRAM body */
   /* (C.1) Step definitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepdef_sd);
-  sfcdecl->print(symbol->function_block_body);
-  delete sfcdecl;
+  sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::stepdef_sd);
   
   /* (C.2) Action definitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actiondef_sd);
-  sfcdecl->print(symbol->function_block_body);
-  delete sfcdecl;
+  sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::actiondef_sd);
 
   /* (C.3) Function declaration */
   s4o.print("// Code part\n");
@@ -961,15 +956,13 @@
   s4o.print(s4o.indent_spaces + "() \n\n");
 
   /* (C.6) Step undefinitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepundef_sd);
-  sfcdecl->print(symbol->function_block_body);
+  sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::stepundef_sd);
+  
+  /* (C.7) Action undefinitions */
+  sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::actionundef_sd);
+  
   delete sfcdecl;
-  
-  /* (C.7) Action undefinitions */
-  sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actionundef_sd);
-  sfcdecl->print(symbol->function_block_body);
-  delete sfcdecl;
-  
+
   s4o.indent_left();
   s4o.print("\n\n\n\n");