2020-02-10 14:42:57 +01:00
|
|
|
module parser
|
2020-02-17 14:15:42 +01:00
|
|
|
|
|
|
|
import (
|
|
|
|
v.ast
|
|
|
|
)
|
|
|
|
|
|
|
|
pub fn (p mut Parser) comp_if() ast.CompIf {
|
2020-03-22 11:53:08 +01:00
|
|
|
pos := p.tok.position()
|
2020-02-17 14:15:42 +01:00
|
|
|
p.next()
|
|
|
|
p.check(.key_if)
|
|
|
|
if p.tok.kind == .not {
|
|
|
|
p.next()
|
|
|
|
}
|
2020-03-22 13:55:39 +01:00
|
|
|
val := p.check_name()
|
2020-02-17 14:15:42 +01:00
|
|
|
if p.tok.kind == .question {
|
|
|
|
p.next()
|
|
|
|
}
|
2020-03-22 10:12:43 +01:00
|
|
|
mut node := ast.CompIf{
|
|
|
|
stmts: p.parse_block()
|
2020-03-22 11:53:08 +01:00
|
|
|
pos: pos
|
2020-03-22 13:55:39 +01:00
|
|
|
val: val
|
2020-03-22 10:12:43 +01:00
|
|
|
}
|
2020-02-17 14:15:42 +01:00
|
|
|
if p.tok.kind == .dollar && p.peek_tok.kind == .key_else {
|
|
|
|
p.next()
|
|
|
|
p.check(.key_else)
|
2020-03-22 14:54:31 +01:00
|
|
|
node.has_else = true
|
2020-03-22 10:12:43 +01:00
|
|
|
node.else_stmts = p.parse_block()
|
2020-02-17 14:15:42 +01:00
|
|
|
}
|
2020-03-22 10:12:43 +01:00
|
|
|
return node
|
2020-02-17 14:15:42 +01:00
|
|
|
}
|