# HG changeset patch # User Manuele Conti # Date 1353362023 -3600 # Node ID d1c1a0254e4f8eb23e8b6e8e96dd0f5f64977a23 # Parent c7219a37cc3968a0ab9522856d1afa9e2c2481ca Create functionDataType array in derived_conversion_functions_c. diff -r c7219a37cc39 -r d1c1a0254e4f absyntax_utils/add_en_eno_param_decl.hh --- a/absyntax_utils/add_en_eno_param_decl.hh Fri Nov 16 10:26:23 2012 +0100 +++ b/absyntax_utils/add_en_eno_param_decl.hh Mon Nov 19 22:53:43 2012 +0100 @@ -42,6 +42,9 @@ * and eno_param_declaration_c objects. */ +#ifndef _ADD_EN_ENO_PARAM_DECL_HH +#define _ADD_EN_ENO_PARAM_DECL_HH + #include "../absyntax/visitor.hh" @@ -96,9 +99,11 @@ }; // function_param_iterator_c +#endif /* _ADD_EN_ENO_PARAM_DECL_HH */ + diff -r c7219a37cc39 -r d1c1a0254e4f stage1_2/derived_conversion_functions.cc --- a/stage1_2/derived_conversion_functions.cc Fri Nov 16 10:26:23 2012 +0100 +++ b/stage1_2/derived_conversion_functions.cc Mon Nov 19 22:53:43 2012 +0100 @@ -37,6 +37,19 @@ static const int debug = 0; +const char *derived_conversion_functions_c::functionDataType[] = { + "STRING", + "SINT" , + "INT" , + "DINT" , + "LINT" , + "USINT" , + "UNIT" , + "UDINT" , + "ULINT" , + NULL +}; + derived_conversion_functions_c::derived_conversion_functions_c(symbol_c *ignore) { } diff -r c7219a37cc39 -r d1c1a0254e4f stage1_2/derived_conversion_functions.hh --- a/stage1_2/derived_conversion_functions.hh Fri Nov 16 10:26:23 2012 +0100 +++ b/stage1_2/derived_conversion_functions.hh Mon Nov 19 22:53:43 2012 +0100 @@ -39,12 +39,15 @@ #include "../absyntax_utils/absyntax_utils.hh" + class derived_conversion_functions_c: public iterator_visitor_c { public: explicit derived_conversion_functions_c(symbol_c *ignore); virtual ~derived_conversion_functions_c(void); std::string &get_declaration(symbol_c *root); + const static char *functionDataType []; + void *visit(identifier_c *symbol); /**********************/ /* B 1.3 - Data types */ 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); + } }