From 1c10d2f6ab57494357b67b4919181efbb3b8e73f Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 4 Dec 2023 16:07:25 -0300 Subject: [PATCH] cgen: fix array auto cloning (#20078) --- vlib/v/gen/c/index.v | 3 +- vlib/v/tests/array_fixed_auto_clone_test.v | 32 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 vlib/v/tests/array_fixed_auto_clone_test.v diff --git a/vlib/v/gen/c/index.v b/vlib/v/gen/c/index.v index 573391902dd58c..b5c5830fd9004a 100644 --- a/vlib/v/gen/c/index.v +++ b/vlib/v/gen/c/index.v @@ -65,11 +65,10 @@ fn (mut g Gen) index_expr(node ast.IndexExpr) { } fn (mut g Gen) index_range_expr(node ast.IndexExpr, range ast.RangeExpr) { - sym := g.table.final_sym(node.left_type) + sym := g.table.final_sym(g.unwrap_generic(node.left_type)) mut tmp_opt := '' mut cur_line := '' mut gen_or := node.or_expr.kind != .absent || node.is_option - if sym.kind == .string { if node.is_gated { g.write('string_substr_ni(') diff --git a/vlib/v/tests/array_fixed_auto_clone_test.v b/vlib/v/tests/array_fixed_auto_clone_test.v new file mode 100644 index 00000000000000..9710c83930f2d0 --- /dev/null +++ b/vlib/v/tests/array_fixed_auto_clone_test.v @@ -0,0 +1,32 @@ +fn test_main() { + mut buf := [100]u8{} + name(mut buf) + + mut buf2 := []u8{} + name(mut buf2) +} + +fn name[T](mut buf4 T) { + for idx in 0 .. 100 { + $if T is $array_fixed { + buf4[idx] = idx + } $else $if T is $array { + buf4 << idx + } + } + mut bp := buf4[0..5] + assert bp.len == 5 + println(bp) + + bp = buf4[..] + assert bp.len == 100 + println(bp) + + bp = buf4[4..] + assert bp.len == 96 + println(bp) + + bp = buf4[1..99] + assert bp.len == 98 + println(bp) +}