parent
638b267e4e
commit
9abaadb690
|
@ -927,9 +927,10 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type {
|
|||
}
|
||||
}
|
||||
}
|
||||
} else if left_type.has_flag(.optional) && right_type.has_flag(.optional) {
|
||||
} else if left_type.has_flag(.optional) || right_type.has_flag(.optional) {
|
||||
opt_comp_pos := if left_type.has_flag(.optional) { left_pos } else { right_pos }
|
||||
c.error('unwrapped optional cannot be compared in an infix expression',
|
||||
left_right_pos)
|
||||
opt_comp_pos)
|
||||
}
|
||||
}
|
||||
.left_shift {
|
||||
|
@ -1143,8 +1144,11 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type {
|
|||
// TODO move this to symmetric_check? Right now it would break `return 0` for `fn()?int `
|
||||
left_is_optional := left_type.has_flag(.optional)
|
||||
right_is_optional := right_type.has_flag(.optional)
|
||||
if (left_is_optional && !right_is_optional) || (!left_is_optional && right_is_optional) {
|
||||
c.error('unwrapped optional cannot be used in an infix expression', left_right_pos)
|
||||
if left_is_optional && right_is_optional {
|
||||
c.error('unwrapped optionals cannot be used in an infix expression', left_right_pos)
|
||||
} else if left_is_optional || right_is_optional {
|
||||
opt_infix_pos := if left_is_optional { left_pos } else { right_pos }
|
||||
c.error('unwrapped optional cannot be used in an infix expression', opt_infix_pos)
|
||||
}
|
||||
// Dual sides check (compatibility check)
|
||||
if !(c.symmetric_check(left_type, right_type) && c.symmetric_check(right_type, left_type))
|
||||
|
|
|
@ -2,5 +2,5 @@ vlib/v/checker/tests/infix_compare_optional_err.vv:6:5: error: unwrapped optiona
|
|||
4 |
|
||||
5 | fn main(){
|
||||
6 | if foo() > foo() {}
|
||||
| ~~~~~~~~~~~~~
|
||||
| ~~~~~
|
||||
7 | }
|
||||
|
|
|
@ -26,11 +26,11 @@ vlib/v/checker/tests/infix_err.vv:11:7: error: `+` cannot be used with `?int`
|
|||
| ^
|
||||
12 | _ = int(0) + g() // FIXME not detected
|
||||
13 | _ = g() + int(3)
|
||||
vlib/v/checker/tests/infix_err.vv:12:5: error: unwrapped optional cannot be used in an infix expression
|
||||
vlib/v/checker/tests/infix_err.vv:12:14: error: unwrapped optional cannot be used in an infix expression
|
||||
10 |
|
||||
11 | _ = 4 + g()
|
||||
12 | _ = int(0) + g() // FIXME not detected
|
||||
| ~~~~~~~~~~~~
|
||||
| ~~~
|
||||
13 | _ = g() + int(3)
|
||||
14 | _ = g() + 3
|
||||
vlib/v/checker/tests/infix_err.vv:13:9: error: `+` cannot be used with `?int`
|
||||
|
|
|
@ -2,5 +2,4 @@ vlib/v/checker/tests/unwrapped_optional_infix.vv:5:9: error: unwrapped optional
|
|||
3 | }
|
||||
4 |
|
||||
5 | println(test() == "")
|
||||
| ~~~~~~~~~~~~
|
||||
|
||||
| ~~~~~~
|
||||
|
|
Loading…
Reference in New Issue