cgen: fix error of nested match expr (#12334)
parent
71392111f8
commit
d5642b6134
|
@ -1557,7 +1557,7 @@ fn (mut g Gen) stmt(node ast.Stmt) {
|
|||
// }
|
||||
old_is_void_expr_stmt := g.is_void_expr_stmt
|
||||
g.is_void_expr_stmt = !node.is_expr
|
||||
if node.typ != ast.void_type && g.expected_cast_type != 0 {
|
||||
if node.typ != ast.void_type && g.expected_cast_type != 0 && node.expr !is ast.MatchExpr {
|
||||
g.expr_with_cast(node.expr, node.typ, g.expected_cast_type)
|
||||
} else {
|
||||
g.expr(node.expr)
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
struct Abc {}
|
||||
|
||||
type Test = Abc | bool | int
|
||||
|
||||
fn test(a Test) Test {
|
||||
return match a {
|
||||
Abc {
|
||||
20
|
||||
}
|
||||
int {
|
||||
match a {
|
||||
1 { true }
|
||||
2 { false }
|
||||
else { -1 }
|
||||
}
|
||||
}
|
||||
bool {
|
||||
1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn test_nested_match_expr() {
|
||||
println(test(1))
|
||||
assert test(1) == Test(true)
|
||||
|
||||
println(test(2))
|
||||
assert test(2) == Test(false)
|
||||
|
||||
println(test(3))
|
||||
assert test(3) == Test(-1)
|
||||
|
||||
println(test(true))
|
||||
assert test(true) == Test(1)
|
||||
}
|
Loading…
Reference in New Issue