php8.1: added enum (#12)

This commit is contained in:
Makhnev Petr
2021-07-31 19:44:09 +03:00
committed by GitHub
parent 44bbff6073
commit af394e9eb0
18 changed files with 9171 additions and 8531 deletions

View File

@@ -234,6 +234,28 @@ func (p *printer) StmtClass(n *ast.StmtClass) {
p.printToken(n.CloseCurlyBracketTkn, []byte("}"))
}
func (p *printer) StmtEnum(n *ast.StmtEnum) {
p.printList(n.AttrGroups)
p.printToken(n.EnumTkn, []byte("enum"))
p.printNode(n.Name)
p.printToken(n.ColonTkn, nil)
p.printNode(n.Type)
p.printToken(n.ImplementsTkn, p.ifNodeList(n.Implements, []byte("implements")))
p.printSeparatedList(n.Implements, n.ImplementsSeparatorTkns, []byte(","))
p.printToken(n.OpenCurlyBracketTkn, []byte("{"))
p.printList(n.Stmts)
p.printToken(n.CloseCurlyBracketTkn, []byte("}"))
}
func (p *printer) EnumCase(n *ast.EnumCase) {
p.printList(n.AttrGroups)
p.printToken(n.CaseTkn, []byte("case"))
p.printNode(n.Name)
p.printToken(n.EqualTkn, nil)
p.printNode(n.Expr)
p.printToken(n.SemiColonTkn, []byte(";"))
}
func (p *printer) StmtClassConstList(n *ast.StmtClassConstList) {
p.printList(n.AttrGroups)
p.printList(n.Modifiers)

View File

@@ -40,3 +40,37 @@ echo 0o10;
echo 0O10;
`)
}
func TestEnumPHP81(t *testing.T) {
tester.NewParserPrintTestSuite(t).UsePHP8().Run(`<?php
enum A {
case B;
case B = 100;
case C = "aa";
case
D;
}
enum A: int {
case B;
case B = 100;
#[Attribute]
case C = 100;
#[Attribute1]
#[Attribute2]
case D;
}
enum A implements B {
case C;
public function f(): string {}
}
enum A implements B, C, D {
case E;
public function f(): string {}
}
`)
}