diff -r 1988bf1634da -r b97f9ad7b2c6 stage4/generate_c/generate_c_sfc.cc --- a/stage4/generate_c/generate_c_sfc.cc Wed Nov 14 18:59:47 2007 +0100 +++ b/stage4/generate_c/generate_c_sfc.cc Thu Nov 15 10:21:19 2007 +0100 @@ -96,6 +96,7 @@ void generate(symbol_c *symbol, sfcgeneration_t generation_type) { wanted_sfcgeneration = generation_type; + transition_number = 0; switch (wanted_sfcgeneration) { case transitiontest_sg: { @@ -259,26 +260,8 @@ s4o.indent_right(); // Calculate transition value - if (symbol->transition_condition_il != NULL) { - generate_c_il->declare_backup_variable(); - s4o.print(s4o.indent_spaces); - symbol->transition_condition_il->accept(*generate_c_il); - print_variable_prefix(); - s4o.print("transition_list["); - print_transition_number(); - s4o.print("] = "); - generate_c_il->print_backup_variable(); - s4o.print(";\n"); - } - if (symbol->transition_condition_st != NULL) { - s4o.print(s4o.indent_spaces); - print_variable_prefix(); - s4o.print("transition_list["); - print_transition_number(); - s4o.print("] = "); - symbol->transition_condition_st->accept(*generate_c_st); - s4o.print(";\n"); - } + symbol->transition_condition->accept(*this); + if (symbol->integer != NULL) { s4o.print(s4o.indent_spaces + "if ("); print_variable_prefix(); @@ -335,6 +318,38 @@ return NULL; } + void *visit(transition_condition_c *symbol) { + switch (wanted_sfcgeneration) { + case transitiontest_sg: + // Transition condition is in IL + if (symbol->transition_condition_il != NULL) { + generate_c_il->declare_backup_variable(); + s4o.print(s4o.indent_spaces); + symbol->transition_condition_il->accept(*generate_c_il); + print_variable_prefix(); + s4o.print("transition_list["); + print_transition_number(); + s4o.print("] = "); + generate_c_il->print_backup_variable(); + s4o.print(";\n"); + } + // Transition condition is in ST + if (symbol->transition_condition_st != NULL) { + s4o.print(s4o.indent_spaces); + print_variable_prefix(); + s4o.print("transition_list["); + print_transition_number(); + s4o.print("] = "); + symbol->transition_condition_st->accept(*generate_c_st); + s4o.print(";\n"); + } + break; + default: + break; + } + return NULL; + } + void *visit(action_c *symbol) { switch (wanted_sfcgeneration) { case actionbody_sg: