diff -r f8d422b98315 -r 21be0f2f242d stage4/generate_c/generate_c_il.cc --- a/stage4/generate_c/generate_c_il.cc Sat Apr 14 15:19:17 2012 +0100 +++ b/stage4/generate_c/generate_c_il.cc Sat Apr 14 16:44:53 2012 +0100 @@ -232,6 +232,7 @@ search_fb_instance_decl_c *search_fb_instance_decl; 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; @@ -252,6 +253,8 @@ search_expression_type = new search_expression_type_c(scope); search_fb_instance_decl = new search_fb_instance_decl_c(scope); search_varfb_instance_type = new search_varfb_instance_type_c(scope); + search_var_instance_decl = new search_var_instance_decl_c(scope); + current_operand = NULL; current_operand_type = NULL; il_default_variable_init_value = NULL; @@ -267,6 +270,7 @@ delete search_fb_instance_decl; delete search_expression_type; delete search_varfb_instance_type; + delete search_var_instance_decl; } void generate(instruction_list_c *il) { @@ -435,7 +439,7 @@ } void *print_getter(symbol_c *symbol) { - unsigned int vartype = search_varfb_instance_type->get_vartype(symbol); + unsigned int vartype = search_var_instance_decl->get_vartype(symbol); if (wanted_variablegeneration == fparam_output_vg) { if (vartype == search_var_instance_decl_c::external_vt) s4o.print(GET_EXTERNAL_BY_REF); @@ -457,7 +461,7 @@ variablegeneration_t old_wanted_variablegeneration = wanted_variablegeneration; wanted_variablegeneration = complextype_base_vg; symbol->accept(*this); - if (search_varfb_instance_type->type_is_complex()) + if (search_varfb_instance_type->type_is_complex(symbol)) s4o.print(","); wanted_variablegeneration = complextype_suffix_vg; symbol->accept(*this); @@ -475,8 +479,8 @@ bool type_is_complex = false; if (fb_symbol == NULL) { - unsigned int vartype = search_varfb_instance_type->get_vartype(symbol); - type_is_complex = search_varfb_instance_type->type_is_complex(); + unsigned int vartype = search_var_instance_decl->get_vartype(symbol); + type_is_complex = search_varfb_instance_type->type_is_complex(symbol); if (vartype == search_var_instance_decl_c::external_vt) s4o.print(SET_EXTERNAL); else if (vartype == search_var_instance_decl_c::located_vt) @@ -591,7 +595,7 @@ break; default: if (this->is_variable_prefix_null()) { - vartype = search_varfb_instance_type->get_vartype(symbol); + vartype = search_var_instance_decl->get_vartype(symbol); if (wanted_variablegeneration == fparam_output_vg) { s4o.print("&("); generate_c_base_c::visit(symbol);