From 97f9abcf82d05132f01bbdb90299434b6bb4344c Mon Sep 17 00:00:00 2001 From: yuyi Date: Wed, 3 Mar 2021 16:12:08 +0800 Subject: [PATCH] cgen: fix anon_fn in containers (#9077) --- vlib/v/gen/c/cgen.v | 1 + vlib/v/tests/anon_fn_in_containers_test.v | 24 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index a8fabe1437..ac337a9699 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -1956,6 +1956,7 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { g.assign_op = assign_stmt.op g.expr(left) g.is_assign_lhs = false + g.is_array_set = false if left is ast.IndexExpr { sym := g.table.get_type_symbol(left.left_type) if sym.kind in [.map, .array] { diff --git a/vlib/v/tests/anon_fn_in_containers_test.v b/vlib/v/tests/anon_fn_in_containers_test.v index b4fdbbaf3e..0a2e80b9bf 100644 --- a/vlib/v/tests/anon_fn_in_containers_test.v +++ b/vlib/v/tests/anon_fn_in_containers_test.v @@ -11,3 +11,27 @@ fn test_anon_fn_in_map() { } assert woop['shat']() == 'shoopity shoop' } + +fn test_anon_fn_in_array() { + mut woop := [fn() string { + return 'whoopity whoop' + }] + assert woop[0]() == 'whoopity whoop' + + woop[0] = fn() string { + return 'shoopity shoop' + } + assert woop[0]() == 'shoopity shoop' +} + +fn test_anon_fn_in_fixed_array() { + mut woop := [fn() string { + return 'whoopity whoop' + }]! + assert woop[0]() == 'whoopity whoop' + + woop[0] = fn() string { + return 'shoopity shoop' + } + assert woop[0]() == 'shoopity shoop' +}