stage4/generate_c/generate_c_sfc.cc
changeset 885 b2604fc6d25c
parent 861 443e8243f289
child 897 8c3e91c385f5
equal deleted inserted replaced
880:599e88d12f9a 885:b2604fc6d25c
   134     void print_reset_step(symbol_c *step_name) {
   134     void print_reset_step(symbol_c *step_name) {
   135       s4o.print(s4o.indent_spaces);
   135       s4o.print(s4o.indent_spaces);
   136       s4o.print(SET_VAR);
   136       s4o.print(SET_VAR);
   137       s4o.print("(");
   137       s4o.print("(");
   138       print_step_argument(step_name, "state", true);
   138       print_step_argument(step_name, "state", true);
   139       s4o.print(",0);\n");
   139       s4o.print(",,0);\n");
   140     }
   140     }
   141     
   141     
   142     void print_set_step(symbol_c *step_name) {
   142     void print_set_step(symbol_c *step_name) {
   143       s4o.print(s4o.indent_spaces);
   143       s4o.print(s4o.indent_spaces);
   144       s4o.print(SET_VAR);
   144       s4o.print(SET_VAR);
   145       s4o.print("(");
   145       s4o.print("(");
   146       print_step_argument(step_name, "state", true);
   146       print_step_argument(step_name, "state", true);
   147       s4o.print(",1);\n" + s4o.indent_spaces);
   147       s4o.print(",,1);\n" + s4o.indent_spaces);
   148       print_step_argument(step_name, "elapsed_time");
   148       print_step_argument(step_name, "elapsed_time");
   149       s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
   149       s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
   150     }
   150     }
   151     
   151     
   152 /*********************************************/
   152 /*********************************************/
   297           s4o.print(SET_VAR);
   297           s4o.print(SET_VAR);
   298           s4o.print("(");
   298           s4o.print("(");
   299           print_variable_prefix();
   299           print_variable_prefix();
   300           s4o.print(",__transition_list[");
   300           s4o.print(",__transition_list[");
   301           print_transition_number();
   301           print_transition_number();
   302           s4o.print("],0);\n");
   302           s4o.print("],,0);\n");
   303           s4o.indent_left();
   303           s4o.indent_left();
   304           s4o.print(s4o.indent_spaces + "}\n");
   304           s4o.print(s4o.indent_spaces + "}\n");
   305           break;
   305           break;
   306         case stepset_sg:
   306         case stepset_sg:
   307           s4o.print(s4o.indent_spaces + "if (");
   307           s4o.print(s4o.indent_spaces + "if (");
   356               s4o.print("__debug_");
   356               s4o.print("__debug_");
   357             else
   357             else
   358               s4o.print("__");
   358               s4o.print("__");
   359             s4o.print("transition_list[");
   359             s4o.print("transition_list[");
   360             print_transition_number();
   360             print_transition_number();
   361             s4o.print("],");
   361             s4o.print("],,");
   362             generate_c_il->print_implicit_variable_back();
   362             generate_c_il->print_implicit_variable_back();
   363             // generate_c_il->reset_default_variable_name(); // generate_c_il does not require his anymore
   363             // generate_c_il->reset_default_variable_name(); // generate_c_il does not require his anymore
   364             s4o.print(");\n");
   364             s4o.print(");\n");
   365           }
   365           }
   366           // Transition condition is in ST
   366           // Transition condition is in ST
   374               s4o.print("__debug_");
   374               s4o.print("__debug_");
   375             else
   375             else
   376               s4o.print("__");
   376               s4o.print("__");
   377             s4o.print("transition_list[");
   377             s4o.print("transition_list[");
   378             print_transition_number();
   378             print_transition_number();
   379             s4o.print("],");
   379             s4o.print("],,");
   380             symbol->transition_condition_st->accept(*generate_c_st);
   380             symbol->transition_condition_st->accept(*generate_c_st);
   381             s4o.print(");\n");
   381             s4o.print(");\n");
   382           }
   382           }
   383           if (wanted_sfcgeneration == transitiontest_sg) {
   383           if (wanted_sfcgeneration == transitiontest_sg) {
   384             s4o.print(s4o.indent_spaces + "if (__DEBUG) {\n");
   384             s4o.print(s4o.indent_spaces + "if (__DEBUG) {\n");
   387             s4o.print(SET_VAR);
   387             s4o.print(SET_VAR);
   388             s4o.print("(");
   388             s4o.print("(");
   389             print_variable_prefix();
   389             print_variable_prefix();
   390             s4o.print(",__debug_transition_list[");
   390             s4o.print(",__debug_transition_list[");
   391             print_transition_number();
   391             print_transition_number();
   392             s4o.print("],");
   392             s4o.print("],,");
   393             s4o.print(GET_VAR);
   393             s4o.print(GET_VAR);
   394             s4o.print("(");
   394             s4o.print("(");
   395             print_variable_prefix();
   395             print_variable_prefix();
   396             s4o.print("__transition_list[");
   396             s4o.print("__transition_list[");
   397             print_transition_number();
   397             print_transition_number();
   512             s4o.indent_right();
   512             s4o.indent_right();
   513             s4o.print(s4o.indent_spaces);
   513             s4o.print(s4o.indent_spaces);
   514             s4o.print(SET_VAR);
   514             s4o.print(SET_VAR);
   515             s4o.print("(");
   515             s4o.print("(");
   516             print_action_argument(symbol->action_name, "state", true);
   516             print_action_argument(symbol->action_name, "state", true);
   517             s4o.print(",1);\n");
   517             s4o.print(",,1);\n");
   518             s4o.indent_left();
   518             s4o.indent_left();
   519             s4o.print(s4o.indent_spaces + "}");
   519             s4o.print(s4o.indent_spaces + "}");
   520           }
   520           }
   521           break;
   521           break;
   522         default:
   522         default:
   573                   s4o.print(SET_VAR);
   573                   s4o.print(SET_VAR);
   574                 s4o.print("(");
   574                 s4o.print("(");
   575                 print_variable_prefix();
   575                 print_variable_prefix();
   576                 s4o.print(",");
   576                 s4o.print(",");
   577                 current_action->accept(*this);
   577                 current_action->accept(*this);
   578                 s4o.print(",1);\n");
   578                 s4o.print(",,1);\n");
   579                 s4o.indent_left();
   579                 s4o.indent_left();
   580                 s4o.print(s4o.indent_spaces + "}\n");
   580                 s4o.print(s4o.indent_spaces + "}\n");
   581                 s4o.print(s4o.indent_spaces + "else if (active) {\n");
   581                 s4o.print(s4o.indent_spaces + "else if (active) {\n");
   582                 s4o.indent_right();
   582                 s4o.indent_right();
   583                 s4o.print(s4o.indent_spaces);
   583                 s4o.print(s4o.indent_spaces);
   589                   s4o.print(SET_VAR);
   589                   s4o.print(SET_VAR);
   590                 s4o.print("(");
   590                 s4o.print("(");
   591                 print_variable_prefix();
   591                 print_variable_prefix();
   592                 s4o.print(",");
   592                 s4o.print(",");
   593                 current_action->accept(*this);
   593                 current_action->accept(*this);
   594                 s4o.print(",0);\n");
   594                 s4o.print(",,0);\n");
   595               }
   595               }
   596 
   596 
   597               else {
   597               else {
   598                 s4o.print(SET_VAR);
   598                 s4o.print(SET_VAR);
   599                 s4o.print("(");
   599                 s4o.print("(");
   600                 print_action_argument(current_action, "state", true);
   600                 print_action_argument(current_action, "state", true);
   601                 s4o.print(",1);\n");
   601                 s4o.print(",,1);\n");
   602               }
   602               }
   603             }
   603             }
   604             if (strcmp(qualifier, "S") == 0 || strcmp(qualifier, "SL") == 0) {
   604             if (strcmp(qualifier, "S") == 0 || strcmp(qualifier, "SL") == 0) {
   605               print_action_argument(current_action, "set");
   605               print_action_argument(current_action, "set");
   606               s4o.print(" = 1;\n");
   606               s4o.print(" = 1;\n");
   771       s4o.indent_right();
   771       s4o.indent_right();
   772       s4o.print(s4o.indent_spaces);
   772       s4o.print(s4o.indent_spaces);
   773       s4o.print(SET_VAR);
   773       s4o.print(SET_VAR);
   774       s4o.print("(");
   774       s4o.print("(");
   775       print_variable_prefix();
   775       print_variable_prefix();
   776       s4o.print(",__action_list[i].state,0);\n");
   776       s4o.print(",__action_list[i].state,,0);\n");
   777       s4o.print(s4o.indent_spaces);
   777       s4o.print(s4o.indent_spaces);
   778       print_variable_prefix();
   778       print_variable_prefix();
   779       s4o.print("__action_list[i].set = 0;\n");
   779       s4o.print("__action_list[i].set = 0;\n");
   780       s4o.print(s4o.indent_spaces);
   780       s4o.print(s4o.indent_spaces);
   781       print_variable_prefix();
   781       print_variable_prefix();
   893       s4o.indent_left();
   893       s4o.indent_left();
   894       s4o.print(s4o.indent_spaces + "}\n" + s4o.indent_spaces);
   894       s4o.print(s4o.indent_spaces + "}\n" + s4o.indent_spaces);
   895       s4o.print(SET_VAR);
   895       s4o.print(SET_VAR);
   896       s4o.print("(");
   896       s4o.print("(");
   897       print_variable_prefix();
   897       print_variable_prefix();
   898       s4o.print(",__action_list[i].state,");
   898       s4o.print(",__action_list[i].state,,");
   899       s4o.print(GET_VAR);
   899       s4o.print(GET_VAR);
   900       s4o.print("(");
   900       s4o.print("(");
   901       print_variable_prefix();
   901       print_variable_prefix();
   902       s4o.print("__action_list[i].state) | ");
   902       s4o.print("__action_list[i].state) | ");
   903       print_variable_prefix();
   903       print_variable_prefix();
   930               s4o.print(SET_VAR);
   930               s4o.print(SET_VAR);
   931             s4o.print("(");
   931             s4o.print("(");
   932             print_variable_prefix();
   932             print_variable_prefix();
   933             s4o.print(",");
   933             s4o.print(",");
   934             pt->symbol->accept(*this);
   934             pt->symbol->accept(*this);
   935             s4o.print(",0);\n");
   935             s4o.print(",,0);\n");
   936             s4o.indent_left();
   936             s4o.indent_left();
   937             s4o.print(s4o.indent_spaces + "}\n");
   937             s4o.print(s4o.indent_spaces + "}\n");
   938             s4o.print(s4o.indent_spaces + "else if (");
   938             s4o.print(s4o.indent_spaces + "else if (");
   939             print_variable_prefix();
   939             print_variable_prefix();
   940             s4o.print("__action_list[");
   940             s4o.print("__action_list[");
   951               s4o.print(SET_VAR);
   951               s4o.print(SET_VAR);
   952             s4o.print("(");
   952             s4o.print("(");
   953             print_variable_prefix();
   953             print_variable_prefix();
   954             s4o.print(",");
   954             s4o.print(",");
   955             pt->symbol->accept(*this);
   955             pt->symbol->accept(*this);
   956             s4o.print(",1);\n");
   956             s4o.print(",,1);\n");
   957             s4o.indent_left();
   957             s4o.indent_left();
   958             s4o.print(s4o.indent_spaces + "}\n");
   958             s4o.print(s4o.indent_spaces + "}\n");
   959           }
   959           }
   960         }
   960         }
   961       }
   961       }