File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -200,7 +200,11 @@ fn (mut g Gen) if_expr(node ast.IfExpr) {
200
200
}
201
201
}
202
202
if needs_tmp_var {
203
+ if node.is_expr && g.table.sym (node.typ).kind == .sum_type {
204
+ g.expected_cast_type = node.typ
205
+ }
203
206
g.stmts_with_tmp_var (branch.stmts, tmp)
207
+ g.expected_cast_type = 0
204
208
} else {
205
209
// restore if_expr stmt header pos
206
210
stmt_pos := g.nth_stmt_pos (0 )
Original file line number Diff line number Diff line change
1
+ struct A_str {}
2
+
3
+ struct B_str {}
4
+
5
+ type Token = A_str | B_str
6
+
7
+ fn next (mut v []Token) Token {
8
+ return if v.len > 0 { v.pop () } else { A_str{} }
9
+ }
10
+
11
+ fn test_if_expr_with_sumtype () {
12
+ mut arr := []Token{}
13
+ ret1 := next (mut arr)
14
+ println (ret1 )
15
+ assert '$ret1 ' == 'Token(A_str{})'
16
+
17
+ arr << A_str{}
18
+ arr << B_str{}
19
+
20
+ ret2 := next (mut arr)
21
+ println (ret2 )
22
+ assert '$ret2 ' == 'Token(B_str{})'
23
+ }
You can’t perform that action at this time.
0 commit comments