# HG changeset patch # User Mario de Sousa # Date 1352318831 0 # Node ID a9f8cc778444f5c44374d2441021431b4ca72ffb # Parent 44f74fad2cc0761434c6da56f4aafb41ed1f27a0 Make search_base_type_c a singleton! diff -r 44f74fad2cc0 -r a9f8cc778444 absyntax_utils/get_datatype_info.cc --- a/absyntax_utils/get_datatype_info.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/absyntax_utils/get_datatype_info.cc Wed Nov 07 20:07:11 2012 +0000 @@ -54,7 +54,6 @@ -static search_base_type_c search_base_type; @@ -85,7 +84,7 @@ bool get_datatype_info_c::is_sfc_initstep(symbol_c *type_symbol) { - symbol_c *type_decl = search_base_type.get_basetype_decl(type_symbol); + symbol_c *type_decl = search_base_type_c::get_basetype_decl(type_symbol); if (typeid(*type_decl) == typeid(initial_step_c)) {return true;} /* INITIAL_STEP step_name ':' action_association_list END_STEP */ /* A pseudo data type! */ return false; } @@ -95,7 +94,7 @@ bool get_datatype_info_c::is_sfc_step(symbol_c *type_symbol) { - symbol_c *type_decl = search_base_type.get_basetype_decl(type_symbol); + symbol_c *type_decl = search_base_type_c::get_basetype_decl(type_symbol); if (typeid(*type_decl) == typeid(initial_step_c)) {return true;} /* INITIAL_STEP step_name ':' action_association_list END_STEP */ /* A pseudo data type! */ if (typeid(*type_decl) == typeid( step_c)) {return true;} /* STEP step_name ':' action_association_list END_STEP */ /* A pseudo data type! */ return false; @@ -105,7 +104,7 @@ bool get_datatype_info_c::is_function_block(symbol_c *type_symbol) { - symbol_c *type_decl = search_base_type.get_basetype_decl(type_symbol); + symbol_c *type_decl = search_base_type_c::get_basetype_decl(type_symbol); if (typeid(*type_decl) == typeid(function_block_declaration_c)) {return true;} /* FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations function_block_body END_FUNCTION_BLOCK */ return false; } @@ -115,7 +114,7 @@ bool get_datatype_info_c::is_subrange(symbol_c *type_symbol) { - symbol_c *type_decl = search_base_type.get_basetype_decl(type_symbol); /* NOTE: will work correctly once we update the way search_base_type_c works, by adding a new search_effective_type:c */ + symbol_c *type_decl = search_base_type_c::get_basetype_decl(type_symbol); /* NOTE: will work correctly once we update the way search_base_type_c works, by adding a new search_effective_type:c */ if (typeid(*type_decl) == typeid(subrange_type_declaration_c)) {return true;} /* subrange_type_name ':' subrange_spec_init */ if (typeid(*type_decl) == typeid(subrange_spec_init_c)) {return true;} /* subrange_specification ASSIGN signed_integer */ @@ -130,7 +129,7 @@ bool get_datatype_info_c::is_enumerated(symbol_c *type_symbol) { - symbol_c *type_decl = search_base_type.get_basetype_decl(type_symbol); + symbol_c *type_decl = search_base_type_c::get_basetype_decl(type_symbol); if (typeid(*type_decl) == typeid(enumerated_type_declaration_c)) {return true;} /* enumerated_type_name ':' enumerated_spec_init */ if (typeid(*type_decl) == typeid(enumerated_spec_init_c)) {return true;} /* enumerated_specification ASSIGN enumerated_value */ @@ -145,7 +144,7 @@ bool get_datatype_info_c::is_array(symbol_c *type_symbol) { - symbol_c *type_decl = search_base_type.get_basetype_decl(type_symbol); + symbol_c *type_decl = search_base_type_c::get_basetype_decl(type_symbol); if (typeid(*type_decl) == typeid(array_type_declaration_c)) {return true;} /* identifier ':' array_spec_init */ if (typeid(*type_decl) == typeid(array_spec_init_c)) {return true;} /* array_specification [ASSIGN array_initialization} */ @@ -162,7 +161,7 @@ bool get_datatype_info_c::is_structure(symbol_c *type_symbol) { - symbol_c *type_decl = search_base_type.get_basetype_decl(type_symbol); + symbol_c *type_decl = search_base_type_c::get_basetype_decl(type_symbol); if (typeid(*type_decl) == typeid(structure_type_declaration_c)) {return true;} /* structure_type_name ':' structure_specification */ if (typeid(*type_decl) == typeid(initialized_structure_c)) {return true;} /* structure_type_name ASSIGN structure_initialization */ diff -r 44f74fad2cc0 -r a9f8cc778444 absyntax_utils/search_base_type.cc --- a/absyntax_utils/search_base_type.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/absyntax_utils/search_base_type.cc Wed Nov 07 20:07:11 2012 +0000 @@ -49,43 +49,55 @@ #include "../main.hh" // required for ERROR() and ERROR_MSG() macros. +/* pointer to singleton instance */ +search_base_type_c *search_base_type_c::search_base_type_singleton = NULL; + + search_base_type_c::search_base_type_c(void) {current_type_name = NULL;} - - - +/* static method! */ +void search_base_type_c::create_singleton(void) { + if (NULL == search_base_type_singleton) search_base_type_singleton = new search_base_type_c(); + if (NULL == search_base_type_singleton) ERROR; +} + +/* static method! */ symbol_c *search_base_type_c::get_basetype_decl(symbol_c *symbol) { - if (NULL == symbol) - return NULL; + create_singleton(); + if (NULL == symbol) return NULL; + return (symbol_c *)symbol->accept(*search_base_type_singleton); +} + +/* static method! */ +symbol_c *search_base_type_c::get_basetype_id (symbol_c *symbol) { + create_singleton(); + if (NULL == symbol) return NULL; - return (symbol_c *)symbol->accept(*this); -} - -symbol_c *search_base_type_c::get_basetype_id (symbol_c *symbol) { - if (NULL == symbol) - return NULL; - - current_type_name = NULL; /* just to be on the safe side... */ - symbol->accept(*this); - return (symbol_c *)current_type_name; + search_base_type_singleton->current_type_name = NULL; + symbol->accept(*search_base_type_singleton); + return (symbol_c *)search_base_type_singleton->current_type_name; } /* Note by MJS: The following two functions definately do not belong in this class!! Maybe create a new utility class? * I will need to clean this up when the opportunity arises! */ - +/* static method! */ bool search_base_type_c::type_is_subrange(symbol_c* type_decl) { - this->is_subrange = false; - type_decl->accept(*this); - return this->is_subrange; -} - + create_singleton(); + search_base_type_singleton->is_subrange = false; + type_decl->accept(*search_base_type_singleton); + return search_base_type_singleton->is_subrange; +} + + +/* static method! */ bool search_base_type_c::type_is_enumerated(symbol_c* type_decl) { - this->is_enumerated = false; - type_decl->accept(*this); - return this->is_enumerated; + create_singleton(); + search_base_type_singleton->is_enumerated = false; + type_decl->accept(*search_base_type_singleton); + return search_base_type_singleton->is_enumerated; } diff -r 44f74fad2cc0 -r a9f8cc778444 absyntax_utils/search_base_type.hh --- a/absyntax_utils/search_base_type.hh Wed Nov 07 19:26:38 2012 +0000 +++ b/absyntax_utils/search_base_type.hh Wed Nov 07 20:07:11 2012 +0000 @@ -55,15 +55,17 @@ bool is_array; bool is_subrange; bool is_enumerated; + static search_base_type_c *search_base_type_singleton; // Make this a singleton class! + + private: + static void create_singleton(void); public: search_base_type_c(void); - - public: - symbol_c *get_basetype_decl(symbol_c *symbol); - symbol_c *get_basetype_id (symbol_c *symbol); - bool type_is_subrange(symbol_c* type_decl); - bool type_is_enumerated(symbol_c* type_decl); + static symbol_c *get_basetype_decl (symbol_c *symbol); + static symbol_c *get_basetype_id (symbol_c *symbol); + static bool type_is_subrange (symbol_c *type_decl); + static bool type_is_enumerated(symbol_c *type_decl); public: /*************************/ diff -r 44f74fad2cc0 -r a9f8cc778444 absyntax_utils/search_var_instance_decl.cc --- a/absyntax_utils/search_var_instance_decl.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/absyntax_utils/search_var_instance_decl.cc Wed Nov 07 20:07:11 2012 +0000 @@ -132,11 +132,10 @@ #include /* required for typeid() */ bool search_var_instance_decl_c::type_is_complex(symbol_c *symbol) { symbol_c *decl; - search_base_type_c search_base_type; decl = this->get_decl(symbol); if (NULL == decl) ERROR; - decl = search_base_type.get_basetype_decl(decl); + decl = search_base_type_c::get_basetype_decl(decl); if (NULL == decl) ERROR; return ((typeid( *(decl) ) == typeid( array_specification_c )) || diff -r 44f74fad2cc0 -r a9f8cc778444 absyntax_utils/search_varfb_instance_type.cc --- a/absyntax_utils/search_varfb_instance_type.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/absyntax_utils/search_varfb_instance_type.cc Wed Nov 07 20:07:11 2012 +0000 @@ -136,8 +136,8 @@ /* symbol should be a variable name!! */ /* Note: although the method is called get_decl(), it is getting the declaration of the variable, which for us is the type_id of that variable! */ current_type_id = search_var_instance_decl.get_decl (variable_name); - current_basetype_decl = search_base_type.get_basetype_decl(current_type_id); - current_basetype_id = search_base_type.get_basetype_id (current_type_id); + current_basetype_decl = search_base_type_c::get_basetype_decl(current_type_id); + current_basetype_id = search_base_type_c::get_basetype_id (current_type_id); /* What if the variable has not been declared? Then this should not be a compiler error! * However, currently stage 2 of the compiler already detects when variables have not been delcared, @@ -193,8 +193,8 @@ void *search_varfb_instance_type_c::visit(array_specification_c *symbol) { /* found the type of the element we were looking for! */ current_type_id = symbol->non_generic_type_name; - current_basetype_decl = search_base_type.get_basetype_decl(current_type_id); - current_basetype_id = search_base_type.get_basetype_id (current_type_id); + current_basetype_decl = search_base_type_c::get_basetype_decl(current_type_id); + current_basetype_id = search_base_type_c::get_basetype_id (current_type_id); return NULL; } @@ -256,8 +256,8 @@ if (compare_identifiers(symbol->structure_element_name, current_field_selector) == 0) { /* found the type of the element we were looking for! */ current_type_id = symbol->spec_init; - current_basetype_decl = search_base_type.get_basetype_decl(current_type_id); - current_basetype_id = search_base_type.get_basetype_id (current_type_id); + current_basetype_decl = search_base_type_c::get_basetype_decl(current_type_id); + current_basetype_id = search_base_type_c::get_basetype_id (current_type_id); } /* Did not find the type of the element we were looking for! */ @@ -363,8 +363,8 @@ /* If not found, these pointers will all be set to NULL!! */ search_var_instance_decl_c search_decl(symbol); current_type_id = search_decl.get_decl(current_field_selector); - current_basetype_decl = search_base_type.get_basetype_decl(current_type_id); - current_basetype_id = search_base_type.get_basetype_id (current_type_id); + current_basetype_decl = search_base_type_c::get_basetype_decl(current_type_id); + current_basetype_id = search_base_type_c::get_basetype_id (current_type_id); return NULL; } @@ -389,8 +389,8 @@ if (compare_identifiers(&X, current_field_selector) == 0) current_type_id = &get_datatype_info_c::bool_type_name; - current_basetype_decl = search_base_type.get_basetype_decl(current_type_id); - current_basetype_id = search_base_type.get_basetype_id (current_type_id); + current_basetype_decl = search_base_type_c::get_basetype_decl(current_type_id); + current_basetype_id = search_base_type_c::get_basetype_id (current_type_id); return NULL; } diff -r 44f74fad2cc0 -r a9f8cc778444 absyntax_utils/search_varfb_instance_type.hh --- a/absyntax_utils/search_varfb_instance_type.hh Wed Nov 07 19:26:38 2012 +0000 +++ b/absyntax_utils/search_varfb_instance_type.hh Wed Nov 07 20:07:11 2012 +0000 @@ -89,7 +89,6 @@ private: search_var_instance_decl_c search_var_instance_decl; - search_base_type_c search_base_type; // symbol_c *current_type_decl; symbol_c *current_type_id; diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/declaration_check.cc --- a/stage3/declaration_check.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/declaration_check.cc Wed Nov 07 20:07:11 2012 +0000 @@ -86,7 +86,6 @@ void declaration_check_c::check_global_decl(symbol_c *p_decl) { symbol_c *var_name; - search_base_type_c search_base_type; search_var_instance_decl_c search_var_instance_glo_decl(current_pou_decl); search_var_instance_decl_c search_var_instance_ext_decl(p_decl); @@ -109,8 +108,8 @@ * symbol_c *ext_type = fpi.param_type(); */ /* For the moment, we will just use search_base_type_c instead... */ - symbol_c *glo_type = search_base_type.get_basetype_decl(glo_decl); - symbol_c *ext_type = search_base_type.get_basetype_decl(ext_decl); + symbol_c *glo_type = search_base_type_c::get_basetype_decl(glo_decl); + symbol_c *ext_type = search_base_type_c::get_basetype_decl(ext_decl); if (! get_datatype_info_c::is_type_equal(glo_type, ext_type)) STAGE3_ERROR(0, ext_decl, ext_decl, "Declaration error an external redefinition data type."); } diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/declaration_check.hh --- a/stage3/declaration_check.hh Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/declaration_check.hh Wed Nov 07 20:07:11 2012 +0000 @@ -38,7 +38,6 @@ class declaration_check_c : public iterator_visitor_c { int error_count; int current_display_error_level; - search_base_type_c search_base_type; symbol_c *current_pou_decl; public: diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/fill_candidate_datatypes.cc --- a/stage3/fill_candidate_datatypes.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/fill_candidate_datatypes.cc Wed Nov 07 20:07:11 2012 +0000 @@ -533,11 +533,10 @@ * This possibility os not expressed in the 'widening' tables, so we need to hard code it here */ void *fill_candidate_datatypes_c::handle_equality_comparison(const struct widen_entry widen_table[], symbol_c *symbol, symbol_c *l_expr, symbol_c *r_expr) { - search_base_type_c search_base_type; handle_binary_expression(widen_table, symbol, l_expr, r_expr); for(unsigned int i = 0; i < l_expr->candidate_datatypes.size(); i++) for(unsigned int j = 0; j < r_expr->candidate_datatypes.size(); j++) { - if ((l_expr->candidate_datatypes[i] == r_expr->candidate_datatypes[j]) && search_base_type.type_is_enumerated(l_expr->candidate_datatypes[i])) + if ((l_expr->candidate_datatypes[i] == r_expr->candidate_datatypes[j]) && search_base_type_c::type_is_enumerated(l_expr->candidate_datatypes[i])) add_datatype_to_candidate_list(symbol, &get_datatype_info_c::bool_type_name); } return NULL; @@ -547,11 +546,9 @@ /* a helper function... */ symbol_c *fill_candidate_datatypes_c::base_type(symbol_c *symbol) { - /* NOTE: symbol == NULL is valid. It will occur when, for e.g., an undefined/undeclared symbolic_variable is used - * in the code. - */ + /* NOTE: symbol == NULL is valid. It will occur when, for e.g., an undefined/undeclared symbolic_variable is used in the code. */ if (symbol == NULL) return NULL; - return (symbol_c *)symbol->accept(search_base_type); + return search_base_type_c::get_basetype_decl(symbol); } /*********************/ diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/fill_candidate_datatypes.hh --- a/stage3/fill_candidate_datatypes.hh Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/fill_candidate_datatypes.hh Wed Nov 07 20:07:11 2012 +0000 @@ -53,7 +53,6 @@ private: search_varfb_instance_type_c *search_varfb_instance_type; - search_base_type_c search_base_type; /* When calling a function block, we must first find it's type, * by searching through the declarations of the variables currently * in scope. diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/lvalue_check.cc --- a/stage3/lvalue_check.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/lvalue_check.cc Wed Nov 07 20:07:11 2012 +0000 @@ -107,7 +107,6 @@ */ void lvalue_check_c::check_assignment_to_output(symbol_c *lvalue) { decompose_var_instance_name_c decompose_lvalue(lvalue); - search_base_type_c search_base_type; /* Get the first element/record of the potentially structured variable symbol */ /* Note that if symbol is pointing to an expression (or simply a literal value), it will return a NULL. @@ -120,7 +119,7 @@ symbol_c *type_decl = search_var_instance_decl->get_decl(struct_elem); // symbol_c *type_id = spec_init_sperator_c::get_spec(type_decl); /* this is not required! search_base_type_c can handle spec_init symbols! */ - symbol_c *basetype_id = search_base_type.get_basetype_id(/*type_id*/ type_decl); + symbol_c *basetype_id = search_base_type_c::get_basetype_id(/*type_id*/ type_decl); /* If we can not determine the data type of the element, then the code must have a data type semantic error. * This will have been caught by the data type semantic verifier, so we do not bother with this anymore! */ @@ -145,7 +144,7 @@ /* prepare for any possible further record/structure elements */ type_decl = fb_search_var_instance_decl.get_decl(struct_elem); - basetype_id = search_base_type.get_basetype_id(type_decl); + basetype_id = search_base_type_c::get_basetype_id(type_decl); if (NULL == basetype_id) return; /* same comment as above... */ fb_decl = function_block_type_symtable.find_value(basetype_id); if (function_block_type_symtable.end_value() == fb_decl) return; /* same comment as above... */ diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/lvalue_check.hh --- a/stage3/lvalue_check.hh Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/lvalue_check.hh Wed Nov 07 20:07:11 2012 +0000 @@ -50,7 +50,6 @@ private: search_varfb_instance_type_c *search_varfb_instance_type; search_var_instance_decl_c *search_var_instance_decl; - search_base_type_c search_base_type; int error_count; int current_display_error_level; std::vector control_variables; diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/narrow_candidate_datatypes.cc --- a/stage3/narrow_candidate_datatypes.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/narrow_candidate_datatypes.cc Wed Nov 07 20:07:11 2012 +0000 @@ -409,11 +409,9 @@ /* a helper function... */ symbol_c *narrow_candidate_datatypes_c::base_type(symbol_c *symbol) { - /* NOTE: symbol == NULL is valid. It will occur when, for e.g., an undefined/undeclared symbolic_variable is used - * in the code. - */ + /* NOTE: symbol == NULL is valid. It will occur when, for e.g., an undefined/undeclared symbolic_variable is used in the code. */ if (symbol == NULL) return NULL; - return (symbol_c *)symbol->accept(search_base_type); + return search_base_type_c::get_basetype_decl(symbol); } /*********************/ @@ -1082,7 +1080,6 @@ void *narrow_candidate_datatypes_c::narrow_binary_expression(const struct widen_entry widen_table[], symbol_c *symbol, symbol_c *l_expr, symbol_c *r_expr, bool *deprecated_operation, bool allow_enums) { symbol_c *l_type, *r_type; int count = 0; - search_base_type_c search_base_type; if (NULL != deprecated_operation) *deprecated_operation = false; @@ -1096,7 +1093,7 @@ l_expr->datatype = l_type; r_expr->datatype = r_type; count ++; - } else if ((l_type == r_type) && search_base_type.type_is_enumerated(l_type) && get_datatype_info_c::is_BOOL_compatible(symbol->datatype)) { + } else if ((l_type == r_type) && search_base_type_c::type_is_enumerated(l_type) && get_datatype_info_c::is_BOOL_compatible(symbol->datatype)) { if (NULL != deprecated_operation) *deprecated_operation = false; l_expr->datatype = l_type; r_expr->datatype = r_type; @@ -1252,7 +1249,7 @@ void *narrow_candidate_datatypes_c::visit(case_statement_c *symbol) { for (unsigned int i = 0; i < symbol->expression->candidate_datatypes.size(); i++) { if ((get_datatype_info_c::is_ANY_INT(symbol->expression->candidate_datatypes[i])) - || (search_base_type.type_is_enumerated(symbol->expression->candidate_datatypes[i]))) + || (search_base_type_c::type_is_enumerated(symbol->expression->candidate_datatypes[i]))) symbol->expression->datatype = symbol->expression->candidate_datatypes[i]; } symbol->expression->accept(*this); diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/narrow_candidate_datatypes.hh --- a/stage3/narrow_candidate_datatypes.hh Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/narrow_candidate_datatypes.hh Wed Nov 07 20:07:11 2012 +0000 @@ -65,7 +65,6 @@ private: search_varfb_instance_type_c *search_varfb_instance_type; - search_base_type_c search_base_type; symbol_c *il_operand; il_instruction_c *fake_prev_il_instruction; il_instruction_c *current_il_instruction; diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/print_datatypes_error.cc --- a/stage3/print_datatypes_error.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/print_datatypes_error.cc Wed Nov 07 20:07:11 2012 +0000 @@ -116,16 +116,6 @@ -/* a helper function... */ -symbol_c *print_datatypes_error_c::base_type(symbol_c *symbol) { - /* NOTE: symbol == NULL is valid. It will occur when, for e.g., an undefined/undeclared symbolic_variable is used - * in the code. - */ - if (symbol == NULL) return NULL; - return (symbol_c *)symbol->accept(search_base_type); -} - - /* typedef struct { diff -r 44f74fad2cc0 -r a9f8cc778444 stage3/print_datatypes_error.hh --- a/stage3/print_datatypes_error.hh Wed Nov 07 19:26:38 2012 +0000 +++ b/stage3/print_datatypes_error.hh Wed Nov 07 20:07:11 2012 +0000 @@ -58,7 +58,6 @@ unsigned int current_display_error_level; search_varfb_instance_type_c *search_varfb_instance_type; - search_base_type_c search_base_type; /* When calling a function block, we must first find it's type, * by searching through the declarations of the variables currently * in scope. @@ -98,7 +97,6 @@ symbol_c *il_operand; /* some helper functions... */ - symbol_c *base_type(symbol_c *symbol); void handle_function_invocation(symbol_c *fcall, generic_function_call_t fcall_data); void *handle_implicit_il_fb_invocation(const char *param_name, symbol_c *il_operator, symbol_c *called_fb_declaration); void *handle_conditional_flow_control_IL_instruction(symbol_c *symbol, const char *oper); diff -r 44f74fad2cc0 -r a9f8cc778444 stage4/generate_c/generate_c_base.cc --- a/stage4/generate_c/generate_c_base.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage4/generate_c/generate_c_base.cc Wed Nov 07 20:07:11 2012 +0000 @@ -227,8 +227,7 @@ symbol_c *value, symbol_c *fb_name = NULL, bool temp = false) { - search_base_type_c search_base_type; - bool is_subrange = search_base_type.type_is_subrange(type); + bool is_subrange = search_base_type_c::type_is_subrange(type); if (is_subrange) { s4o.print("__CHECK_"); type->accept(*this); diff -r 44f74fad2cc0 -r a9f8cc778444 stage4/generate_c/generate_c_inlinefcall.cc --- a/stage4/generate_c/generate_c_inlinefcall.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage4/generate_c/generate_c_inlinefcall.cc Wed Nov 07 20:07:11 2012 +0000 @@ -72,8 +72,6 @@ search_varfb_instance_type_c *search_varfb_instance_type; search_var_instance_decl_c *search_var_instance_decl; - search_base_type_c search_base_type; - variablegeneration_t wanted_variablegeneration; public: @@ -422,8 +420,7 @@ if (f_decl == NULL) ERROR; /* determine the base data type returned by the function being called... */ - search_base_type_c search_base_type; - function_type_prefix = (symbol_c *)f_decl->type_name->accept(search_base_type); + function_type_prefix = search_base_type_c::get_basetype_decl(f_decl->type_name); function_name = symbol->function_name; @@ -583,8 +580,7 @@ if (f_decl == NULL) ERROR; /* determine the base data type returned by the function being called... */ - search_base_type_c search_base_type; - function_type_prefix = (symbol_c *)f_decl->type_name->accept(search_base_type); + function_type_prefix = search_base_type_c::get_basetype_decl(f_decl->type_name); if (NULL == function_type_prefix) ERROR; function_name = symbol->function_name; @@ -755,8 +751,7 @@ function_name = symbol->function_name; /* determine the base data type returned by the function being called... */ - search_base_type_c search_base_type; - function_type_prefix = (symbol_c *)f_decl->type_name->accept(search_base_type); + function_type_prefix = search_base_type_c::get_basetype_decl(f_decl->type_name); if (NULL == function_type_prefix) ERROR; /* loop through each function parameter, find the value we should pass diff -r 44f74fad2cc0 -r a9f8cc778444 stage4/generate_c/generate_c_st.cc --- a/stage4/generate_c/generate_c_st.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage4/generate_c/generate_c_st.cc Wed Nov 07 20:07:11 2012 +0000 @@ -81,8 +81,6 @@ search_varfb_instance_type_c *search_varfb_instance_type; search_var_instance_decl_c *search_var_instance_decl; - search_base_type_c search_base_type; - symbol_c* current_array_type; symbol_c* current_param_type; diff -r 44f74fad2cc0 -r a9f8cc778444 stage4/generate_c/generate_c_typedecl.cc --- a/stage4/generate_c/generate_c_typedecl.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage4/generate_c/generate_c_typedecl.cc Wed Nov 07 20:07:11 2012 +0000 @@ -31,7 +31,6 @@ private: symbol_c* current_type_name; bool array_is_derived; - search_base_type_c search_base_type; generate_c_base_c *basedecl; @@ -206,7 +205,7 @@ s4o.print(" value) {\n"); s4o.indent_right(); - if (search_base_type.type_is_subrange(symbol->integer_type_name)) { + if (search_base_type_c::type_is_subrange(symbol->integer_type_name)) { s4o.print(s4o.indent_spaces + "value = __CHECK_"); symbol->integer_type_name->accept(*this); s4o.print("(value);\n"); @@ -434,7 +433,7 @@ symbol->simple_spec_init->accept(*this); s4o_incl.print(")\n"); - if (search_base_type.type_is_subrange(symbol->simple_type_name)) { + if (search_base_type_c::type_is_subrange(symbol->simple_type_name)) { s4o.print("#define __CHECK_"); current_type_name->accept(*this); s4o.print(" __CHECK_"); diff -r 44f74fad2cc0 -r a9f8cc778444 stage4/generate_c/generate_location_list.cc --- a/stage4/generate_c/generate_location_list.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage4/generate_c/generate_location_list.cc Wed Nov 07 20:07:11 2012 +0000 @@ -30,7 +30,6 @@ private: symbol_c *current_var_type_symbol; generate_c_base_c *generate_c_base; - search_base_type_c search_base_type; public: generate_location_list_c(stage4out_c *s4o_ptr): s4o(*s4o_ptr) { @@ -114,7 +113,7 @@ if (current_var_type_symbol == NULL) ERROR; - current_var_type_symbol = (symbol_c *)(current_var_type_symbol->accept(search_base_type)); + current_var_type_symbol = search_base_type_c::get_basetype_decl(current_var_type_symbol); if (current_var_type_symbol == NULL) ERROR; @@ -132,7 +131,7 @@ if (current_var_type_symbol == NULL) ERROR; - current_var_type_symbol = (symbol_c *)(current_var_type_symbol->accept(search_base_type)); + current_var_type_symbol = search_base_type_c::get_basetype_decl(current_var_type_symbol); if (current_var_type_symbol == NULL) ERROR; diff -r 44f74fad2cc0 -r a9f8cc778444 stage4/generate_c/generate_var_list.cc --- a/stage4/generate_c/generate_var_list.cc Wed Nov 07 19:26:38 2012 +0000 +++ b/stage4/generate_c/generate_var_list.cc Wed Nov 07 20:07:11 2012 +0000 @@ -107,7 +107,6 @@ private: symbol_c *current_var_type_symbol; symbol_c *current_var_type_name; - search_base_type_c search_base_type; search_fb_typedecl_c *search_fb_typedecl; public: @@ -153,7 +152,7 @@ this->current_var_type_category = function_block_vtc; else { - this->current_var_type_symbol = (symbol_c *)(this->current_var_type_name->accept(search_base_type)); + this->current_var_type_symbol = search_base_type_c::get_basetype_decl(this->current_var_type_name); this->current_var_type_symbol->accept(*this); } }