Skip to content

Commit

Permalink
cgen: fix auto str for map with ptr str (#20741)
Browse files Browse the repository at this point in the history
  • Loading branch information
felipensp committed Feb 7, 2024
1 parent 349741d commit de1c431
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
4 changes: 3 additions & 1 deletion vlib/v/gen/c/auto_str_methods.v
Expand Up @@ -806,9 +806,11 @@ fn (mut g Gen) gen_str_for_map(info ast.Map, styp string, str_fn_name string) {
tmp_str := str_intp_rune('${elem_str_fn_name}(*(${val_styp}*)DenseArray_value(&m.key_values, i))')
g.auto_str_funcs.writeln('\t\tstrings__Builder_write_string(&sb, ${tmp_str});')
} else {
ptr_str := '*'.repeat(if receiver_is_ptr { val_typ.nr_muls() - 1 } else { val_typ.nr_muls() })
ptr_str := '*'.repeat(val_typ.nr_muls())
if val_typ.has_flag(.option) {
g.auto_str_funcs.writeln('\t\tstrings__Builder_write_string(&sb, ${g.get_str_fn(val_typ)}(*${ptr_str}(${val_styp}*)DenseArray_value(&m.key_values, i)));')
} else if receiver_is_ptr {
g.auto_str_funcs.writeln('\t\tstrings__Builder_write_string(&sb, ${elem_str_fn_name}(${ptr_str}(${val_styp}*)DenseArray_value(&m.key_values, i)));')
} else {
g.auto_str_funcs.writeln('\t\tstrings__Builder_write_string(&sb, ${elem_str_fn_name}(*${ptr_str}(${val_styp}*)DenseArray_value(&m.key_values, i)));')
}
Expand Down
23 changes: 23 additions & 0 deletions vlib/v/tests/map_auto_str_ptr_test.v
@@ -0,0 +1,23 @@
module main

struct Blob {
label int
}

fn (mut b Blob) str() string {
return ''
}

struct Labels {
blobs map[int]Blob
}

fn break_it() Labels {
mut a := Labels{}
return a
}

fn test_main() {
mut a := break_it()
assert a.blobs.len == 0
}

0 comments on commit de1c431

Please sign in to comment.