stage4/generate_c/generate_c.cc
changeset 706 31553c22f318
parent 636 dd57e63bdc3d
child 793 268bf4ca5fa1
--- a/stage4/generate_c/generate_c.cc	Thu Nov 08 18:55:57 2012 +0100
+++ b/stage4/generate_c/generate_c.cc	Thu Nov 15 22:28:53 2012 +0100
@@ -109,31 +109,38 @@
 /* Variable declaration symbol for accessor macros */
 #define DECLARE_VAR "__DECLARE_VAR"
 #define DECLARE_GLOBAL "__DECLARE_GLOBAL"
+#define DECLARE_GLOBAL_FB "__DECLARE_GLOBAL_FB"
 #define DECLARE_GLOBAL_LOCATION "__DECLARE_GLOBAL_LOCATION"
 #define DECLARE_GLOBAL_LOCATED "__DECLARE_GLOBAL_LOCATED"
 #define DECLARE_EXTERNAL "__DECLARE_EXTERNAL"
+#define DECLARE_EXTERNAL_FB "__DECLARE_EXTERNAL_FB"
 #define DECLARE_LOCATED "__DECLARE_LOCATED"
 #define DECLARE_GLOBAL_PROTOTYPE "__DECLARE_GLOBAL_PROTOTYPE"
 
 /* Variable declaration symbol for accessor macros */
 #define INIT_VAR "__INIT_VAR"
 #define INIT_GLOBAL "__INIT_GLOBAL"
+#define INIT_GLOBAL_FB "__INIT_GLOBAL_FB"
 #define INIT_GLOBAL_LOCATED "__INIT_GLOBAL_LOCATED"
 #define INIT_EXTERNAL "__INIT_EXTERNAL"
+#define INIT_EXTERNAL_FB "__INIT_EXTERNAL_FB"
 #define INIT_LOCATED "__INIT_LOCATED"
 #define INIT_LOCATED_VALUE "__INIT_LOCATED_VALUE"
 
 /* Variable getter symbol for accessor macros */
 #define GET_VAR "__GET_VAR"
 #define GET_EXTERNAL "__GET_EXTERNAL"
+#define GET_EXTERNAL_FB "__GET_EXTERNAL_FB"
 #define GET_LOCATED "__GET_LOCATED"
 #define GET_VAR_BY_REF "__GET_VAR_BY_REF"
 #define GET_EXTERNAL_BY_REF "__GET_EXTERNAL_BY_REF"
+#define GET_EXTERNAL_FB_BY_REF "__GET_EXTERNAL_FB_BY_REF"
 #define GET_LOCATED_BY_REF "__GET_LOCATED_BY_REF"
 
 /* Variable setter symbol for accessor macros */
 #define SET_VAR "__SET_VAR"
 #define SET_EXTERNAL "__SET_EXTERNAL"
+#define SET_EXTERNAL_FB "__SET_EXTERNAL_FB"
 #define SET_LOCATED "__SET_LOCATED"
 
 /* Variable initial value symbol for accessor macros */
@@ -592,7 +599,7 @@
     };
     virtual ~generate_c_datatypes_c(void) {
       while (!inline_array_defined.empty()) {
-    	inline_array_defined.erase(inline_array_defined.begin());
+        inline_array_defined.erase(inline_array_defined.begin());
       }
     }
 
@@ -626,19 +633,19 @@
 
     #define HANDLE_ELEMENTARY_DATA_TYPE(datatype_symbol, datatype_name)\
     void *visit(datatype_symbol *symbol) {\
-	  switch (current_mode) {\
-		case arrayname_im:\
-		  current_array_name += datatype_name;\
-		  break;\
+      switch (current_mode) {\
+        case arrayname_im:\
+          current_array_name += datatype_name;\
+          break;\
         case arraydeclaration_im:\
           s4o_incl.print(datatype_name);\
           break;\
-		default:\
-		  return generate_c_base_c::visit(symbol);\
-		  break;\
-	  }\
-	  return NULL;\
-	}
+        default:\
+          return generate_c_base_c::visit(symbol);\
+          break;\
+      }\
+      return NULL;\
+    }
 
     HANDLE_ELEMENTARY_DATA_TYPE(time_type_name_c, "TIME")
     HANDLE_ELEMENTARY_DATA_TYPE(bool_type_name_c, "BOOL")
