From 881fabf0d02985e59689b13cde1fe06ca897a555 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 14 Dec 2024 13:40:10 -0300 Subject: [PATCH] cgen: fix codegen for array append on indexexpr (fix #23156) (#23160) --- vlib/v/gen/c/index.v | 9 ++++++--- vlib/v/tests/left_shift_array_fixed_test.v | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 vlib/v/tests/left_shift_array_fixed_test.v diff --git a/vlib/v/gen/c/index.v b/vlib/v/gen/c/index.v index 76f6dedd4..8a1d59fac 100644 --- a/vlib/v/gen/c/index.v +++ b/vlib/v/gen/c/index.v @@ -348,13 +348,16 @@ fn (mut g Gen) index_of_fixed_array(node ast.IndexExpr, sym ast.TypeSymbol) { g.writeln(';') g.past_tmp_var_done(past) } else if node.left is ast.IndexExpr && node.left.is_setter { - past := g.past_tmp_var_new() + line := g.go_before_last_stmt().trim_space() + g.empty_line = true + tmp_var := g.new_tmp_var() styp := g.styp(node.left_type) - g.write('${styp}* ${past.tmp_var} = &') + g.write('${styp}* ${tmp_var} = &') g.expr(node.left) g.writeln(';') + g.write(line) g.write('(*') - g.past_tmp_var_done(past) + g.write(tmp_var) g.write(')') } else { if is_fn_index_call { diff --git a/vlib/v/tests/left_shift_array_fixed_test.v b/vlib/v/tests/left_shift_array_fixed_test.v new file mode 100644 index 000000000..562cbae46 --- /dev/null +++ b/vlib/v/tests/left_shift_array_fixed_test.v @@ -0,0 +1,7 @@ +fn test_main() { + mut space := [2][2][]int{} + space[1][1] << 123 + space[0][0] << 321 + assert space[1][1] == [123] + assert space[0][0] == [321] +} -- 2.39.5