stage4/generate_c/generate_c.cc
changeset 145 72ae82e65dbc
parent 139 668a54686827
child 146 eef5e62048c7
equal deleted inserted replaced
144:0ee0055a8ffe 145:72ae82e65dbc
   567   /* (A.3) Function parameters */
   567   /* (A.3) Function parameters */
   568   s4o.indent_right();
   568   s4o.indent_right();
   569   vardecl = new generate_c_vardecl_c(&s4o,
   569   vardecl = new generate_c_vardecl_c(&s4o,
   570   				      generate_c_vardecl_c::finterface_vf,
   570   				      generate_c_vardecl_c::finterface_vf,
   571   				      generate_c_vardecl_c::input_vt |
   571   				      generate_c_vardecl_c::input_vt |
   572 				      generate_c_vardecl_c::output_vt |
   572 				        generate_c_vardecl_c::output_vt |
   573 				      generate_c_vardecl_c::inoutput_vt);
   573 				        generate_c_vardecl_c::inoutput_vt);
   574   vardecl->print(symbol->var_declarations_list);
   574   vardecl->print(symbol->var_declarations_list);
   575   delete vardecl;
   575   delete vardecl;
   576   s4o.indent_left();
   576   s4o.indent_left();
   577 
   577 
   578   s4o.print(")\n" + s4o.indent_spaces + "{\n");
   578   s4o.print(")\n" + s4o.indent_spaces + "{\n");
   579 
   579 
   580   /* (B) Function local variable declaration */
   580   /* (B) Function local variable declaration */
   581     /* (B.1) Variables declared in ST source code */
   581     /* (B.1) Variables declared in ST source code */
   582   s4o.indent_right();
   582   s4o.indent_right();
       
   583   vardecl = new generate_c_vardecl_c(&s4o,
       
   584                 generate_c_vardecl_c::foutputdecl_vf,
       
   585                 generate_c_vardecl_c::output_vt |
       
   586                 generate_c_vardecl_c::inoutput_vt);
       
   587   vardecl->print(symbol->var_declarations_list);
       
   588   delete vardecl;
       
   589   
   583   vardecl = new generate_c_vardecl_c(&s4o, generate_c_vardecl_c::localinit_vf, generate_c_vardecl_c::private_vt);
   590   vardecl = new generate_c_vardecl_c(&s4o, generate_c_vardecl_c::localinit_vf, generate_c_vardecl_c::private_vt);
   584   vardecl->print(symbol->var_declarations_list);
   591   vardecl->print(symbol->var_declarations_list);
   585   delete vardecl;
   592   delete vardecl;
   586 
   593 
   587     /* (B.2) Temporary variable for function's return value */
   594     /* (B.2) Temporary variable for function's return value */
   600   s4o.print(";\n\n");
   607   s4o.print(";\n\n");
   601 
   608 
   602   /* (C) Function body */
   609   /* (C) Function body */
   603   generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol);
   610   generate_c_SFC_IL_ST_c generate_c_code(&s4o, symbol);
   604   symbol->function_body->accept(generate_c_code);
   611   symbol->function_body->accept(generate_c_code);
       
   612   
       
   613   vardecl = new generate_c_vardecl_c(&s4o,
       
   614                 generate_c_vardecl_c::foutputassign_vf,
       
   615                 generate_c_vardecl_c::output_vt |
       
   616                 generate_c_vardecl_c::inoutput_vt);
       
   617   vardecl->print(symbol->var_declarations_list);
       
   618   delete vardecl;
       
   619   
   605   s4o.print(s4o.indent_spaces + "return ");
   620   s4o.print(s4o.indent_spaces + "return ");
   606   symbol->derived_function_name->accept(*this);
   621   symbol->derived_function_name->accept(*this);
   607   s4o.print(";\n");
   622   s4o.print(";\n");
   608   s4o.indent_left();
   623   s4o.indent_left();
   609   s4o.print(s4o.indent_spaces + "}\n\n\n");
   624   s4o.print(s4o.indent_spaces + "}\n\n\n");