1
0
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:
yuyi
2022-09-14 22:43:16 +08:00
committed by GitHub
parent 0b2841d4ea
commit fd1b3fc861
2 changed files with 12 additions and 4 deletions

View File

@ -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

View File

@ -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
}