Use dot notation for enum variants
This commit is contained in:
parent
ab783c33ed
commit
117d188194
13 changed files with 162 additions and 154 deletions
|
|
@ -751,7 +751,7 @@ func (p *parser) parseMatch() (Stmt, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, err := p.expect(tokenDoubleColon, "expected '::' in match case"); err != nil {
|
||||
if _, err := p.expect(tokenDot, "expected '.' in match case"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
variant, err := p.expect(tokenIdent, "expected variant name")
|
||||
|
|
@ -813,7 +813,7 @@ func (p *parser) parseMatchExpr() (Expr, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, err := p.expect(tokenDoubleColon, "expected '::' in match case"); err != nil {
|
||||
if _, err := p.expect(tokenDot, "expected '.' in match case"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
variant, err := p.expect(tokenIdent, "expected variant name")
|
||||
|
|
@ -1029,31 +1029,6 @@ func (p *parser) parsePrefix() (Expr, error) {
|
|||
tok := p.advance()
|
||||
switch tok.kind {
|
||||
case tokenIdent:
|
||||
if p.match(tokenDoubleColon) {
|
||||
variant, err := p.expect(tokenIdent, "expected enum variant")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var values []Expr
|
||||
if p.match(tokenLParen) {
|
||||
if !p.check(tokenRParen) {
|
||||
for {
|
||||
value, err := p.parseExpr(0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
values = append(values, value)
|
||||
if !p.match(tokenComma) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if _, err := p.expect(tokenRParen, "expected ')' after variant values"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return p.parsePostfix(EnumVariantExpr{EnumName: tok.lexeme, VariantName: variant.lexeme, Values: values})
|
||||
}
|
||||
return p.parsePostfix(IdentExpr{Name: tok.lexeme})
|
||||
case tokenInt:
|
||||
return IntExpr{Value: tok.lexeme}, nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue