diff -r c7219a37cc39 -r d1c1a0254e4f stage1_2/iec_bison.yy --- a/stage1_2/iec_bison.yy Fri Nov 16 10:26:23 2012 +0100 +++ b/stage1_2/iec_bison.yy Mon Nov 19 22:53:43 2012 +0100 @@ -100,7 +100,7 @@ /* The interface through which bison and flex interact. */ #include "stage1_2_priv.hh" - +#include "derived_conversion_functions.hh" #include "../absyntax_utils/add_en_eno_param_decl.hh" /* required for add_en_eno_param_decl_c */ @@ -240,7 +240,7 @@ const char *additional_error_msg); /* Create entry in symbol table for function conversion data type*/ -void make_derived_conversion_functions(const char * dname); +void add_enumtype_conversion_functions(const char * dname); %} @@ -2716,7 +2716,7 @@ $$ = new enumerated_type_declaration_c($1, new enumerated_spec_init_c($3, NULL, locloc(@3)), locloc(@$)); if (conversion_functions_) { const char *name = ((identifier_c *)$1)->value; - make_derived_conversion_functions(name); + add_enumtype_conversion_functions(name); } } | identifier ':' enumerated_specification {library_element_symtable.insert($1, prev_declared_enumerated_type_name_token);} ASSIGN enumerated_value @@ -8406,51 +8406,18 @@ } - /* Create entry in symbol table for function conversion data type*/ -void make_derived_conversion_functions(const char * dname) { +void add_enumtype_conversion_functions(const char * dname) { std::string strname; std::string tmp; - strname = dname; - tmp = strname + "_TO_STRING"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_SINT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_INT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_DINT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_LINT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_USINT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_UINT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_UDINT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = strname + "_TO_ULINT"; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - /* ... */ - tmp = "STRING_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "SINT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "INT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "DINT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "LINT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "USINT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "UINT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "UDINT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - tmp = "ULINT_TO_" + strname; - library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); - /* ... */ + strname = dname; + for (int i = 0; derived_conversion_functions_c::functionDataType[i] != NULL; i++) { + tmp = strname + std::string("_TO_") + derived_conversion_functions_c::functionDataType[i]; + library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); + tmp = derived_conversion_functions_c::functionDataType[i] + std::string("_TO_") + strname; + library_element_symtable.insert(tmp.c_str(), prev_declared_derived_function_name_token); + } }