v2: match sum type; { x | }
parent
a21e3d77e9
commit
2d7c80bbc3
|
@ -596,6 +596,24 @@ pub fn (p mut Parser) expr(precedence int) (ast.Expr,table.Type) {
|
||||||
p.check(.rpar)
|
p.check(.rpar)
|
||||||
typ = table.int_type
|
typ = table.int_type
|
||||||
}
|
}
|
||||||
|
// Map or `{ x | foo:bar, a:10 }`
|
||||||
|
.lcbr {
|
||||||
|
p.next()
|
||||||
|
p.check_name()
|
||||||
|
p.check(.pipe)
|
||||||
|
for {
|
||||||
|
p.check_name()
|
||||||
|
p.check(.colon)
|
||||||
|
p.expr(0)
|
||||||
|
if p.tok.kind == .comma {
|
||||||
|
p.check(.comma)
|
||||||
|
}
|
||||||
|
if p.tok.kind == .rcbr {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p.check(.rcbr)
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
p.error('pexpr(): bad token `$p.tok.str()`')
|
p.error('pexpr(): bad token `$p.tok.str()`')
|
||||||
}
|
}
|
||||||
|
@ -1317,13 +1335,15 @@ fn (p mut Parser) match_expr() (ast.Expr,table.Type) {
|
||||||
mut match_exprs := []ast.Expr
|
mut match_exprs := []ast.Expr
|
||||||
mut return_type := table.void_type
|
mut return_type := table.void_type
|
||||||
for {
|
for {
|
||||||
// p.tok.kind != .rcbr {
|
|
||||||
// Sum type match
|
// Sum type match
|
||||||
// if p.tok.kind == .name && p.tok.lit[0].is_capital() {
|
if p.tok.kind == .name && p.tok.lit[0].is_capital() {
|
||||||
// } else {
|
p.check_name()
|
||||||
|
}
|
||||||
|
else {
|
||||||
// Expression match
|
// Expression match
|
||||||
match_expr,_ := p.expr(0)
|
match_expr,_ := p.expr(0)
|
||||||
match_exprs << match_expr
|
match_exprs << match_expr
|
||||||
|
}
|
||||||
p.warn('match block')
|
p.warn('match block')
|
||||||
stmts := p.parse_block()
|
stmts := p.parse_block()
|
||||||
blocks << ast.StmtBlock{
|
blocks << ast.StmtBlock{
|
||||||
|
|
Loading…
Reference in New Issue