From 497b613023f5826e94a3cf10483c8ce521f030b6 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Sat, 17 Feb 2024 00:30:57 +0200 Subject: [PATCH] cgen: fix codegen for a.index/1, where a is []Fn (#20849) --- vlib/builtin/array_index_test.v | 35 +++++++++++++++++++++++++++++++++ vlib/v/gen/c/array.v | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 vlib/builtin/array_index_test.v diff --git a/vlib/builtin/array_index_test.v b/vlib/builtin/array_index_test.v new file mode 100644 index 00000000000000..913ec4f1d0e365 --- /dev/null +++ b/vlib/builtin/array_index_test.v @@ -0,0 +1,35 @@ +fn test_index_of_ints() { + ia := [1, 2, 3] + ii := ia.index(2) + dump(ii) + assert ii == 1 +} + +fn test_index_of_strings() { + sa := ['a', 'b', 'c'] + si := sa.index('b') + dump(si) + assert si == 1 +} + +fn test_index_of_voidptrs() { + pa := [voidptr(123), voidptr(45), voidptr(99)] + pi := pa.index(voidptr(45)) + dump(pi) + assert pi == 1 +} + +////////// + +fn a() {} + +fn b() {} + +fn c() {} + +fn test_index_of_fns() { + fa := [a, b, c] + fi := fa.index(b) + dump(fi) + assert fi == 1 +} diff --git a/vlib/v/gen/c/array.v b/vlib/v/gen/c/array.v index 43d049c9db4195..8dc4a49655d7ce 100644 --- a/vlib/v/gen/c/array.v +++ b/vlib/v/gen/c/array.v @@ -1061,7 +1061,7 @@ fn (mut g Gen) gen_array_index_methods() { ptr_typ := g.equality_fn(info.elem_type) fn_builder.writeln('\t\tif (${ptr_typ}_arr_eq(*pelem, v)) {') } else if elem_sym.kind == .function && !info.elem_type.is_ptr() { - fn_builder.writeln('\t\tif ( pelem == v) {') + fn_builder.writeln('\t\tif ( *pelem == v) {') } else if elem_sym.kind == .map && !info.elem_type.is_ptr() { ptr_typ := g.equality_fn(info.elem_type) fn_builder.writeln('\t\tif (${ptr_typ}_map_eq((*pelem, v))) {')