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
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	is_expr := (node.is_expr && node.return_type != table.void_type) || g.inside_ternary > 0
 | 
						is_expr := (node.is_expr && node.return_type != table.void_type) || g.inside_ternary > 0
 | 
				
			||||||
 | 
						mut cond_var := ''
 | 
				
			||||||
	if is_expr {
 | 
						if is_expr {
 | 
				
			||||||
		g.inside_ternary++
 | 
							g.inside_ternary++
 | 
				
			||||||
		// g.write('/* EM ret type=${g.typ(node.return_type)}		expected_type=${g.typ(node.expected_type)}  */')
 | 
							// g.write('/* EM ret type=${g.typ(node.return_type)}		expected_type=${g.typ(node.expected_type)}  */')
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cur_line := if is_expr {
 | 
						if node.cond is ast.Ident || node.cond is ast.SelectExpr || node.cond is ast.IndexExpr {
 | 
				
			||||||
		g.empty_line = true
 | 
							pos := g.out.len
 | 
				
			||||||
		g.go_before_stmt(0)
 | 
							g.expr(node.cond)
 | 
				
			||||||
 | 
							cond_var = g.out.after(pos)
 | 
				
			||||||
 | 
							g.out.go_back(cond_var.len)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		''
 | 
							cur_line := if is_expr {
 | 
				
			||||||
 | 
								g.empty_line = true
 | 
				
			||||||
 | 
								g.go_before_stmt(0)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								''
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							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)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	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 {
 | 
						if is_expr {
 | 
				
			||||||
		// brackets needed otherwise '?' will apply to everything on the left
 | 
							// brackets needed otherwise '?' will apply to everything on the left
 | 
				
			||||||
		g.write('(')
 | 
							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