checker: handle `a[i] or { statements expr }` the same as the other or blocks
parent
24d1ec2714
commit
85bcfdd636
|
@ -1940,6 +1940,10 @@ pub fn (mut c Checker) check_expr_opt_call(expr ast.Expr, ret_type table.Type) t
|
|||
c.error('unexpected `?`, the function `$expr.name` does not return an optional',
|
||||
expr.or_block.pos)
|
||||
}
|
||||
} else if expr is ast.IndexExpr {
|
||||
if expr.or_expr.kind != .absent {
|
||||
c.check_or_expr(expr.or_expr, ret_type, ret_type)
|
||||
}
|
||||
}
|
||||
return ret_type
|
||||
}
|
||||
|
|
|
@ -3,25 +3,33 @@ fn test_array_or() {
|
|||
mut testvar := 17
|
||||
el := m[4] or {
|
||||
testvar = -43
|
||||
999
|
||||
}
|
||||
good := m[1] or {
|
||||
testvar = 11
|
||||
0
|
||||
}
|
||||
assert testvar == -43
|
||||
assert el == 0
|
||||
assert el == 999
|
||||
assert good == 4
|
||||
}
|
||||
|
||||
fn test_map_or() {
|
||||
m := {'as': 3, 'qw': 4, 'kl': 5}
|
||||
m := {
|
||||
'as': 3
|
||||
'qw': 4
|
||||
'kl': 5
|
||||
}
|
||||
mut testvar := -21
|
||||
el := m['pp'] or {
|
||||
testvar = 7931
|
||||
7
|
||||
}
|
||||
good := m['kl'] or {
|
||||
testvar = -45
|
||||
999
|
||||
}
|
||||
assert testvar == 7931
|
||||
assert el == 0
|
||||
assert el == 7
|
||||
assert good == 5
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue