From 08c20196725c61e1c093b2b84e3c55eb6e9a11fa Mon Sep 17 00:00:00 2001 From: yuyi Date: Tue, 29 Oct 2024 02:57:12 +0800 Subject: [PATCH] cgen: fix array append map value with or expr (fix #22674) (#22678) --- vlib/v/gen/c/index.v | 6 +++--- .../array_append_map_with_or_expr_test.v | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 vlib/v/tests/builtin_arrays/array_append_map_with_or_expr_test.v diff --git a/vlib/v/gen/c/index.v b/vlib/v/gen/c/index.v index 41053ddcb..86d303e76 100644 --- a/vlib/v/gen/c/index.v +++ b/vlib/v/gen/c/index.v @@ -436,9 +436,9 @@ fn (mut g Gen) index_of_map(node ast.IndexExpr, sym ast.TypeSymbol) { zero := g.type_default(info.value_type) g.write('${zero} })))') } - } else if g.inside_map_postfix || g.inside_map_infix || g.inside_map_index - || g.inside_array_index - || (g.is_assign_lhs && !g.is_arraymap_set && get_and_set_types) { + } else if !gen_or && (g.inside_map_postfix || g.inside_map_infix + || g.inside_map_index || g.inside_array_index || (g.is_assign_lhs && !g.is_arraymap_set + && get_and_set_types)) { zero := g.type_default(info.value_type) if node.is_setter { g.write('(*(${val_type_str}*)map_get_and_set((map*)') diff --git a/vlib/v/tests/builtin_arrays/array_append_map_with_or_expr_test.v b/vlib/v/tests/builtin_arrays/array_append_map_with_or_expr_test.v new file mode 100644 index 000000000..0c7263a8d --- /dev/null +++ b/vlib/v/tests/builtin_arrays/array_append_map_with_or_expr_test.v @@ -0,0 +1,10 @@ +fn test_array_append_map_with_or_expr() { + foobar := { + 'foo': 'Foo' + 'bar': 'Bar' + } + mut arr := []string{} + arr << foobar['foo'] + arr << foobar['baz'] or { 'Unknown' } + assert arr == ['Foo', 'Unknown'] +} -- 2.39.5