cgen: fix match_in_if_expression (#8407)
							parent
							
								
									c4758c21c6
								
							
						
					
					
						commit
						56c4a36cd4
					
				| 
						 | 
				
			
			@ -3444,21 +3444,30 @@ fn (mut g Gen) match_expr(node ast.MatchExpr) {
 | 
			
		|||
		return
 | 
			
		||||
	}
 | 
			
		||||
	is_expr := (node.is_expr && node.return_type != table.void_type) || g.inside_ternary > 0
 | 
			
		||||
	mut cond_var := ''
 | 
			
		||||
	if is_expr {
 | 
			
		||||
		g.inside_ternary++
 | 
			
		||||
		// g.write('/* EM ret type=${g.typ(node.return_type)}		expected_type=${g.typ(node.expected_type)}  */')
 | 
			
		||||
	}
 | 
			
		||||
	if node.cond is ast.Ident || node.cond is ast.SelectExpr || node.cond is ast.IndexExpr {
 | 
			
		||||
		pos := g.out.len
 | 
			
		||||
		g.expr(node.cond)
 | 
			
		||||
		cond_var = g.out.after(pos)
 | 
			
		||||
		g.out.go_back(cond_var.len)
 | 
			
		||||
	} else {
 | 
			
		||||
		cur_line := if is_expr {
 | 
			
		||||
			g.empty_line = true
 | 
			
		||||
			g.go_before_stmt(0)
 | 
			
		||||
		} else {
 | 
			
		||||
			''
 | 
			
		||||
		}
 | 
			
		||||
	cond_var := g.new_tmp_var()
 | 
			
		||||
		cond_var = g.new_tmp_var()
 | 
			
		||||
		g.write('${g.typ(node.cond_type)} $cond_var = ')
 | 
			
		||||
		g.expr(node.cond)
 | 
			
		||||
		g.writeln('; ')
 | 
			
		||||
		g.write(cur_line)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if is_expr {
 | 
			
		||||
		// brackets needed otherwise '?' will apply to everything on the left
 | 
			
		||||
		g.write('(')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
fn test_match_in_if_expression() {
 | 
			
		||||
	num := 3
 | 
			
		||||
	str := 'a'
 | 
			
		||||
	res := if num in [1, 3] {
 | 
			
		||||
		match str {
 | 
			
		||||
			'a' { 'A' }
 | 
			
		||||
			else { 'ODD' }
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		'NONE'
 | 
			
		||||
	}
 | 
			
		||||
	assert res == 'A'
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue