stage4/generate_c/generate_c_sfc.cc
changeset 392 9b88b8b6bccd
parent 350 2c3c4dc34979
child 417 d48f53715f77
equal deleted inserted replaced
391:4798bd4739d0 392:9b88b8b6bccd
    94           symbol->accept(*this);
    94           symbol->accept(*this);
    95           break;
    95           break;
    96       }
    96       }
    97     }
    97     }
    98 
    98 
    99     void print_step_argument(symbol_c *step_name, const char* argument) {
    99     void print_step_argument(symbol_c *step_name, const char* argument, bool setter=false) {
   100       print_variable_prefix();
   100       print_variable_prefix();
       
   101       if (setter) s4o.print(",");
   101       s4o.print("__step_list[");
   102       s4o.print("__step_list[");
   102       s4o.print(SFC_STEP_ACTION_PREFIX);
   103       s4o.print(SFC_STEP_ACTION_PREFIX);
   103       step_name->accept(*this);
   104       step_name->accept(*this);
   104       s4o.print("].");
   105       s4o.print("].");
   105       s4o.print(argument);
   106       s4o.print(argument);
   106     }
   107     }
   107 
   108 
   108     void print_action_argument(symbol_c *action_name, const char* argument) {
   109     void print_action_argument(symbol_c *action_name, const char* argument, bool setter=false) {
   109       print_variable_prefix();
   110       print_variable_prefix();
       
   111       if (setter) s4o.print(",");
   110       s4o.print("__action_list[");
   112       s4o.print("__action_list[");
   111       s4o.print(SFC_STEP_ACTION_PREFIX);
   113       s4o.print(SFC_STEP_ACTION_PREFIX);
   112       action_name->accept(*this);
   114       action_name->accept(*this);
   113       s4o.print("].");
   115       s4o.print("].");
   114       s4o.print(argument);
   116       s4o.print(argument);
   120 
   122 
   121     void print_reset_step(symbol_c *step_name) {
   123     void print_reset_step(symbol_c *step_name) {
   122       s4o.print(s4o.indent_spaces);
   124       s4o.print(s4o.indent_spaces);
   123       s4o.print(SET_VAR);
   125       s4o.print(SET_VAR);
   124       s4o.print("(");
   126       s4o.print("(");
   125       print_step_argument(step_name, "state");
   127       print_step_argument(step_name, "state", true);
   126       s4o.print(",0);\n");
   128       s4o.print(",0);\n");
   127     }
   129     }
   128     
   130     
   129     void print_set_step(symbol_c *step_name) {
   131     void print_set_step(symbol_c *step_name) {
   130       s4o.print(s4o.indent_spaces);
   132       s4o.print(s4o.indent_spaces);
   131       s4o.print(SET_VAR);
   133       s4o.print(SET_VAR);
   132       s4o.print("(");
   134       s4o.print("(");
   133       print_step_argument(step_name, "state");
   135       print_step_argument(step_name, "state", true);
   134       s4o.print(",1);\n" + s4o.indent_spaces);
   136       s4o.print(",1);\n" + s4o.indent_spaces);
   135       print_step_argument(step_name, "elapsed_time");
   137       print_step_argument(step_name, "elapsed_time");
   136       s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
   138       s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
   137     }
   139     }
   138     
   140     
   281           s4o.print(s4o.indent_spaces + "}\n");
   283           s4o.print(s4o.indent_spaces + "}\n");
   282           s4o.print(s4o.indent_spaces);
   284           s4o.print(s4o.indent_spaces);
   283           s4o.print(SET_VAR);
   285           s4o.print(SET_VAR);
   284           s4o.print("(");
   286           s4o.print("(");
   285           print_variable_prefix();
   287           print_variable_prefix();
   286           s4o.print("__transition_list[");
   288           s4o.print(",__transition_list[");
   287           print_transition_number();
   289           print_transition_number();
   288           s4o.print("],0);\n");
   290           s4o.print("],0);\n");
   289           s4o.indent_left();
   291           s4o.indent_left();
   290           s4o.print(s4o.indent_spaces + "}\n");
   292           s4o.print(s4o.indent_spaces + "}\n");
   291           break;
   293           break;
   335             s4o.print(s4o.indent_spaces);
   337             s4o.print(s4o.indent_spaces);
   336             symbol->transition_condition_il->accept(*generate_c_il);
   338             symbol->transition_condition_il->accept(*generate_c_il);
   337             s4o.print(SET_VAR);
   339             s4o.print(SET_VAR);
   338             s4o.print("(");
   340             s4o.print("(");
   339             print_variable_prefix();
   341             print_variable_prefix();
       
   342             s4o.print(",");
   340             if (wanted_sfcgeneration == transitiontestdebug_sg)
   343             if (wanted_sfcgeneration == transitiontestdebug_sg)
   341               s4o.print("__debug_");
   344               s4o.print("__debug_");
   342             else
   345             else
   343               s4o.print("__");
   346               s4o.print("__");
   344             s4o.print("transition_list[");
   347             s4o.print("transition_list[");
   345             print_transition_number();
   348             print_transition_number();
   346             s4o.print("],");
   349             s4o.print("],");
   347             generate_c_il->print_backup_variable();
   350             generate_c_il->print_backup_variable();
       
   351             generate_c_il->reset_default_variable_name();
   348             s4o.print(");\n");
   352             s4o.print(");\n");
   349           }
   353           }
   350           // Transition condition is in ST
   354           // Transition condition is in ST
   351           if (symbol->transition_condition_st != NULL) {
   355           if (symbol->transition_condition_st != NULL) {
   352             s4o.print(s4o.indent_spaces);
   356             s4o.print(s4o.indent_spaces);
   353             s4o.print(SET_VAR);
   357             s4o.print(SET_VAR);
   354             s4o.print("(");
   358             s4o.print("(");
   355             print_variable_prefix();
   359             print_variable_prefix();
       
   360             s4o.print(",");
   356             if (wanted_sfcgeneration == transitiontestdebug_sg)
   361             if (wanted_sfcgeneration == transitiontestdebug_sg)
   357               s4o.print("__debug_");
   362               s4o.print("__debug_");
   358             else
   363             else
   359               s4o.print("__");
   364               s4o.print("__");
   360             s4o.print("transition_list[");
   365             s4o.print("transition_list[");
   368             s4o.indent_right();
   373             s4o.indent_right();
   369             s4o.print(s4o.indent_spaces);
   374             s4o.print(s4o.indent_spaces);
   370             s4o.print(SET_VAR);
   375             s4o.print(SET_VAR);
   371             s4o.print("(");
   376             s4o.print("(");
   372             print_variable_prefix();
   377             print_variable_prefix();
   373             s4o.print("__debug_transition_list[");
   378             s4o.print(",__debug_transition_list[");
   374             print_transition_number();
   379             print_transition_number();
   375             s4o.print("],");
   380             s4o.print("],");
   376             s4o.print(GET_VAR);
   381             s4o.print(GET_VAR);
   377             s4o.print("(");
   382             s4o.print("(");
   378             print_variable_prefix();
   383             print_variable_prefix();
   840           symbol_c *var_decl = search_var_instance_decl->get_decl(pt->symbol);
   845           symbol_c *var_decl = search_var_instance_decl->get_decl(pt->symbol);
   841           if (var_decl != NULL) {
   846           if (var_decl != NULL) {
   842             unsigned int vartype = search_var_instance_decl->get_vartype();
   847             unsigned int vartype = search_var_instance_decl->get_vartype();
   843 
   848 
   844             s4o.print(s4o.indent_spaces);
   849             s4o.print(s4o.indent_spaces);
   845             if (vartype == search_var_instance_decl_c::external_vt) {
   850             if (vartype == search_var_instance_decl_c::external_vt)
   846           	  s4o.print(SET_EXTERNAL);
   851           	  s4o.print(SET_EXTERNAL);
   847           	  s4o.print("(");
   852           	else if (vartype == search_var_instance_decl_c::located_vt)
   848           	  pt->symbol->accept(*this);
   853           	  s4o.print(SET_LOCATED);
   849               s4o.print(",");
   854           	else
   850             }
   855           	  s4o.print(SET_VAR);
   851           	else {
   856             s4o.print("(");
   852           	  if (vartype == search_var_instance_decl_c::located_vt)
   857           	print_variable_prefix();
   853           	    s4o.print(SET_LOCATED);
   858           	s4o.print(",");
   854           	  else
   859           	pt->symbol->accept(*this);
   855           	    s4o.print(SET_VAR);
       
   856               s4o.print("(");
       
   857           	}
       
   858             print_variable_prefix();
       
   859             pt->symbol->accept(*this);
       
   860             s4o.print(",");
   860             s4o.print(",");
   861             print_variable_prefix();
   861             print_variable_prefix();
   862             s4o.print("__action_list[");
   862             s4o.print("__action_list[");
   863             s4o.print(SFC_STEP_ACTION_PREFIX);
   863             s4o.print(SFC_STEP_ACTION_PREFIX);
   864             pt->symbol->accept(*this);
   864             pt->symbol->accept(*this);