From de1c431ce3b9c3659503d44e05dcabad1bc9009c Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 7 Feb 2024 09:07:38 -0300 Subject: [PATCH] cgen: fix auto str for map with ptr str (#20741) --- vlib/v/gen/c/auto_str_methods.v | 4 +++- vlib/v/tests/map_auto_str_ptr_test.v | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/map_auto_str_ptr_test.v diff --git a/vlib/v/gen/c/auto_str_methods.v b/vlib/v/gen/c/auto_str_methods.v index e5786dc536e59b..1a48f4757bc89a 100644 --- a/vlib/v/gen/c/auto_str_methods.v +++ b/vlib/v/gen/c/auto_str_methods.v @@ -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)));') } diff --git a/vlib/v/tests/map_auto_str_ptr_test.v b/vlib/v/tests/map_auto_str_ptr_test.v new file mode 100644 index 00000000000000..5a847e280b2fe7 --- /dev/null +++ b/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 +}