@@ -843,26 +843,28 @@ class CCPPDSUtils {
843843 + struct_type_str + " * dest)" ;
844844 func_decls += " inline " + signature + " ;\n " ;
845845 generated_code += indent + signature + " {\n " ;
846- for ( auto item: struct_type_t ->m_symtab ->get_scope () ) {
847- ASR::ttype_t * member_type_asr = ASRUtils::symbol_type (item.second );
846+ for (size_t i=0 ; i < struct_type_t ->n_members ; i++) {
847+ std::string mem_name = std::string (struct_type_t ->m_members [i]);
848+ ASR::symbol_t * member = struct_type_t ->m_symtab ->get_symbol (mem_name);
849+ ASR::ttype_t * member_type_asr = ASRUtils::symbol_type (member);
848850 if ( CUtils::is_non_primitive_DT (member_type_asr) ||
849851 ASR::is_a<ASR::Character_t>(*member_type_asr) ) {
850- generated_code += indent + tab + get_deepcopy (member_type_asr, " &(src->" + item. first + " )" ,
851- " &(dest->" + item. first + " )" ) + " ;\n " ;
852+ generated_code += indent + tab + get_deepcopy (member_type_asr, " &(src->" + mem_name + " )" ,
853+ " &(dest->" + mem_name + " )" ) + " ;\n " ;
852854 } else if ( ASRUtils::is_array (member_type_asr) ) {
853855 ASR::dimension_t * m_dims = nullptr ;
854856 size_t n_dims = ASRUtils::extract_dimensions_from_ttype (member_type_asr, m_dims);
855857 if ( ASRUtils::is_fixed_size_array (m_dims, n_dims) ) {
856858 std::string array_size = std::to_string (ASRUtils::get_fixed_size_of_array (m_dims, n_dims));
857859 array_size += " *sizeof(" + CUtils::get_c_type_from_ttype_t (member_type_asr) + " )" ;
858- generated_code += indent + tab + " memcpy(dest->" + item. first + " , src->" + item. first +
860+ generated_code += indent + tab + " memcpy(dest->" + mem_name + " , src->" + mem_name +
859861 " , " + array_size + " );\n " ;
860862 } else {
861- generated_code += indent + tab + get_deepcopy (member_type_asr, " src->" + item. first ,
862- " dest->" + item. first ) + " ;\n " ;
863+ generated_code += indent + tab + get_deepcopy (member_type_asr, " src->" + mem_name ,
864+ " dest->" + mem_name ) + " ;\n " ;
863865 }
864866 } else {
865- generated_code += indent + tab + " dest->" + item. first + " = " + " src->" + item. first + " ;\n " ;
867+ generated_code += indent + tab + " dest->" + mem_name + " = " + " src->" + mem_name + " ;\n " ;
866868 }
867869 }
868870 generated_code += indent + " }\n\n " ;
0 commit comments