@@ -663,41 +670,41 @@
     HANDLE_ELEMENTARY_DATA_TYPE(wstring_type_name_c, "WSTRING")
 
     HANDLE_ELEMENTARY_DATA_TYPE(safetime_type_name_c, "TIME")
-	HANDLE_ELEMENTARY_DATA_TYPE(safebool_type_name_c, "BOOL")
-	HANDLE_ELEMENTARY_DATA_TYPE(safesint_type_name_c, "SINT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safeint_type_name_c, "INT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safedint_type_name_c, "DINT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safelint_type_name_c, "LINT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safeusint_type_name_c, "USINT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safeuint_type_name_c, "UINT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safeudint_type_name_c, "UDINT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safeulint_type_name_c, "ULINT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safereal_type_name_c, "REAL")
-	HANDLE_ELEMENTARY_DATA_TYPE(safelreal_type_name_c, "LREAL")
-	HANDLE_ELEMENTARY_DATA_TYPE(safedate_type_name_c, "DATE")
-	HANDLE_ELEMENTARY_DATA_TYPE(safetod_type_name_c, "TOD")
-	HANDLE_ELEMENTARY_DATA_TYPE(safedt_type_name_c, "DT")
-	HANDLE_ELEMENTARY_DATA_TYPE(safebyte_type_name_c, "BYTE")
-	HANDLE_ELEMENTARY_DATA_TYPE(safeword_type_name_c, "WORD")
-	HANDLE_ELEMENTARY_DATA_TYPE(safedword_type_name_c, "DWORD")
-	HANDLE_ELEMENTARY_DATA_TYPE(safelword_type_name_c, "LWORD")
-	HANDLE_ELEMENTARY_DATA_TYPE(safestring_type_name_c, "STRING")
-	HANDLE_ELEMENTARY_DATA_TYPE(safewstring_type_name_c, "WSTRING")
+    HANDLE_ELEMENTARY_DATA_TYPE(safebool_type_name_c, "BOOL")
+    HANDLE_ELEMENTARY_DATA_TYPE(safesint_type_name_c, "SINT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safeint_type_name_c, "INT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safedint_type_name_c, "DINT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safelint_type_name_c, "LINT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safeusint_type_name_c, "USINT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safeuint_type_name_c, "UINT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safeudint_type_name_c, "UDINT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safeulint_type_name_c, "ULINT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safereal_type_name_c, "REAL")
+    HANDLE_ELEMENTARY_DATA_TYPE(safelreal_type_name_c, "LREAL")
+    HANDLE_ELEMENTARY_DATA_TYPE(safedate_type_name_c, "DATE")
+    HANDLE_ELEMENTARY_DATA_TYPE(safetod_type_name_c, "TOD")
+    HANDLE_ELEMENTARY_DATA_TYPE(safedt_type_name_c, "DT")
+    HANDLE_ELEMENTARY_DATA_TYPE(safebyte_type_name_c, "BYTE")
+    HANDLE_ELEMENTARY_DATA_TYPE(safeword_type_name_c, "WORD")
+    HANDLE_ELEMENTARY_DATA_TYPE(safedword_type_name_c, "DWORD")
+    HANDLE_ELEMENTARY_DATA_TYPE(safelword_type_name_c, "LWORD")
+    HANDLE_ELEMENTARY_DATA_TYPE(safestring_type_name_c, "STRING")
+    HANDLE_ELEMENTARY_DATA_TYPE(safewstring_type_name_c, "WSTRING")
 
     /***********************************/
     /* B 1.3.2 - Generic Data Types    */
     /***********************************/
 
-	/*  structure_type_name ':' structure_specification */
-	//SYM_REF2(structure_type_declaration_c, structure_type_name, structure_specification)
-	void *visit(structure_type_declaration_c *symbol) {
+    /*  structure_type_name ':' structure_specification */
+    //SYM_REF2(structure_type_declaration_c, structure_type_name, structure_specification)
+    void *visit(structure_type_declaration_c *symbol) {
       current_mode = arraydeclaration_im;
       symbol->structure_specification->accept(*this);
       current_mode = arrayname_im;
       generate_c_typedecl_c::visit(symbol);
-	  current_mode = none_im;
-	  return NULL;
-	}
+      current_mode = none_im;
+      return NULL;
+    }
 
     /* helper symbol for structure_declaration */
     /* structure_declaration:  STRUCT structure_element_declaration_list END_STRUCT */
@@ -705,12 +712,12 @@
     //SYM_LIST(structure_element_declaration_list_c)
     void *visit(structure_element_declaration_list_c *symbol) {
       switch (current_mode) {
-    	case arraydeclaration_im:
-    	  iterator_visitor_c::visit(symbol);
-    	  break;
+        case arraydeclaration_im:
+          iterator_visitor_c::visit(symbol);
+          break;
         default:
-    	  generate_c_typedecl_c::visit(symbol);
-    	  break;
+          generate_c_typedecl_c::visit(symbol);
+          break;
       }
       return NULL;
     }
@@ -719,16 +726,16 @@
     //SYM_REF2(structure_element_declaration_c, structure_element_name, spec_init)
     void *visit(structure_element_declaration_c *symbol) {
       switch (current_mode) {
-    	case arraydeclaration_im:
-    	  {
-			array_spec_init_c *spec_init = dynamic_cast<array_spec_init_c*>(symbol->spec_init);
-			if (spec_init != NULL) {
-			  symbol->spec_init->accept(*this);
-			}
-		  }
-    	  break;
-    	default:
-    	  generate_c_typedecl_c::visit(symbol);
+        case arraydeclaration_im:
+          {
+            array_spec_init_c *spec_init = dynamic_cast<array_spec_init_c*>(symbol->spec_init);
+            if (spec_init != NULL) {
+              symbol->spec_init->accept(*this);
+            }
+          }
+          break;
+        default:
+          generate_c_typedecl_c::visit(symbol);
           break;
       }
       return NULL;
@@ -772,16 +779,16 @@
     /* array_initialization may be NULL ! */
     void *visit(array_spec_init_c *symbol) {
       switch (current_mode) {
-    	case arraydeclaration_im:
-    	case arrayname_im:
-    	  {
-    	    array_specification_c *specification = dynamic_cast<array_specification_c*>(symbol->array_specification);
+        case arraydeclaration_im:
+        case arrayname_im:
+          {
+            array_specification_c *specification = dynamic_cast<array_specification_c*>(symbol->array_specification);
             if (specification != NULL)
               symbol->array_specification->accept(*this);
           }
           break;
-    	default:
-    	  return generate_c_typedecl_c::visit(symbol);
+        default:
+          return generate_c_typedecl_c::visit(symbol);
           break;
       }
       return NULL;
@@ -792,7 +799,7 @@
       switch (current_mode) {
         case arraydeclaration_im:
           {
-        	current_mode = arrayname_im;
+            current_mode = arrayname_im;
             std::map<std::string,int>::iterator definition;
             current_array_name = "__";
             symbol->non_generic_type_name->accept(*this);
@@ -815,11 +822,11 @@
           break;
         case arrayname_im:
           {
-        	  std::map<std::string,int>::iterator definition;
-			  current_array_name = "__";
-			  symbol->non_generic_type_name->accept(*this);
-			  symbol->array_subrange_list->accept(*this);
-			  s4o_incl.print(current_array_name);
+              std::map<std::string,int>::iterator definition;
+              current_array_name = "__";
+              symbol->non_generic_type_name->accept(*this);
+              symbol->array_subrange_list->accept(*this);
+              s4o_incl.print(current_array_name);
           }
           break;
         default:
@@ -881,7 +888,7 @@
     //SYM_REF2(array_var_declaration_c, var1_list, array_specification)
     void *visit(array_var_declaration_c *symbol) {
       array_specification_c *specification = dynamic_cast<array_specification_c*>(symbol->array_specification);
-	  if (specification != NULL) {
+      if (specification != NULL) {
         current_mode = arraydeclaration_im;
         symbol->array_specification->accept(*this);
         current_mode = none_im;
@@ -923,9 +930,9 @@
     void *visit(located_var_decl_c *symbol) {
       array_spec_init_c* array_spec_init = dynamic_cast<array_spec_init_c*>(symbol->located_var_spec_init);
       if (array_spec_init != NULL) {
-    	current_mode = arraydeclaration_im;
-    	symbol->located_var_spec_init->accept(*this);
-    	current_mode = none_im;
+        current_mode = arraydeclaration_im;
+        symbol->located_var_spec_init->accept(*this);
+        current_mode = none_im;
       }
       return NULL;
     }