@@ -713,7 +713,12 @@ fn (mut g Gen) gen_str_for_map(info ast.Map, styp string, str_fn_name string) {
713713 }
714714 val_styp := g.typ (val_typ)
715715 mut elem_str_fn_name := val_styp.replace ('*' , '' ) + '_str'
716- if val_sym.has_method_with_generic_parent ('str' ) {
716+
717+ mut receiver_is_ptr := false
718+ fn_str := val_sym.find_method_with_generic_parent ('str' ) or { ast.Fn{} }
719+
720+ if fn_str.name == 'str' {
721+ receiver_is_ptr = fn_str.receiver_type.is_ptr ()
717722 match mut val_sym.info {
718723 ast.Struct, ast.Interface, ast.SumType {
719724 if val_sym.info.generic_types.len > 0 {
@@ -755,7 +760,7 @@ fn (mut g Gen) gen_str_for_map(info ast.Map, styp string, str_fn_name string) {
755760 } else if val_sym.kind == .string {
756761 tmp_str := str_intp_sq ('*(${val_styp} *)DenseArray_value(&m.key_values, i)' )
757762 g.auto_str_funcs.writeln ('\t\t strings__Builder_write_string(&sb, ${tmp_str} );' )
758- } else if should_use_indent_func (val_sym.kind) && ! val_sym. has_method_with_generic_parent ( 'str' ) {
763+ } else if should_use_indent_func (val_sym.kind) && fn_str.name != 'str' {
759764 ptr_str := '*' .repeat (val_typ.nr_muls ())
760765 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));' )
761766 } else if val_sym.kind in [.f32 , .f64 ] {
@@ -769,7 +774,7 @@ fn (mut g Gen) gen_str_for_map(info ast.Map, styp string, str_fn_name string) {
769774 tmp_str := str_intp_rune ('${elem_str_fn_name} (*(${val_styp} *)DenseArray_value(&m.key_values, i))' )
770775 g.auto_str_funcs.writeln ('\t\t strings__Builder_write_string(&sb, ${tmp_str} );' )
771776 } else {
772- ptr_str := '*' .repeat (val_typ.nr_muls ())
777+ ptr_str := '*' .repeat (if receiver_is_ptr { val_typ.nr_muls () - 1 } else { val_typ. nr_muls () } )
773778 g.auto_str_funcs.writeln ('\t\t strings__Builder_write_string(&sb, ${elem_str_fn_name} (*${ptr_str} (${val_styp} *)DenseArray_value(&m.key_values, i)));' )
774779 }
775780 g.auto_str_funcs.writeln ('\t\t if (i != m.key_values.len-1) {' )
0 commit comments