stage4/generate_c/generate_c.cc
changeset 244 3a478229db8b
parent 241 0ba6d614573e
child 248 9cb18ec14fa2
equal deleted inserted replaced
242:0036357a990f 244:3a478229db8b
   672                                      generate_c_vardecl_c::external_vt);
   672                                      generate_c_vardecl_c::external_vt);
   673   vardecl->print(symbol->var_declarations);
   673   vardecl->print(symbol->var_declarations);
   674   delete vardecl;
   674   delete vardecl;
   675   
   675   
   676   /* (A.4) Generate private internal variables for SFC */
   676   /* (A.4) Generate private internal variables for SFC */
   677   sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, generate_c_sfcdecl_c::sfcdecl_sd);
   677   sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, symbol);
   678   sfcdecl->print(symbol->fblock_body);
   678   sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::sfcdecl_sd);
   679   delete sfcdecl;
   679   delete sfcdecl;
   680   s4o_incl.print("\n");
   680   s4o_incl.print("\n");
   681   
   681 
   682   /* (A.5) Function Block data structure type name. */
   682   /* (A.5) Function Block data structure type name. */
   683   s4o_incl.indent_left();
   683   s4o_incl.indent_left();
   684   s4o_incl.print("} ");
   684   s4o_incl.print("} ");
   685   symbol->fblock_name->accept(*typedecl);
   685   symbol->fblock_name->accept(*typedecl);
   686   s4o_incl.print(";\n\n");
   686   s4o_incl.print(";\n\n");
   718                                      generate_c_vardecl_c::en_vt       |
   718                                      generate_c_vardecl_c::en_vt       |
   719                                      generate_c_vardecl_c::eno_vt);
   719                                      generate_c_vardecl_c::eno_vt);
   720   vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->");
   720   vardecl->print(symbol->var_declarations, NULL, FB_FUNCTION_PARAM"->");
   721   delete vardecl;
   721   delete vardecl;
   722   s4o.print("\n");
   722   s4o.print("\n");
       
   723 
       
   724   sfcdecl = new generate_c_sfcdecl_c(&s4o, symbol, FB_FUNCTION_PARAM"->");
       
   725 
   723   /* (B.3) Generate private internal variables for SFC */
   726   /* (B.3) Generate private internal variables for SFC */
   724   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::sfcinit_sd);
   727   sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::sfcinit_sd);
   725   sfcdecl->print(symbol->fblock_body, FB_FUNCTION_PARAM"->");
   728 
   726   delete sfcdecl;
       
   727   s4o.indent_left();
   729   s4o.indent_left();
   728   s4o.print(s4o.indent_spaces + "}\n\n");
   730   s4o.print(s4o.indent_spaces + "}\n\n");
   729 
   731 
   730   
   732   
   731   /* (C) Function with FB body */
   733   /* (C) Function with FB body */
   732   /* (C.1) Step definitions */
   734   /* (C.1) Step definitions */
   733   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepdef_sd);
   735   sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::stepdef_sd);
   734   sfcdecl->print(symbol->fblock_body);
       
   735   delete sfcdecl;
       
   736   
   736   
   737   /* (C.2) Action definitions */
   737   /* (C.2) Action definitions */
   738   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actiondef_sd);
   738   sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::actiondef_sd);
   739   sfcdecl->print(symbol->fblock_body);
   739 
   740   delete sfcdecl;
       
   741   
       
   742   /* (C.3) Function declaration */
   740   /* (C.3) Function declaration */
   743   s4o.print("// Code part\n");
   741   s4o.print("// Code part\n");
   744   /* function interface */
   742   /* function interface */
   745   s4o.print("void ");
   743   s4o.print("void ");
   746   symbol->fblock_name->accept(*this);
   744   symbol->fblock_name->accept(*this);
   796   symbol->fblock_name->accept(*this);
   794   symbol->fblock_name->accept(*this);
   797   s4o.print(FB_FUNCTION_SUFFIX);
   795   s4o.print(FB_FUNCTION_SUFFIX);
   798   s4o.print(s4o.indent_spaces + "() \n\n");
   796   s4o.print(s4o.indent_spaces + "() \n\n");
   799 
   797 
   800   /* (C.6) Step undefinitions */
   798   /* (C.6) Step undefinitions */
   801   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepundef_sd);
   799   sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::stepundef_sd);
   802   sfcdecl->print(symbol->fblock_body);
   800 
   803   delete sfcdecl;
       
   804   
       
   805   /* (C.7) Action undefinitions */
   801   /* (C.7) Action undefinitions */
   806   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actionundef_sd);
   802   sfcdecl->generate(symbol->fblock_body, generate_c_sfcdecl_c::actionundef_sd);
   807   sfcdecl->print(symbol->fblock_body);
   803 
   808   delete sfcdecl;
   804   delete sfcdecl;
   809 
   805 
   810   s4o.indent_left();
   806   s4o.indent_left();
   811   s4o.print("\n\n\n\n");
   807   s4o.print("\n\n\n\n");
   812 
   808 
   862                 generate_c_vardecl_c::private_vt |
   858                 generate_c_vardecl_c::private_vt |
   863                 generate_c_vardecl_c::located_vt |
   859                 generate_c_vardecl_c::located_vt |
   864                 generate_c_vardecl_c::external_vt);
   860                 generate_c_vardecl_c::external_vt);
   865   vardecl->print(symbol->var_declarations);
   861   vardecl->print(symbol->var_declarations);
   866   delete vardecl;
   862   delete vardecl;
       
   863 
   867   /* (A.4) Generate private internal variables for SFC */
   864   /* (A.4) Generate private internal variables for SFC */
   868   sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, generate_c_sfcdecl_c::sfcdecl_sd);
   865   sfcdecl = new generate_c_sfcdecl_c(&s4o_incl, symbol);
   869   sfcdecl->print(symbol->function_block_body);
   866   sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::sfcdecl_sd);
   870   delete sfcdecl;
   867   delete sfcdecl;
       
   868   s4o_incl.print("\n");
   871   
   869   
   872   /* (A.5) Program data structure type name. */
   870   /* (A.5) Program data structure type name. */
   873   s4o_incl.indent_left();
   871   s4o_incl.indent_left();
   874   s4o_incl.print("} ");
   872   s4o_incl.print("} ");
   875   symbol->program_type_name->accept(*typedecl);
   873   symbol->program_type_name->accept(*typedecl);
   906                                      generate_c_vardecl_c::located_vt  |
   904                                      generate_c_vardecl_c::located_vt  |
   907                                      generate_c_vardecl_c::external_vt);
   905                                      generate_c_vardecl_c::external_vt);
   908   vardecl->print(symbol->var_declarations, NULL,  FB_FUNCTION_PARAM"->");
   906   vardecl->print(symbol->var_declarations, NULL,  FB_FUNCTION_PARAM"->");
   909   delete vardecl;
   907   delete vardecl;
   910   s4o.print("\n");
   908   s4o.print("\n");
       
   909 
       
   910   sfcdecl = new generate_c_sfcdecl_c(&s4o, symbol, FB_FUNCTION_PARAM"->");
       
   911 
   911   /* (B.3) Generate private internal variables for SFC */
   912   /* (B.3) Generate private internal variables for SFC */
   912   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::sfcinit_sd);
   913   sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::sfcinit_sd);
   913   sfcdecl->print(symbol->function_block_body,FB_FUNCTION_PARAM"->");
       
   914   delete sfcdecl;
       
   915 
   914 
   916   s4o.indent_left();
   915   s4o.indent_left();
   917   s4o.print(s4o.indent_spaces + "}\n\n");
   916   s4o.print(s4o.indent_spaces + "}\n\n");
   918 
   917 
   919   /* (C) Function with PROGRAM body */
   918   /* (C) Function with PROGRAM body */
   920   /* (C.1) Step definitions */
   919   /* (C.1) Step definitions */
   921   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepdef_sd);
   920   sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::stepdef_sd);
   922   sfcdecl->print(symbol->function_block_body);
       
   923   delete sfcdecl;
       
   924   
   921   
   925   /* (C.2) Action definitions */
   922   /* (C.2) Action definitions */
   926   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actiondef_sd);
   923   sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::actiondef_sd);
   927   sfcdecl->print(symbol->function_block_body);
       
   928   delete sfcdecl;
       
   929 
   924 
   930   /* (C.3) Function declaration */
   925   /* (C.3) Function declaration */
   931   s4o.print("// Code part\n");
   926   s4o.print("// Code part\n");
   932   /* function interface */
   927   /* function interface */
   933   s4o.print("void ");
   928   s4o.print("void ");
   959   symbol->program_type_name->accept(*this);
   954   symbol->program_type_name->accept(*this);
   960   s4o.print(FB_FUNCTION_SUFFIX);
   955   s4o.print(FB_FUNCTION_SUFFIX);
   961   s4o.print(s4o.indent_spaces + "() \n\n");
   956   s4o.print(s4o.indent_spaces + "() \n\n");
   962 
   957 
   963   /* (C.6) Step undefinitions */
   958   /* (C.6) Step undefinitions */
   964   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::stepundef_sd);
   959   sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::stepundef_sd);
   965   sfcdecl->print(symbol->function_block_body);
   960   
       
   961   /* (C.7) Action undefinitions */
       
   962   sfcdecl->generate(symbol->function_block_body, generate_c_sfcdecl_c::actionundef_sd);
       
   963   
   966   delete sfcdecl;
   964   delete sfcdecl;
   967   
   965 
   968   /* (C.7) Action undefinitions */
       
   969   sfcdecl = new generate_c_sfcdecl_c(&s4o, generate_c_sfcdecl_c::actionundef_sd);
       
   970   sfcdecl->print(symbol->function_block_body);
       
   971   delete sfcdecl;
       
   972   
       
   973   s4o.indent_left();
   966   s4o.indent_left();
   974   s4o.print("\n\n\n\n");
   967   s4o.print("\n\n\n\n");
   975 
   968 
   976   return NULL;
   969   return NULL;
   977 }
   970 }