stage4/generate_c/generate_c_sfc.cc
changeset 87 b97f9ad7b2c6
parent 70 e1f0ebd2d9ec
child 111 ee31ee39eaf6
--- 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: