From 8a639b727dbb0a1de228b4e2bfb85d8a0b7266c4 Mon Sep 17 00:00:00 2001 From: chengqinglin Date: Sun, 10 Apr 2022 09:36:30 +0800 Subject: [PATCH] fix: invalid operands to binary expression --- 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'