parent
							
								
									7f12bfa563
								
							
						
					
					
						commit
						eb5ac23988
					
				|  | @ -5326,6 +5326,9 @@ pub fn (mut c Checker) match_expr(mut node ast.MatchExpr) ast.Type { | ||||||
| 			mut stmt := branch.stmts[branch.stmts.len - 1] | 			mut stmt := branch.stmts[branch.stmts.len - 1] | ||||||
| 			match mut stmt { | 			match mut stmt { | ||||||
| 				ast.ExprStmt { | 				ast.ExprStmt { | ||||||
|  | 					if node.is_expr { | ||||||
|  | 						c.expected_type = node.expected_type | ||||||
|  | 					} | ||||||
| 					expr_type := c.expr(stmt.expr) | 					expr_type := c.expr(stmt.expr) | ||||||
| 					if ret_type == ast.void_type { | 					if ret_type == ast.void_type { | ||||||
| 						ret_type = expr_type | 						ret_type = expr_type | ||||||
|  |  | ||||||
|  | @ -40,3 +40,10 @@ vlib/v/checker/tests/if_match_expr.vv:23:3: error: `match` expression branch has | ||||||
|       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|    24 |         _ = match true {true {1} else {-1}} // OK |    24 |         _ = match true {true {1} else {-1}} // OK | ||||||
|    25 |         match true {true {1} else {-1}} // result |    25 |         match true {true {1} else {-1}} // result | ||||||
|  | vlib/v/checker/tests/if_match_expr.vv:25:3: error: return type mismatch, it should be `int` | ||||||
|  |    23 |         match true {true {} else {}} // statement not expression | ||||||
|  |    24 |         _ = match true {true {1} else {-1}} // OK | ||||||
|  |    25 |         match true {true {1} else {-1}} // result | ||||||
|  |       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  |    26 |     } | ||||||
|  |    27 | } | ||||||
|  |  | ||||||
|  | @ -1018,6 +1018,7 @@ fn (mut g Gen) stmts_with_tmp_var(stmts []ast.Stmt, tmp_var string) { | ||||||
| 				g.skip_stmt_pos = true | 				g.skip_stmt_pos = true | ||||||
| 				g.write('$tmp_var = ') | 				g.write('$tmp_var = ') | ||||||
| 				g.stmt(stmt) | 				g.stmt(stmt) | ||||||
|  | 				g.writeln(';') | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			g.stmt(stmt) | 			g.stmt(stmt) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,43 @@ | ||||||
|  | fn foo1() int { | ||||||
|  | 	return match 1 { | ||||||
|  | 		1 { | ||||||
|  | 			if true { | ||||||
|  | 				1 | ||||||
|  | 			} else { | ||||||
|  | 				2 | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			if true { | ||||||
|  | 				3 | ||||||
|  | 			} else { | ||||||
|  | 				4 | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn foo2() int { | ||||||
|  | 	return match 1 { | ||||||
|  | 		1 { | ||||||
|  | 			match true { | ||||||
|  | 				true { 1 } | ||||||
|  | 				false { 2 } | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			match false { | ||||||
|  | 				true { 3 } | ||||||
|  | 				false { 4 } | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn test_match_expr_with_if_or_match_expr() { | ||||||
|  | 	println(foo1()) | ||||||
|  | 	assert foo1() == 1 | ||||||
|  | 
 | ||||||
|  | 	println(foo2()) | ||||||
|  | 	assert foo2() == 1 | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue