checker: simplify noreturn.v
parent
396eede4db
commit
0a7fb34613
|
@ -9,12 +9,12 @@ fn (mut c Checker) check_noreturn_fn_decl(mut node ast.FnDecl) {
|
|||
if node.no_body {
|
||||
return
|
||||
}
|
||||
if node.return_type != ast.void_type {
|
||||
c.error('[noreturn] functions cannot have return types', node.pos)
|
||||
}
|
||||
if uses_return_stmt(node.stmts) {
|
||||
c.error('[noreturn] functions cannot use return statements', node.pos)
|
||||
}
|
||||
if node.return_type != ast.void_type {
|
||||
c.error('[noreturn] functions cannot have return types', node.pos)
|
||||
} else {
|
||||
if node.stmts.len != 0 {
|
||||
mut is_valid_end_of_noreturn_fn := false
|
||||
last_stmt := node.stmts.last()
|
||||
|
@ -24,6 +24,7 @@ fn (mut c Checker) check_noreturn_fn_decl(mut node ast.FnDecl) {
|
|||
if last_stmt.expr.should_be_skipped {
|
||||
c.error('[noreturn] functions cannot end with a skippable `[if ..]` call',
|
||||
last_stmt.pos)
|
||||
return
|
||||
}
|
||||
if last_stmt.expr.is_noreturn {
|
||||
is_valid_end_of_noreturn_fn = true
|
||||
|
@ -40,7 +41,7 @@ fn (mut c Checker) check_noreturn_fn_decl(mut node ast.FnDecl) {
|
|||
if !is_valid_end_of_noreturn_fn {
|
||||
c.error('[noreturn] functions should end with a call to another [noreturn] function, or with an infinite `for {}` loop',
|
||||
last_stmt.pos)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue