diff -r f2323f79252e -r 31553c22f318 stage4/generate_c/generate_c.cc --- 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(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(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(symbol->array_specification); + case arraydeclaration_im: + case arrayname_im: + { + array_specification_c *specification = dynamic_cast(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::iterator definition; current_array_name = "__"; symbol->non_generic_type_name->accept(*this); @@ -815,11 +822,11 @@ break; case arrayname_im: { - std::map::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::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(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(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; }