mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
This commit is contained in:
@@ -71,6 +71,11 @@ fn (mut c Checker) if_expr(mut node ast.IfExpr) ast.Type {
|
||||
}
|
||||
}
|
||||
if mut branch.cond is ast.IfGuardExpr {
|
||||
if branch.cond.expr_type.clear_flag(.option).clear_flag(.result) == ast.void_type
|
||||
&& !(branch.cond.vars.len == 1 && branch.cond.vars[0].name == '_') {
|
||||
c.error('if guard expects non-propagate option or result', branch.pos)
|
||||
continue
|
||||
}
|
||||
sym := c.table.sym(branch.cond.expr_type)
|
||||
if sym.kind == .multi_return {
|
||||
mr_info := sym.info as ast.MultiReturn
|
||||
|
||||
7
vlib/v/checker/tests/if_guard_expr_err.out
Normal file
7
vlib/v/checker/tests/if_guard_expr_err.out
Normal file
@@ -0,0 +1,7 @@
|
||||
vlib/v/checker/tests/if_guard_expr_err.vv:6:7: error: if guard expects non-propagate option or result
|
||||
4 |
|
||||
5 | fn main() {
|
||||
6 | a := if r := foo() {
|
||||
| ~~~~~~~~~~~~~
|
||||
7 | println(r)
|
||||
8 | true
|
||||
14
vlib/v/checker/tests/if_guard_expr_err.vv
Normal file
14
vlib/v/checker/tests/if_guard_expr_err.vv
Normal file
@@ -0,0 +1,14 @@
|
||||
fn foo() ! {
|
||||
return error("error")
|
||||
}
|
||||
|
||||
fn main() {
|
||||
a := if r := foo() {
|
||||
println(r)
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
|
||||
println(a)
|
||||
}
|
||||
Reference in New Issue
Block a user