parser: fix if expression

pull/2855/head^2
れもん 2019-11-23 20:25:57 +09:00 committed by Alexander Medvednikov
parent 0382331499
commit 3d235169c8
2 changed files with 16 additions and 2 deletions

View File

@ -2499,7 +2499,7 @@ fn (p mut Parser) if_st(is_expr bool, elif_depth int) string {
//println('IF EXPR') //println('IF EXPR')
//} //}
p.inside_if_expr = true p.inside_if_expr = true
p.gen('(') p.gen('((')
} }
else { else {
p.gen('if (') p.gen('if (')
@ -2594,7 +2594,7 @@ fn (p mut Parser) if_st(is_expr bool, elif_depth int) string {
p.inside_if_expr = false p.inside_if_expr = false
if is_expr { if is_expr {
p.check_types(first_typ, typ) p.check_types(first_typ, typ)
p.gen(strings.repeat(`)`, elif_depth + 1)) p.gen(strings.repeat(`)`, 2 * (elif_depth + 1)))
} }
else_returns := p.returns else_returns := p.returns
p.returns = if_returns && else_returns p.returns = if_returns && else_returns

View File

@ -0,0 +1,14 @@
fn test_if_expression_precedence_false_condition(){
b := 10
c := 20
res := 1 + if b > c { b } else { c } + 1
assert res == c + 2
}
fn test_if_expression_precedence_true_condition(){
b := 20
c := 10
res := 1 + if b > c { b } else { c } + 1
assert res == b + 2
}