--- a/stage4/generate_cc/generate_cc.cc Wed Aug 01 13:50:14 2007 +0200
+++ b/stage4/generate_cc/generate_cc.cc Thu Aug 02 16:56:56 2007 +0200
@@ -189,8 +189,8 @@
#include "search_expression_type.cc"
#include "generate_cc_base.cc"
+#include "generate_cc_typedecl.cc"
#include "generate_cc_sfcdecl.cc"
-#include "generate_cc_typedecl.cc"
#include "generate_cc_vardecl.cc"
#include "generate_cc_configbody.cc"
#include "generate_location_list.cc"
@@ -751,6 +751,7 @@
//SYM_REF4(program_declaration_c, program_type_name, var_declarations, function_block_body, unused)
void *visit(program_declaration_c *symbol) {
generate_cc_vardecl_c *vardecl;
+ generate_cc_sfcdecl_c *sfcdecl;
TRACE("program_declaration_c");
/* start off by adding this declaration to the global
@@ -787,10 +788,10 @@
vardecl->print(symbol->var_declarations);
delete vardecl;
/* (A.4) Generate private internal variables for SFC */
- generate_cc_sfctables_c generate_cc_sfctables(&s4o);
- symbol->function_block_body->accept(generate_cc_sfctables);
- s4o.print("\n");
-
+ sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::sfcdecl_sg);
+ sfcdecl->print(symbol->function_block_body);
+ delete sfcdecl;
+
/* (A.5) Program data structure type name. */
s4o.indent_left();
s4o.print("} ");
@@ -823,15 +824,27 @@
generate_cc_vardecl_c::external_vt);
vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->");
delete vardecl;
+ s4o.print("\n");
+ /* (B.3) Generate private internal variables for SFC */
+ sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::sfcinit_sg);
+ sfcdecl->print(symbol->function_block_body,FB_FUNCTION_PARAM"->");
+ delete sfcdecl;
+
s4o.indent_left();
- s4o.print("\n" + s4o.indent_spaces + "}\n\n");
+ s4o.print(s4o.indent_spaces + "}\n\n");
/* (C) Function with PROGRAM body */
- /* (C.1) Step and Action definitions */
- generate_cc_sfcdecl_c generate_cc_sfcdecl(&s4o);
- symbol->function_block_body->accept(generate_cc_sfcdecl);
-
- /* (C.2) Function declaration */
+ /* (C.1) Step definitions */
+ sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::stepdef_sg);
+ sfcdecl->print(symbol->function_block_body);
+ delete sfcdecl;
+
+ /* (C.2) Action definitions */
+ sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::actiondef_sg);
+ sfcdecl->print(symbol->function_block_body);
+ delete sfcdecl;
+
+ /* (C.3) Function declaration */
s4o.print("// Code part\n");
/* function interface */
s4o.print("void ");
@@ -845,7 +858,7 @@
s4o.print(") {\n");
s4o.indent_right();
- /* (C.3) Initialize TEMP variables */
+ /* (C.4) Initialize TEMP variables */
/* function body */
s4o.print(s4o.indent_spaces + "// Initialise TEMP variables\n");
vardecl = new generate_cc_vardecl_c(&s4o,
@@ -855,7 +868,7 @@
delete vardecl;
s4o.print("\n");
- /* (C.4) Function code */
+ /* (C.5) Function code */
generate_cc_SFC_IL_ST_c generate_cc_code(&s4o, symbol, FB_FUNCTION_PARAM"->");
symbol->function_block_body->accept(generate_cc_code);
s4o.indent_left();
@@ -864,10 +877,16 @@
s4o.print(FB_FUNCTION_SUFFIX);
s4o.print(s4o.indent_spaces + "() \n\n");
- /* (C.5) Step and Action undefinitions */
- generate_cc_sfcundecl_c generate_cc_sfcundecl(&s4o);
- symbol->function_block_body->accept(generate_cc_sfcundecl);
-
+ /* (C.6) Step undefinitions */
+ sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::stepundef_sg);
+ sfcdecl->print(symbol->function_block_body);
+ delete sfcdecl;
+
+ /* (C.7) Action undefinitions */
+ sfcdecl = new generate_cc_sfcdecl_c(&s4o, generate_cc_sfcdecl_c::actionundef_sg);
+ sfcdecl->print(symbol->function_block_body);
+ delete sfcdecl;
+
s4o.indent_left();
s4o.print("\n\n\n\n");