From d472a27489260831e14550c6fb4ea928bd078945 Mon Sep 17 00:00:00 2001 From: yuyi Date: Tue, 9 Jun 2020 16:14:10 +0800 Subject: [PATCH] cgen: fix array.map(anon_fn) --- vlib/builtin/array_test.v | 7 +++++++ vlib/v/gen/cgen.v | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/vlib/builtin/array_test.v b/vlib/builtin/array_test.v index 56de6422ec..65edb95158 100644 --- a/vlib/builtin/array_test.v +++ b/vlib/builtin/array_test.v @@ -589,6 +589,13 @@ fn test_map() { assert strs == ['v', 'is', 'awesome'] } +fn test_anon_fn_map() { + add_num := fn (i int) int { + return i + 1 + } + assert [1,2,3].map(add_num) == [2,3,4] +} + fn test_array_str() { numbers := [1, 2, 3] assert numbers == [1,2,3] diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 097f0a692d..4f2081e38d 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -3175,7 +3175,15 @@ fn (mut g Gen) gen_map(node ast.CallExpr) { match node.args[0].expr { ast.Ident { if it.kind == .function { - g.writeln('${it.name}(it)') + g.write('${it.name}(it)') + } else if it.kind == .variable { + var_info := it.var_info() + sym := g.table.get_type_symbol(var_info.typ) + if sym.kind == .function { + g.write('${it.name}(it)') + } else { + g.expr(node.args[0].expr) + } } else { g.expr(node.args[0].expr) }