stage4/generate_c/generate_c_sfc.cc
changeset 217 f5dfadf5de54
parent 155 e094c92cf197
child 221 c6aed7e5f070
--- 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();