stage4/generate_c/generate_c_sfcdecl.cc
changeset 229 ca7bc1324540
parent 221 c6aed7e5f070
child 244 3a478229db8b
--- a/stage4/generate_c/generate_c_sfcdecl.cc	Mon Dec 07 15:36:29 2009 +0100
+++ b/stage4/generate_c/generate_c_sfcdecl.cc	Tue Dec 08 16:26:06 2009 +0100
@@ -50,7 +50,8 @@
         stepundef_sd,
         actiondef_sd,
         actionundef_sd,
-        actioncount_sd
+        actioncount_sd,
+        transitioncount_sd
        } sfcdeclaration_t;
   
   private:
@@ -107,6 +108,7 @@
           s4o.print(s4o.indent_spaces + "__IEC_BOOL_t __debug_transition_list[");
           s4o.print_integer(transition_number);
           s4o.print("];\n");
+          s4o.print(s4o.indent_spaces + "UINT __nb_transitions;\n");
           
           /* last_ticktime declaration */
           s4o.print(s4o.indent_spaces + "TIME __lasttick_time;\n");
@@ -165,6 +167,18 @@
           s4o.indent_left();
           s4o.print(s4o.indent_spaces + "}\n");
           
+          /* transitions table count */
+          wanted_sfcdeclaration = transitioncount_sd;
+          for(int i = 0; i < symbol->n; i++)
+            symbol->elements[i]->accept(*this);
+          s4o.print(s4o.indent_spaces);
+          print_variable_prefix();
+          s4o.print("__nb_transitions = ");
+          s4o.print_integer(transition_number);
+          s4o.print(";\n");
+          transition_number = 0;
+          wanted_sfcdeclaration = sfcinit_sd;
+
           /* last_ticktime initialisation */
           s4o.print(s4o.indent_spaces);
           print_variable_prefix();
@@ -268,6 +282,7 @@
     void *visit(transition_c *symbol) {
       switch (wanted_sfcdeclaration) {
         case sfcdecl_sd:
+        case transitioncount_sd:
           transition_number++;
           break;
         default: