From 11d9a67e3b361e511fcdc4021970c72266e8821c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A7=E5=BF=83?= Date: Sun, 10 Apr 2022 16:42:17 +0800 Subject: [PATCH] cgen: fix invalid operands to `an_alias in an_array_of_aliased_values` (#13994) --- vlib/arrays/arrays_test.v | 7 +++++++ vlib/v/gen/c/array.v | 12 ++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/vlib/arrays/arrays_test.v b/vlib/arrays/arrays_test.v index 1d88fcf4c4..74eb69b7d3 100644 --- a/vlib/arrays/arrays_test.v +++ b/vlib/arrays/arrays_test.v @@ -293,3 +293,10 @@ fn test_can_copy_bits() { // map not copyable assert !can_copy_bits() } + +type Str = string + +fn test_alias_string_contains() { + names := [Str('')] + assert (Str('') in names) == true +} diff --git a/vlib/v/gen/c/array.v b/vlib/v/gen/c/array.v index 86dd3ea40b..ef32a7e9c4 100644 --- a/vlib/v/gen/c/array.v +++ b/vlib/v/gen/c/array.v @@ -673,7 +673,11 @@ fn (mut g Gen) gen_array_contains_methods() { fn_name := '${left_type_str}_contains' left_info := left_final_sym.info as ast.Array mut elem_type_str := g.typ(left_info.elem_type) - elem_sym := g.table.sym(left_info.elem_type) + mut elem_sym := g.table.sym(left_info.elem_type) + if elem_sym.kind == .alias { + info := elem_sym.info as ast.Alias + elem_sym = g.table.sym(info.parent_type) + } if elem_sym.kind == .function { left_type_str = 'Array_voidptr' elem_type_str = 'voidptr' @@ -751,7 +755,11 @@ fn (mut g Gen) gen_array_index_methods() { fn_name := '${left_type_str}_index' info := final_left_sym.info as ast.Array mut elem_type_str := g.typ(info.elem_type) - elem_sym := g.table.sym(info.elem_type) + mut elem_sym := g.table.sym(info.elem_type) + if elem_sym.kind == .alias { + info_t := elem_sym.info as ast.Alias + elem_sym = g.table.sym(info_t.parent_type) + } if elem_sym.kind == .function { left_type_str = 'Array_voidptr' elem_type_str = 'voidptr'