mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: fix if expressions with multiple else if's
This commit is contained in:
parent
5b3295db94
commit
b039538a27
@ -1008,7 +1008,7 @@ fn (p mut Parser) statement(add_semi bool) string {
|
|||||||
case Token.dollar:
|
case Token.dollar:
|
||||||
p.comp_time()
|
p.comp_time()
|
||||||
case Token.key_if:
|
case Token.key_if:
|
||||||
p.if_st(false, false)
|
p.if_st(false, 0)
|
||||||
case Token.key_for:
|
case Token.key_for:
|
||||||
p.for_st()
|
p.for_st()
|
||||||
case Token.key_switch:
|
case Token.key_switch:
|
||||||
@ -2083,7 +2083,7 @@ fn (p mut Parser) factor() string {
|
|||||||
// { user | name :'new name' }
|
// { user | name :'new name' }
|
||||||
return p.assoc()
|
return p.assoc()
|
||||||
case Token.key_if:
|
case Token.key_if:
|
||||||
typ = p.if_st(true, false)
|
typ = p.if_st(true, 0)
|
||||||
return typ
|
return typ
|
||||||
default:
|
default:
|
||||||
next := p.peek()
|
next := p.peek()
|
||||||
@ -2730,7 +2730,7 @@ fn (p mut Parser) chash() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) if_st(is_expr, is_elif_expr bool) string {
|
fn (p mut Parser) if_st(is_expr bool, elif_depth int) string {
|
||||||
if is_expr {
|
if is_expr {
|
||||||
if p.fileis('if_expr') {
|
if p.fileis('if_expr') {
|
||||||
println('IF EXPR')
|
println('IF EXPR')
|
||||||
@ -2771,11 +2771,11 @@ fn (p mut Parser) if_st(is_expr, is_elif_expr bool) string {
|
|||||||
if p.tok == .key_if {
|
if p.tok == .key_if {
|
||||||
if is_expr {
|
if is_expr {
|
||||||
p.gen(') : (')
|
p.gen(') : (')
|
||||||
return p.if_st(is_expr, true)
|
return p.if_st(is_expr, elif_depth + 1)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
p.gen(' else ')
|
p.gen(' else ')
|
||||||
return p.if_st(is_expr, false)
|
return p.if_st(is_expr, 0)
|
||||||
}
|
}
|
||||||
// return ''
|
// return ''
|
||||||
}
|
}
|
||||||
@ -2790,12 +2790,7 @@ fn (p mut Parser) if_st(is_expr, is_elif_expr bool) string {
|
|||||||
typ = p.statements()
|
typ = p.statements()
|
||||||
p.inside_if_expr = false
|
p.inside_if_expr = false
|
||||||
if is_expr {
|
if is_expr {
|
||||||
if is_elif_expr {
|
p.gen(strings.repeat(`)`, elif_depth + 1))
|
||||||
p.gen('))')
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.gen(')')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user