cgen: fix bug with duplicate defer generation (#8503)
parent
b40252bd97
commit
4b99d6af95
|
@ -332,6 +332,7 @@ pub:
|
||||||
pub mut:
|
pub mut:
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
return_type table.Type
|
return_type table.Type
|
||||||
|
has_return bool
|
||||||
comments []Comment // comments *after* the header, but *before* `{`; used for InterfaceDecl
|
comments []Comment // comments *after* the header, but *before* `{`; used for InterfaceDecl
|
||||||
next_comments []Comment // coments that are one line after the decl; used for InterfaceDecl
|
next_comments []Comment // coments that are one line after the decl; used for InterfaceDecl
|
||||||
source_file &File = 0
|
source_file &File = 0
|
||||||
|
|
|
@ -5676,9 +5676,9 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) {
|
||||||
if c.fn_mut_arg_names.len > 0 {
|
if c.fn_mut_arg_names.len > 0 {
|
||||||
c.fn_mut_arg_names.clear()
|
c.fn_mut_arg_names.clear()
|
||||||
}
|
}
|
||||||
returns := c.returns || has_top_return(node.stmts)
|
node.has_return = c.returns || has_top_return(node.stmts)
|
||||||
if node.language == .v && !node.no_body && node.return_type != table.void_type && !returns
|
if node.language == .v && !node.no_body && node.return_type != table.void_type
|
||||||
&& node.name !in ['panic', 'exit'] {
|
&& !node.has_return&& node.name !in ['panic', 'exit'] {
|
||||||
if c.inside_anon_fn {
|
if c.inside_anon_fn {
|
||||||
c.error('missing return at the end of an anonymous function', node.pos)
|
c.error('missing return at the end of an anonymous function', node.pos)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -192,7 +192,7 @@ fn (mut g Gen) gen_fn_decl(node ast.FnDecl, skip bool) {
|
||||||
g.fn_mut_arg_names.clear()
|
g.fn_mut_arg_names.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
if node.return_type == table.void_type {
|
if !node.has_return {
|
||||||
g.write_defer_stmts_when_needed()
|
g.write_defer_stmts_when_needed()
|
||||||
}
|
}
|
||||||
if node.is_anon {
|
if node.is_anon {
|
||||||
|
|
Loading…
Reference in New Issue