checker: fix type mismatch of `in` array
parent
b62bb22fa6
commit
dbb81b89fd
|
@ -294,6 +294,12 @@ pub fn (c mut Checker) infix_expr(infix_expr mut ast.InfixExpr) table.Type {
|
||||||
if !(right.kind in [.array, .map, .string]) {
|
if !(right.kind in [.array, .map, .string]) {
|
||||||
c.error('`in` can only be used with an array/map/string.', infix_expr.pos)
|
c.error('`in` can only be used with an array/map/string.', infix_expr.pos)
|
||||||
}
|
}
|
||||||
|
if right.kind == .array {
|
||||||
|
right_sym := c.table.get_type_symbol(right.array_info().elem_type)
|
||||||
|
if left.kind != .alias && left.kind != right_sym.kind {
|
||||||
|
c.error('the data type on the left of `in` does not match the array item type.', infix_expr.pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
return table.bool_type
|
return table.bool_type
|
||||||
}
|
}
|
||||||
if !c.table.check(right_type, left_type) {
|
if !c.table.check(right_type, left_type) {
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
vlib/v/checker/tests/inout/in_array_mismatch_type.v:2:7: error: the data type on the left of `in` does not match the array item type.
|
||||||
|
1| fn main() {
|
||||||
|
2| if 1 in ['1', '2'] {
|
||||||
|
~~
|
||||||
|
3| println('ok')
|
||||||
|
4| }
|
|
@ -0,0 +1,5 @@
|
||||||
|
fn main() {
|
||||||
|
if 1 in ['1', '2'] {
|
||||||
|
println('ok')
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue