Skip to content

Commit e35f5f2

Browse files
authored
cgen: fix string of map with generic struct value (#16595)
1 parent a96e2e7 commit e35f5f2

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

vlib/v/gen/c/auto_str_methods.v

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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\tstrings__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\tstrings__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] {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import datatypes
2+
3+
fn test_string_map_with_generic_struct_value() {
4+
p := map[string]datatypes.Stack[int]{}
5+
println(p)
6+
assert '${p}' == '{}'
7+
}

0 commit comments

Comments
 (0)