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