From a847edd6c8a81a9dc5cfef7acd39553f3ed48cee Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Thu, 24 Oct 2024 03:47:11 -0300 Subject: [PATCH] cgen: fix anon fn with `&` prefix (fix #22628) (#22638) --- vlib/v/gen/c/fn.v | 5 +++++ vlib/v/tests/fns/anon_with_prefix_test.v | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 vlib/v/tests/fns/anon_with_prefix_test.v diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 5571022369..040c8e46ac 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -593,6 +593,11 @@ fn (mut g Gen) closure_ctx(node ast.FnDecl) string { } fn (mut g Gen) gen_anon_fn(mut node ast.AnonFn) { + is_amp := g.is_amp + g.is_amp = false + defer { + g.is_amp = is_amp + } g.gen_anon_fn_decl(mut node) fn_name := g.gen_closure_fn_name(node) if !node.decl.scope.has_inherited_vars() { diff --git a/vlib/v/tests/fns/anon_with_prefix_test.v b/vlib/v/tests/fns/anon_with_prefix_test.v new file mode 100644 index 0000000000..e7070ef7eb --- /dev/null +++ b/vlib/v/tests/fns/anon_with_prefix_test.v @@ -0,0 +1,19 @@ +module main + +struct TestA { + aa int +} + +fn test_main() { + func := &fn () int { + arr := []TestA{} + return arr.len + } + assert func() == 0 + + func2 := &fn () int { + arr := []TestA{} + return arr.len + } + assert func2() == 0 +}