checker: check index_expr or_expr types mismatch (#10224)
parent
39de06c200
commit
6e493ca8ca
|
@ -6522,6 +6522,7 @@ pub fn (mut c Checker) index_expr(mut node ast.IndexExpr) ast.Type {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.stmts(node.or_expr.stmts)
|
c.stmts(node.or_expr.stmts)
|
||||||
|
c.check_expr_opt_call(node, typ)
|
||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
vlib/v/checker/tests/or_expr_types_mismatch.vv:3:19: error: wrong return type `none` in the `or {}` block, expected `string`
|
||||||
|
1 | fn get_map() ?string {
|
||||||
|
2 | m := map{1: 'a', 2: 'b'}
|
||||||
|
3 | return m[1] or { none }
|
||||||
|
| ~~~~
|
||||||
|
4 | }
|
||||||
|
5 |
|
||||||
|
vlib/v/checker/tests/or_expr_types_mismatch.vv:8:19: error: wrong return type `none` in the `or {}` block, expected `int`
|
||||||
|
6 | fn get_array() ?int {
|
||||||
|
7 | a := [1, 2, 3]
|
||||||
|
8 | return a[4] or { none }
|
||||||
|
| ~~~~
|
||||||
|
9 | }
|
||||||
|
10 |
|
|
@ -0,0 +1,17 @@
|
||||||
|
fn get_map() ?string {
|
||||||
|
m := map{1: 'a', 2: 'b'}
|
||||||
|
return m[1] or { none }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_array() ?int {
|
||||||
|
a := [1, 2, 3]
|
||||||
|
return a[4] or { none }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
map_result := get_map() or { return }
|
||||||
|
println(map_result)
|
||||||
|
|
||||||
|
array_result := get_array() or { return }
|
||||||
|
println(array_result)
|
||||||
|
}
|
Loading…
Reference in New Issue