stage4/generate_c/generate_c_il.cc
changeset 854 13d0b67de111
parent 852 efb44e892582
child 861 443e8243f289
equal deleted inserted replaced
853:818c4ac5d64d 854:13d0b67de111
   365 
   365 
   366     void *print_getter(symbol_c *symbol) {
   366     void *print_getter(symbol_c *symbol) {
   367       unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   367       unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   368       if (wanted_variablegeneration == fparam_output_vg) {
   368       if (wanted_variablegeneration == fparam_output_vg) {
   369         if (vartype == search_var_instance_decl_c::external_vt) {
   369         if (vartype == search_var_instance_decl_c::external_vt) {
   370           if (search_var_instance_decl->type_is_fb(symbol))
   370           if (!get_datatype_info_c::is_type_valid    (symbol->datatype)) ERROR;
       
   371           if ( get_datatype_info_c::is_function_block(symbol->datatype))
   371             s4o.print(GET_EXTERNAL_FB_BY_REF);
   372             s4o.print(GET_EXTERNAL_FB_BY_REF);
   372           else
   373           else
   373             s4o.print(GET_EXTERNAL_BY_REF);
   374             s4o.print(GET_EXTERNAL_BY_REF);
   374         }
   375         }
   375         else if (vartype == search_var_instance_decl_c::located_vt)
   376         else if (vartype == search_var_instance_decl_c::located_vt)
   377         else
   378         else
   378           s4o.print(GET_VAR_BY_REF);
   379           s4o.print(GET_VAR_BY_REF);
   379       }
   380       }
   380       else {
   381       else {
   381         if (vartype == search_var_instance_decl_c::external_vt) {
   382         if (vartype == search_var_instance_decl_c::external_vt) {
   382           if (search_var_instance_decl->type_is_fb(symbol))
   383           if (!get_datatype_info_c::is_type_valid    (symbol->datatype)) ERROR;
       
   384           if ( get_datatype_info_c::is_function_block(symbol->datatype))
   383             s4o.print(GET_EXTERNAL_FB);
   385             s4o.print(GET_EXTERNAL_FB);
   384           else
   386           else
   385             s4o.print(GET_EXTERNAL);
   387             s4o.print(GET_EXTERNAL);
   386         }
   388         }
   387         else if (vartype == search_var_instance_decl_c::located_vt)
   389         else if (vartype == search_var_instance_decl_c::located_vt)
   412       bool type_is_complex = false;
   414       bool type_is_complex = false;
   413       if (fb_symbol == NULL) {
   415       if (fb_symbol == NULL) {
   414         unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   416         unsigned int vartype = search_var_instance_decl->get_vartype(symbol);
   415         type_is_complex = analyse_variable_c::contains_complex_type(symbol);
   417         type_is_complex = analyse_variable_c::contains_complex_type(symbol);
   416         if (vartype == search_var_instance_decl_c::external_vt) {
   418         if (vartype == search_var_instance_decl_c::external_vt) {
   417           if (search_var_instance_decl->type_is_fb(symbol))
   419           if (!get_datatype_info_c::is_type_valid    (symbol->datatype)) ERROR;
       
   420           if ( get_datatype_info_c::is_function_block(symbol->datatype))
   418             s4o.print(SET_EXTERNAL_FB);
   421             s4o.print(SET_EXTERNAL_FB);
   419           else
   422           else
   420             s4o.print(SET_EXTERNAL);
   423             s4o.print(SET_EXTERNAL);
   421         }
   424         }
   422         else if (vartype == search_var_instance_decl_c::located_vt)
   425         else if (vartype == search_var_instance_decl_c::located_vt)
   570 /*************************************/
   573 /*************************************/
   571 
   574 
   572 // SYM_REF2(structured_variable_c, record_variable, field_selector)
   575 // SYM_REF2(structured_variable_c, record_variable, field_selector)
   573 void *visit(structured_variable_c *symbol) {
   576 void *visit(structured_variable_c *symbol) {
   574   TRACE("structured_variable_c");
   577   TRACE("structured_variable_c");
   575   bool type_is_complex = search_var_instance_decl->type_is_complex(symbol->record_variable);
   578   bool type_is_complex = analyse_variable_c::is_complex_type(symbol->record_variable);
   576   switch (wanted_variablegeneration) {
   579   switch (wanted_variablegeneration) {
   577     case complextype_base_vg:
   580     case complextype_base_vg:
   578     case complextype_base_assignment_vg:
   581     case complextype_base_assignment_vg:
   579       symbol->record_variable->accept(*this);
   582       symbol->record_variable->accept(*this);
   580       if (!type_is_complex) {
   583       if (!type_is_complex) {