stage4/generate_c/generate_c_st.cc
changeset 854 13d0b67de111
parent 852 efb44e892582
child 855 a3109442e166
child 863 06820d03a433
equal deleted inserted replaced
853:818c4ac5d64d 854:13d0b67de111
   129 
   129 
   130 void *print_getter(symbol_c *symbol) {
   130 void *print_getter(symbol_c *symbol) {
   131   unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   131   unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   132   if (wanted_variablegeneration == fparam_output_vg) {
   132   if (wanted_variablegeneration == fparam_output_vg) {
   133     if (vartype == search_var_instance_decl_c::external_vt) {
   133     if (vartype == search_var_instance_decl_c::external_vt) {
   134       if (search_var_instance_decl->type_is_fb(symbol))
   134       if (!get_datatype_info_c::is_type_valid    (symbol->datatype)) ERROR;
       
   135       if ( get_datatype_info_c::is_function_block(symbol->datatype))
   135         s4o.print(GET_EXTERNAL_FB_BY_REF);
   136         s4o.print(GET_EXTERNAL_FB_BY_REF);
   136       else
   137       else
   137         s4o.print(GET_EXTERNAL_BY_REF);
   138         s4o.print(GET_EXTERNAL_BY_REF);
   138     }
   139     }
   139     else if (vartype == search_var_instance_decl_c::located_vt)
   140     else if (vartype == search_var_instance_decl_c::located_vt)
   141     else
   142     else
   142       s4o.print(GET_VAR_BY_REF);
   143       s4o.print(GET_VAR_BY_REF);
   143   }
   144   }
   144   else {
   145   else {
   145     if (vartype == search_var_instance_decl_c::external_vt) {
   146     if (vartype == search_var_instance_decl_c::external_vt) {
   146       if (search_var_instance_decl->type_is_fb(symbol))
   147       if (!get_datatype_info_c::is_type_valid    (symbol->datatype)) ERROR;
       
   148       if ( get_datatype_info_c::is_function_block(symbol->datatype))
   147         s4o.print(GET_EXTERNAL_FB);
   149         s4o.print(GET_EXTERNAL_FB);
   148       else
   150       else
   149         s4o.print(GET_EXTERNAL);
   151         s4o.print(GET_EXTERNAL);
   150     }
   152     }
   151     else if (vartype == search_var_instance_decl_c::located_vt)
   153     else if (vartype == search_var_instance_decl_c::located_vt)
   177   bool type_is_complex = false;
   179   bool type_is_complex = false;
   178   if (fb_symbol == NULL) {
   180   if (fb_symbol == NULL) {
   179     unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   181     unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   180     type_is_complex = analyse_variable_c::contains_complex_type(symbol);
   182     type_is_complex = analyse_variable_c::contains_complex_type(symbol);
   181     if (vartype == search_var_instance_decl_c::external_vt) {
   183     if (vartype == search_var_instance_decl_c::external_vt) {
   182       if (search_var_instance_decl->type_is_fb(symbol))
   184       if (!get_datatype_info_c::is_type_valid    (symbol->datatype)) ERROR;
       
   185       if ( get_datatype_info_c::is_function_block(symbol->datatype))
   183         s4o.print(SET_EXTERNAL_FB);
   186         s4o.print(SET_EXTERNAL_FB);
   184       else
   187       else
   185         s4o.print(SET_EXTERNAL);
   188         s4o.print(SET_EXTERNAL);
   186     }
   189     }
   187     else if (vartype == search_var_instance_decl_c::located_vt)
   190     else if (vartype == search_var_instance_decl_c::located_vt)
   327 /*************************************/
   330 /*************************************/
   328 
   331 
   329 // SYM_REF2(structured_variable_c, record_variable, field_selector)
   332 // SYM_REF2(structured_variable_c, record_variable, field_selector)
   330 void *visit(structured_variable_c *symbol) {
   333 void *visit(structured_variable_c *symbol) {
   331   TRACE("structured_variable_c");
   334   TRACE("structured_variable_c");
   332   bool type_is_complex = search_var_instance_decl->type_is_complex(symbol->record_variable);
   335   bool type_is_complex = analyse_variable_c::is_complex_type(symbol->record_variable);
   333   switch (wanted_variablegeneration) {
   336   switch (wanted_variablegeneration) {
   334     case complextype_base_vg:
   337     case complextype_base_vg:
   335     case complextype_base_assignment_vg:
   338     case complextype_base_assignment_vg:
   336       symbol->record_variable->accept(*this);
   339       symbol->record_variable->accept(*this);
   337       if (!type_is_complex) {
   340       if (!type_is_complex) {