checker: minor cleanup in check_or_last_stmt() (#13763)
							parent
							
								
									1734e72638
								
							
						
					
					
						commit
						3e41be1ff4
					
				|  | @ -1531,41 +1531,36 @@ fn (mut c Checker) check_or_last_stmt(stmt ast.Stmt, ret_type ast.Type, expr_ret | ||||||
| 					stmt.pos) | 					stmt.pos) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else if stmt is ast.ExprStmt { | ||||||
| 		match stmt { | 		match stmt.expr { | ||||||
| 			ast.ExprStmt { | 			ast.IfExpr { | ||||||
| 				match stmt.expr { | 				for branch in stmt.expr.branches { | ||||||
| 					ast.IfExpr { | 					last_stmt := branch.stmts[branch.stmts.len - 1] | ||||||
| 						for branch in stmt.expr.branches { | 					c.check_or_last_stmt(last_stmt, ret_type, expr_return_type) | ||||||
| 							last_stmt := branch.stmts[branch.stmts.len - 1] |  | ||||||
| 							c.check_or_last_stmt(last_stmt, ret_type, expr_return_type) |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 					ast.MatchExpr { |  | ||||||
| 						for branch in stmt.expr.branches { |  | ||||||
| 							last_stmt := branch.stmts[branch.stmts.len - 1] |  | ||||||
| 							c.check_or_last_stmt(last_stmt, ret_type, expr_return_type) |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 					else { |  | ||||||
| 						if stmt.typ == ast.void_type { |  | ||||||
| 							return |  | ||||||
| 						} |  | ||||||
| 						if is_noreturn_callexpr(stmt.expr) { |  | ||||||
| 							return |  | ||||||
| 						} |  | ||||||
| 						if c.check_types(stmt.typ, expr_return_type) { |  | ||||||
| 							return |  | ||||||
| 						} |  | ||||||
| 						// opt_returning_string() or { ... 123 }
 |  | ||||||
| 						type_name := c.table.type_to_str(stmt.typ) |  | ||||||
| 						expr_return_type_name := c.table.type_to_str(expr_return_type) |  | ||||||
| 						c.error('the default expression type in the `or` block should be `$expr_return_type_name`, instead you gave a value of type `$type_name`', |  | ||||||
| 							stmt.expr.pos()) |  | ||||||
| 					} |  | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			else {} | 			ast.MatchExpr { | ||||||
|  | 				for branch in stmt.expr.branches { | ||||||
|  | 					last_stmt := branch.stmts[branch.stmts.len - 1] | ||||||
|  | 					c.check_or_last_stmt(last_stmt, ret_type, expr_return_type) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				if stmt.typ == ast.void_type { | ||||||
|  | 					return | ||||||
|  | 				} | ||||||
|  | 				if is_noreturn_callexpr(stmt.expr) { | ||||||
|  | 					return | ||||||
|  | 				} | ||||||
|  | 				if c.check_types(stmt.typ, expr_return_type) { | ||||||
|  | 					return | ||||||
|  | 				} | ||||||
|  | 				// opt_returning_string() or { ... 123 }
 | ||||||
|  | 				type_name := c.table.type_to_str(stmt.typ) | ||||||
|  | 				expr_return_type_name := c.table.type_to_str(expr_return_type) | ||||||
|  | 				c.error('the default expression type in the `or` block should be `$expr_return_type_name`, instead you gave a value of type `$type_name`', | ||||||
|  | 					stmt.expr.pos()) | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue