mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: fix error of 'in array of sumtype' (#15756)
This commit is contained in:
@ -437,12 +437,12 @@ fn (mut g Gen) infix_expr_in_op(node ast.InfixExpr) {
|
||||
elem_type := right.sym.info.elem_type
|
||||
elem_type_ := g.unwrap(elem_type)
|
||||
if elem_type_.sym.kind == .sum_type {
|
||||
if node.left_type in elem_type_.sym.sumtype_info().variants {
|
||||
if ast.mktyp(node.left_type) in elem_type_.sym.sumtype_info().variants {
|
||||
new_node_left := ast.CastExpr{
|
||||
arg: ast.empty_expr
|
||||
typ: elem_type
|
||||
expr: node.left
|
||||
expr_type: node.left_type
|
||||
expr_type: ast.mktyp(node.left_type)
|
||||
}
|
||||
g.gen_array_contains(node.right_type, node.right, new_node_left)
|
||||
return
|
||||
@ -507,12 +507,12 @@ fn (mut g Gen) infix_expr_in_op(node ast.InfixExpr) {
|
||||
elem_type := right.sym.info.elem_type
|
||||
elem_type_ := g.unwrap(elem_type)
|
||||
if elem_type_.sym.kind == .sum_type {
|
||||
if node.left_type in elem_type_.sym.sumtype_info().variants {
|
||||
if ast.mktyp(node.left_type) in elem_type_.sym.sumtype_info().variants {
|
||||
new_node_left := ast.CastExpr{
|
||||
arg: ast.empty_expr
|
||||
typ: elem_type
|
||||
expr: node.left
|
||||
expr_type: node.left_type
|
||||
expr_type: ast.mktyp(node.left_type)
|
||||
}
|
||||
g.gen_array_contains(node.right_type, node.right, new_node_left)
|
||||
return
|
||||
|
@ -319,3 +319,11 @@ fn test_in_array_literal_of_sumtype() {
|
||||
val2 := `+`
|
||||
assert val2 in [TokenValue(`+`), TokenValue(`-`)]
|
||||
}
|
||||
|
||||
type StringOrNumber = int | string
|
||||
|
||||
fn test_in_array_of_sumtype() {
|
||||
arr := [StringOrNumber(1), 2, 'test']
|
||||
println(1 in arr)
|
||||
assert 1 in arr
|
||||
}
|
||||
|
Reference in New Issue
Block a user