@@ -709,8 +709,18 @@ fn (mut g Gen) gen_str_for_map(info ast.Map, styp string, str_fn_name string) {
709709 val_sym = g.table.sym (val_typ)
710710 }
711711 val_styp := g.typ (val_typ)
712- elem_str_fn_name := val_styp.replace ('*' , '' ) + '_str'
713- if ! val_sym.has_method ('str' ) {
712+ mut elem_str_fn_name := val_styp.replace ('*' , '' ) + '_str'
713+ if val_sym.has_method_with_generic_parent ('str' ) {
714+ match mut val_sym.info {
715+ ast.Struct, ast.Interface, ast.SumType {
716+ if val_sym.info.generic_types.len > 0 {
717+ elem_str_fn_name = g.generic_fn_name (val_sym.info.concrete_types,
718+ elem_str_fn_name)
719+ }
720+ }
721+ else {}
722+ }
723+ } else {
714724 g.get_str_fn (val_typ)
715725 }
716726
@@ -742,7 +752,7 @@ fn (mut g Gen) gen_str_for_map(info ast.Map, styp string, str_fn_name string) {
742752 } else if val_sym.kind == .string {
743753 tmp_str := str_intp_sq ('*(${val_styp} *)DenseArray_value(&m.key_values, i)' )
744754 g.auto_str_funcs.writeln ('\t\t strings__Builder_write_string(&sb, ${tmp_str} );' )
745- } else if should_use_indent_func (val_sym.kind) && ! val_sym.has_method ('str' ) {
755+ } else if should_use_indent_func (val_sym.kind) && ! val_sym.has_method_with_generic_parent ('str' ) {
746756 ptr_str := '*' .repeat (val_typ.nr_muls ())
747757 g.auto_str_funcs.writeln ('\t\t strings__Builder_write_string(&sb, indent_${elem_str_fn_name} (*${ptr_str} (${val_styp} *)DenseArray_value(&m.key_values, i), indent_count));' )
748758 } else if val_sym.kind in [.f32 , .f64 ] {
0 commit comments