diff -r 136d6ae70745 -r f5dfadf5de54 stage4/generate_c/generate_c_sfc.cc --- a/stage4/generate_c/generate_c_sfc.cc Wed Nov 18 10:53:15 2009 +0100 +++ b/stage4/generate_c/generate_c_sfc.cc Sun Nov 29 16:38:11 2009 +0100 @@ -75,11 +75,11 @@ sfcgeneration_t wanted_sfcgeneration; public: - generate_c_sfc_elements_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL) + generate_c_sfc_elements_c(stage4out_c *s4o_ptr, symbol_c *name, symbol_c *scope, const char *variable_prefix = NULL) : generate_c_base_c(s4o_ptr) { - generate_c_il = new generate_c_il_c(s4o_ptr, scope, variable_prefix); - generate_c_st = new generate_c_st_c(s4o_ptr, scope, variable_prefix); - generate_c_code = new generate_c_SFC_IL_ST_c(s4o_ptr, scope, variable_prefix); + generate_c_il = new generate_c_il_c(s4o_ptr, name, scope, variable_prefix); + generate_c_st = new generate_c_st_c(s4o_ptr, name, scope, variable_prefix); + generate_c_code = new generate_c_SFC_IL_ST_c(s4o_ptr, name, scope, variable_prefix); search_var_instance_decl = new search_var_instance_decl_c(scope); this->set_variable_prefix(variable_prefix); } @@ -138,14 +138,18 @@ void print_reset_step(symbol_c *step_name) { s4o.print(s4o.indent_spaces); + s4o.print(SET_VAR); + s4o.print("("); print_step_argument(step_name, "state"); - s4o.print(" = 0;\n"); + s4o.print(",0);\n"); } void print_set_step(symbol_c *step_name) { s4o.print(s4o.indent_spaces); + s4o.print(SET_VAR); + s4o.print("("); print_step_argument(step_name, "state"); - s4o.print(" = 1;\n" + s4o.indent_spaces); + s4o.print(",1);\n" + s4o.indent_spaces); print_step_argument(step_name, "elapsed_time"); s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n"); } @@ -172,18 +176,24 @@ s4o.print(s4o.indent_spaces + "{\n"); s4o.indent_right(); s4o.print(s4o.indent_spaces + "char activated = "); + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(current_step, "state"); - s4o.print(" && !"); + s4o.print(") && !"); print_step_argument(current_step, "prev_state"); s4o.print(";\n"); s4o.print(s4o.indent_spaces + "char desactivated = !"); + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(current_step, "state"); - s4o.print(" && "); + s4o.print(") && "); print_step_argument(current_step, "prev_state"); s4o.print(";\n"); s4o.print(s4o.indent_spaces + "char active = "); + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(current_step, "state"); - s4o.print(";\n"); + s4o.print(");\n"); symbol->action_association_list->accept(*this); s4o.indent_left(); s4o.print(s4o.indent_spaces + "}\n\n"); @@ -206,18 +216,24 @@ s4o.print(s4o.indent_spaces + "{\n"); s4o.indent_right(); s4o.print(s4o.indent_spaces + "char activated = "); + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(current_step, "state"); - s4o.print(" && !"); + s4o.print(") && !"); print_step_argument(current_step, "prev_state"); s4o.print(";\n"); s4o.print(s4o.indent_spaces + "char desactivated = !"); + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(current_step, "state"); - s4o.print(" && "); + s4o.print(") && "); print_step_argument(current_step, "prev_state"); s4o.print(";\n"); s4o.print(s4o.indent_spaces + "char active = "); + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(current_step, "state"); - s4o.print(";\n"); + s4o.print(");\n"); symbol->action_association_list->accept(*this); s4o.indent_left(); s4o.print(s4o.indent_spaces + "}\n\n"); @@ -263,10 +279,12 @@ if (symbol->integer != NULL) { s4o.print(s4o.indent_spaces + "if ("); + s4o.print(GET_VAR); + s4o.print("("); print_variable_prefix(); s4o.print("__transition_list["); print_transition_number(); - s4o.print("]) {\n"); + s4o.print("])) {\n"); s4o.indent_right(); wanted_sfcgeneration = stepreset_sg; symbol->from_steps->accept(*this); @@ -287,19 +305,23 @@ s4o.indent_left(); s4o.print(s4o.indent_spaces + "}\n"); s4o.print(s4o.indent_spaces); + s4o.print(SET_VAR); + s4o.print("("); print_variable_prefix(); s4o.print("__transition_list["); print_transition_number(); - s4o.print("] = 0;\n"); + s4o.print("],0);\n"); s4o.indent_left(); s4o.print(s4o.indent_spaces + "}\n"); break; case stepset_sg: s4o.print(s4o.indent_spaces + "if ("); + s4o.print(GET_VAR); + s4o.print("("); print_variable_prefix(); s4o.print("__transition_list["); print_transition_number(); - s4o.print("]) {\n"); + s4o.print("])) {\n"); s4o.indent_right(); symbol->to_steps->accept(*this); s4o.indent_left(); @@ -309,10 +331,12 @@ case stepreset_sg: if (symbol->integer == NULL) { s4o.print(s4o.indent_spaces + "if ("); + s4o.print(GET_VAR); + s4o.print("("); print_variable_prefix(); s4o.print("__transition_list["); print_transition_number(); - s4o.print("]) {\n"); + s4o.print("])) {\n"); s4o.indent_right(); symbol->from_steps->accept(*this); s4o.indent_left(); @@ -335,6 +359,8 @@ generate_c_il->declare_backup_variable(); s4o.print(s4o.indent_spaces); symbol->transition_condition_il->accept(*generate_c_il); + s4o.print(SET_VAR); + s4o.print("("); print_variable_prefix(); if (wanted_sfcgeneration == transitiontestdebug_sg) s4o.print("__debug_"); @@ -342,13 +368,15 @@ s4o.print("__"); s4o.print("transition_list["); print_transition_number(); - s4o.print("] = "); + s4o.print("],"); generate_c_il->print_backup_variable(); - s4o.print(";\n"); + s4o.print(");\n"); } // Transition condition is in ST if (symbol->transition_condition_st != NULL) { s4o.print(s4o.indent_spaces); + s4o.print(SET_VAR); + s4o.print("("); print_variable_prefix(); if (wanted_sfcgeneration == transitiontestdebug_sg) s4o.print("__debug_"); @@ -356,22 +384,24 @@ s4o.print("__"); s4o.print("transition_list["); print_transition_number(); - s4o.print("] = "); + s4o.print("],"); symbol->transition_condition_st->accept(*generate_c_st); - s4o.print(";\n"); + s4o.print(");\n"); } if (wanted_sfcgeneration == transitiontest_sg) { s4o.print(s4o.indent_spaces + "if (__DEBUG) {\n"); s4o.indent_right(); s4o.print(s4o.indent_spaces); + s4o.print(SET_VAR); + s4o.print("("); print_variable_prefix(); s4o.print("__debug_transition_list["); print_transition_number(); - s4o.print("] = "); + s4o.print("],"); print_variable_prefix(); s4o.print("__transition_list["); print_transition_number(); - s4o.print("];\n"); + s4o.print("]);\n"); s4o.indent_left(); s4o.print(s4o.indent_spaces + "}\n"); } @@ -409,7 +439,10 @@ if (symbol->step_name != NULL) { switch (wanted_sfcgeneration) { case transitiontest_sg: + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(symbol->step_name, "state"); + s4o.print(")"); break; case stepset_sg: print_set_step(symbol->step_name); @@ -431,7 +464,10 @@ switch (wanted_sfcgeneration) { case transitiontest_sg: for(int i = 0; i < symbol->n; i++) { + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(symbol->elements[i], "state"); + s4o.print(")"); if (i < symbol->n - 1) { s4o.print(" && "); } @@ -473,8 +509,10 @@ } else { s4o.print(s4o.indent_spaces + "if ("); + s4o.print(GET_VAR); + s4o.print("("); print_step_argument(current_step, "state"); - s4o.print(") {\n"); + s4o.print(")) {\n"); s4o.indent_right(); s4o.print(s4o.indent_spaces); print_action_argument(symbol->action_name, "state"); @@ -595,9 +633,9 @@ generate_c_sfc_elements_c *generate_c_sfc_elements; public: - generate_c_sfc_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL) + generate_c_sfc_c(stage4out_c *s4o_ptr, symbol_c *name, symbol_c *scope, const char *variable_prefix = NULL) : generate_c_typedecl_c(s4o_ptr) { - generate_c_sfc_elements = new generate_c_sfc_elements_c(s4o_ptr, scope, variable_prefix); + generate_c_sfc_elements = new generate_c_sfc_elements_c(s4o_ptr, name, scope, variable_prefix); this->set_variable_prefix(variable_prefix); } @@ -640,11 +678,15 @@ s4o.print(s4o.indent_spaces); print_variable_prefix(); s4o.print("__step_list[i].prev_state = "); - print_variable_prefix(); - s4o.print("__step_list[i].state;\n"); + s4o.print(GET_VAR); + s4o.print("("); + print_variable_prefix(); + s4o.print("__step_list[i].state);\n"); s4o.print(s4o.indent_spaces + "if ("); - print_variable_prefix(); - s4o.print("__step_list[i].state) {\n"); + s4o.print(GET_VAR); + s4o.print("("); + print_variable_prefix(); + s4o.print("__step_list[i].state)) {\n"); s4o.indent_right(); s4o.print(s4o.indent_spaces); print_variable_prefix();