checker: simplify noreturn.v

pull/11537/head
Delyan Angelov 2021-09-18 13:42:46 +03:00
parent 396eede4db
commit 0a7fb34613
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
1 changed files with 24 additions and 23 deletions

View File

@ -9,12 +9,12 @@ fn (mut c Checker) check_noreturn_fn_decl(mut node ast.FnDecl) {
if node.no_body { if node.no_body {
return return
} }
if node.return_type != ast.void_type {
c.error('[noreturn] functions cannot have return types', node.pos)
}
if uses_return_stmt(node.stmts) { if uses_return_stmt(node.stmts) {
c.error('[noreturn] functions cannot use return statements', node.pos) 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 { if node.stmts.len != 0 {
mut is_valid_end_of_noreturn_fn := false mut is_valid_end_of_noreturn_fn := false
last_stmt := node.stmts.last() 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 { if last_stmt.expr.should_be_skipped {
c.error('[noreturn] functions cannot end with a skippable `[if ..]` call', c.error('[noreturn] functions cannot end with a skippable `[if ..]` call',
last_stmt.pos) last_stmt.pos)
return
} }
if last_stmt.expr.is_noreturn { if last_stmt.expr.is_noreturn {
is_valid_end_of_noreturn_fn = true 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 { 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', c.error('[noreturn] functions should end with a call to another [noreturn] function, or with an infinite `for {}` loop',
last_stmt.pos) last_stmt.pos)
} return
} }
} }
} }