stage4/generate_c/generate_c_sfc.cc
changeset 392 9b88b8b6bccd
parent 350 2c3c4dc34979
child 417 d48f53715f77
--- a/stage4/generate_c/generate_c_sfc.cc	Fri Nov 18 17:21:16 2011 +0100
+++ b/stage4/generate_c/generate_c_sfc.cc	Fri Nov 18 17:28:37 2011 +0100
@@ -96,8 +96,9 @@
       }
     }
 
-    void print_step_argument(symbol_c *step_name, const char* argument) {
-      print_variable_prefix();
+    void print_step_argument(symbol_c *step_name, const char* argument, bool setter=false) {
+      print_variable_prefix();
+      if (setter) s4o.print(",");
       s4o.print("__step_list[");
       s4o.print(SFC_STEP_ACTION_PREFIX);
       step_name->accept(*this);
@@ -105,8 +106,9 @@
       s4o.print(argument);
     }
 
-    void print_action_argument(symbol_c *action_name, const char* argument) {
-      print_variable_prefix();
+    void print_action_argument(symbol_c *action_name, const char* argument, bool setter=false) {
+      print_variable_prefix();
+      if (setter) s4o.print(",");
       s4o.print("__action_list[");
       s4o.print(SFC_STEP_ACTION_PREFIX);
       action_name->accept(*this);
@@ -122,7 +124,7 @@
       s4o.print(s4o.indent_spaces);
       s4o.print(SET_VAR);
       s4o.print("(");
-      print_step_argument(step_name, "state");
+      print_step_argument(step_name, "state", true);
       s4o.print(",0);\n");
     }
     
@@ -130,7 +132,7 @@
       s4o.print(s4o.indent_spaces);
       s4o.print(SET_VAR);
       s4o.print("(");
-      print_step_argument(step_name, "state");
+      print_step_argument(step_name, "state", true);
       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");
@@ -283,7 +285,7 @@
           s4o.print(SET_VAR);
           s4o.print("(");
           print_variable_prefix();
-          s4o.print("__transition_list[");
+          s4o.print(",__transition_list[");
           print_transition_number();
           s4o.print("],0);\n");
           s4o.indent_left();
@@ -337,6 +339,7 @@
             s4o.print(SET_VAR);
             s4o.print("(");
             print_variable_prefix();
+            s4o.print(",");
             if (wanted_sfcgeneration == transitiontestdebug_sg)
               s4o.print("__debug_");
             else
@@ -345,6 +348,7 @@
             print_transition_number();
             s4o.print("],");
             generate_c_il->print_backup_variable();
+            generate_c_il->reset_default_variable_name();
             s4o.print(");\n");
           }
           // Transition condition is in ST
@@ -353,6 +357,7 @@
             s4o.print(SET_VAR);
             s4o.print("(");
             print_variable_prefix();
+            s4o.print(",");
             if (wanted_sfcgeneration == transitiontestdebug_sg)
               s4o.print("__debug_");
             else
@@ -370,7 +375,7 @@
             s4o.print(SET_VAR);
             s4o.print("(");
             print_variable_prefix();
-            s4o.print("__debug_transition_list[");
+            s4o.print(",__debug_transition_list[");
             print_transition_number();
             s4o.print("],");
             s4o.print(GET_VAR);
@@ -842,21 +847,16 @@
             unsigned int vartype = search_var_instance_decl->get_vartype();
 
             s4o.print(s4o.indent_spaces);
-            if (vartype == search_var_instance_decl_c::external_vt) {
+            if (vartype == search_var_instance_decl_c::external_vt)
           	  s4o.print(SET_EXTERNAL);
-          	  s4o.print("(");
-          	  pt->symbol->accept(*this);
-              s4o.print(",");
-            }
-          	else {
-          	  if (vartype == search_var_instance_decl_c::located_vt)
-          	    s4o.print(SET_LOCATED);
-          	  else
-          	    s4o.print(SET_VAR);
-              s4o.print("(");
-          	}
-            print_variable_prefix();
-            pt->symbol->accept(*this);
+          	else if (vartype == search_var_instance_decl_c::located_vt)
+          	  s4o.print(SET_LOCATED);
+          	else
+          	  s4o.print(SET_VAR);
+            s4o.print("(");
+          	print_variable_prefix();
+          	s4o.print(",");
+          	pt->symbol->accept(*this);
             s4o.print(",");
             print_variable_prefix();
             s4o.print("__action_list[");