diff --git a/internal/php5/parser_test.go b/internal/php5/parser_test.go index bff1735..b2d3144 100644 --- a/internal/php5/parser_test.go +++ b/internal/php5/parser_test.go @@ -9945,74 +9945,66 @@ func TestStmtClass_ClassExtends(t *testing.T) { }, Value: []byte("foo"), }, - Extends: &ast.StmtClassExtends{ + ExtendsTkn: &token.Token{ + ID: token.T_EXTENDS, + Value: []byte("extends"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 19, - EndPos: 30, + EndPos: 26, }, - ExtendTkn: &token.Token{ - ID: token.T_EXTENDS, - Value: []byte("extends"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 19, - EndPos: 26, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 18, - EndPos: 19, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 18, + EndPos: 19, }, }, }, - ClassName: &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 30, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + Extends: &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 30, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 30, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 27, EndPos: 30, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 30, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 26, - EndPos: 27, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 26, + EndPos: 27, }, }, }, - Value: []byte("bar"), }, + Value: []byte("bar"), }, }, }, @@ -10187,75 +10179,67 @@ func TestStmtClass_ClassImplement(t *testing.T) { }, Value: []byte("foo"), }, - Implements: &ast.StmtClassImplements{ + ImplementsTkn: &token.Token{ + ID: token.T_IMPLEMENTS, + Value: []byte("implements"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 19, - EndPos: 33, + EndPos: 29, }, - ImplementsTkn: &token.Token{ - ID: token.T_IMPLEMENTS, - Value: []byte("implements"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 19, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 18, - EndPos: 19, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 30, - EndPos: 33, + StartPos: 18, + EndPos: 19, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Implements: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("bar"), }, + Value: []byte("bar"), }, }, }, @@ -10431,129 +10415,121 @@ func TestStmtClass_ClassImplements(t *testing.T) { }, Value: []byte("foo"), }, - Implements: &ast.StmtClassImplements{ + ImplementsTkn: &token.Token{ + ID: token.T_IMPLEMENTS, + Value: []byte("implements"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 19, - EndPos: 38, + EndPos: 29, }, - ImplementsTkn: &token.Token{ - ID: token.T_IMPLEMENTS, - Value: []byte("implements"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 19, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 18, - EndPos: 19, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 30, - EndPos: 33, + StartPos: 18, + EndPos: 19, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Implements: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("bar"), }, + Value: []byte("bar"), }, }, - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 35, - EndPos: 38, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 35, + EndPos: 38, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 35, + EndPos: 38, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 35, EndPos: 38, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 35, - EndPos: 38, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 34, - EndPos: 35, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 34, + EndPos: 35, }, }, }, - Value: []byte("baz"), }, + Value: []byte("baz"), }, }, }, - SeparatorTkns: []*token.Token{ - { - ID: token.ID(44), - Value: []byte(","), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 33, - EndPos: 34, - }, + }, + ImplementsSeparatorTkns: []*token.Token{ + { + ID: token.ID(44), + Value: []byte(","), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 34, }, }, }, @@ -19076,75 +19052,67 @@ func TestStmtInterface_Extend(t *testing.T) { }, Value: []byte("Foo"), }, - Extends: &ast.StmtInterfaceExtends{ + ExtendsTkn: &token.Token{ + ID: token.T_EXTENDS, + Value: []byte("extends"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 17, - EndPos: 28, + EndPos: 24, }, - ExtendsTkn: &token.Token{ - ID: token.T_EXTENDS, - Value: []byte("extends"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 17, - EndPos: 24, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 16, - EndPos: 17, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 25, - EndPos: 28, + StartPos: 16, + EndPos: 17, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Extends: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 25, EndPos: 28, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 25, - EndPos: 28, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 24, - EndPos: 25, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 24, + EndPos: 25, }, }, }, - Value: []byte("Bar"), }, + Value: []byte("Bar"), }, }, }, @@ -19275,129 +19243,121 @@ func TestStmtInterface_Extends(t *testing.T) { }, Value: []byte("Foo"), }, - Extends: &ast.StmtInterfaceExtends{ + ExtendsTkn: &token.Token{ + ID: token.T_EXTENDS, + Value: []byte("extends"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 17, - EndPos: 33, + EndPos: 24, }, - ExtendsTkn: &token.Token{ - ID: token.T_EXTENDS, - Value: []byte("extends"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 17, - EndPos: 24, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 16, - EndPos: 17, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 25, - EndPos: 28, + StartPos: 16, + EndPos: 17, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Extends: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 25, EndPos: 28, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 25, - EndPos: 28, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 24, - EndPos: 25, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 24, + EndPos: 25, }, }, }, - Value: []byte("Bar"), }, + Value: []byte("Bar"), }, }, - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("Baz"), }, + Value: []byte("Baz"), }, }, }, - SeparatorTkns: []*token.Token{ - { - ID: token.ID(44), - Value: []byte(","), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, + }, + ExtendsSeparatorTkns: []*token.Token{ + { + ID: token.ID(44), + Value: []byte(","), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 28, + EndPos: 29, }, }, }, diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 3c7d097..6b818aa 100644 --- a/internal/php5/php5.go +++ b/internal/php5/php5.go @@ -340,7 +340,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -// line internal/php5/php5.y:5665 +// line internal/php5/php5.y:5691 // line yacctab:1 var yyExca = [...]int{ @@ -3434,38 +3434,57 @@ yydefault: { switch n := yyDollar[1].node.(type) { case *ast.StmtClass: - n.Position = yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[7].token) - n.ClassName = &ast.Identifier{ + className := &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[2].token), IdentifierTkn: yyDollar[2].token, Value: yyDollar[2].token.Value, } - n.Extends = yyDollar[3].node - n.Implements = yyDollar[4].node + + n.Position = yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[7].token) + n.ClassName = className n.OpenCurlyBracketTkn = yyDollar[5].token n.Stmts = yyDollar[6].list n.CloseCurlyBracketTkn = yyDollar[7].token + + if yyDollar[3].node != nil { + n.ExtendsTkn = yyDollar[3].node.(*ast.StmtClass).ExtendsTkn + n.Extends = yyDollar[3].node.(*ast.StmtClass).Extends + } + + if yyDollar[4].node != nil { + n.ImplementsTkn = yyDollar[4].node.(*ast.StmtClass).ImplementsTkn + n.Implements = yyDollar[4].node.(*ast.StmtClass).Implements + n.ImplementsSeparatorTkns = yyDollar[4].node.(*ast.StmtClass).ImplementsSeparatorTkns + } case *ast.StmtTrait: - n.Position = yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[7].token) - n.TraitName = &ast.Identifier{ + traitName := &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[2].token), IdentifierTkn: yyDollar[2].token, Value: yyDollar[2].token.Value, } - n.Extends = yyDollar[3].node - n.Implements = yyDollar[4].node + + n.Position = yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[7].token) + n.TraitName = traitName n.OpenCurlyBracketTkn = yyDollar[5].token n.Stmts = yyDollar[6].list n.CloseCurlyBracketTkn = yyDollar[7].token + + if yyDollar[3].node != nil { + yylex.(*Parser).errHandlerFunc(errors.NewError("A trait cannot extend a class. Traits can only be composed from other traits with the 'use' keyword", yyDollar[3].node.(*ast.StmtClass).Position)) + } + + if yyDollar[4].node != nil { + yylex.(*Parser).errHandlerFunc(errors.NewError("A trait cannot implement an interface", yyDollar[4].node.(*ast.StmtClass).Position)) + } } yyVAL.node = yyDollar[1].node } case 95: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php5/php5.y:1311 + // line internal/php5/php5.y:1330 { - yyVAL.node = &ast.StmtInterface{ + iface := &ast.StmtInterface{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), InterfaceTkn: yyDollar[1].token, InterfaceName: &ast.Identifier{ @@ -3473,15 +3492,22 @@ yydefault: IdentifierTkn: yyDollar[2].token, Value: yyDollar[2].token.Value, }, - Extends: yyDollar[3].node, OpenCurlyBracketTkn: yyDollar[4].token, Stmts: yyDollar[5].list, CloseCurlyBracketTkn: yyDollar[6].token, } + + if yyDollar[3].node != nil { + iface.ExtendsTkn = yyDollar[3].node.(*ast.StmtInterface).ExtendsTkn + iface.Extends = yyDollar[3].node.(*ast.StmtInterface).Extends + iface.ExtendsSeparatorTkns = yyDollar[3].node.(*ast.StmtInterface).ExtendsSeparatorTkns + } + + yyVAL.node = iface } case 96: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1331 + // line internal/php5/php5.y:1357 { yyVAL.node = &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -3490,7 +3516,7 @@ yydefault: } case 97: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1338 + // line internal/php5/php5.y:1364 { yyVAL.node = &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -3506,7 +3532,7 @@ yydefault: } case 98: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1352 + // line internal/php5/php5.y:1378 { yyVAL.node = &ast.StmtTrait{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -3515,7 +3541,7 @@ yydefault: } case 99: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1359 + // line internal/php5/php5.y:1385 { yyVAL.node = &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -3531,63 +3557,63 @@ yydefault: } case 100: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1376 + // line internal/php5/php5.y:1402 { yyVAL.node = nil } case 101: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1380 + // line internal/php5/php5.y:1406 { - yyVAL.node = &ast.StmtClassExtends{ - Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), - ExtendTkn: yyDollar[1].token, - ClassName: yyDollar[2].node, + yyVAL.node = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), + ExtendsTkn: yyDollar[1].token, + Extends: yyDollar[2].node, } } case 102: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1391 + // line internal/php5/php5.y:1417 { yyVAL.token = yyDollar[1].token } case 103: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1398 + // line internal/php5/php5.y:1424 { yyVAL.node = nil } case 104: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1402 + // line internal/php5/php5.y:1428 { - yyVAL.node = &ast.StmtInterfaceExtends{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), - ExtendsTkn: yyDollar[1].token, - InterfaceNames: yyDollar[2].node.(*ast.ParserSeparatedList).Items, - SeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, + yyVAL.node = &ast.StmtInterface{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), + ExtendsTkn: yyDollar[1].token, + Extends: yyDollar[2].node.(*ast.ParserSeparatedList).Items, + ExtendsSeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, } } case 105: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1414 + // line internal/php5/php5.y:1440 { yyVAL.node = nil } case 106: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1418 + // line internal/php5/php5.y:1444 { - yyVAL.node = &ast.StmtClassImplements{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), - ImplementsTkn: yyDollar[1].token, - InterfaceNames: yyDollar[2].node.(*ast.ParserSeparatedList).Items, - SeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, + yyVAL.node = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), + ImplementsTkn: yyDollar[1].token, + Implements: yyDollar[2].node.(*ast.ParserSeparatedList).Items, + ImplementsSeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, } } case 107: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1430 + // line internal/php5/php5.y:1456 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -3595,7 +3621,7 @@ yydefault: } case 108: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1436 + // line internal/php5/php5.y:1462 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -3604,13 +3630,13 @@ yydefault: } case 109: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1446 + // line internal/php5/php5.y:1472 { yyVAL.node = nil } case 110: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1450 + // line internal/php5/php5.y:1476 { yyVAL.node = &ast.StmtForeach{ DoubleArrowTkn: yyDollar[1].token, @@ -3619,13 +3645,13 @@ yydefault: } case 111: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1460 + // line internal/php5/php5.y:1486 { yyVAL.node = yyDollar[1].node } case 112: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1464 + // line internal/php5/php5.y:1490 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -3635,7 +3661,7 @@ yydefault: } case 113: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1472 + // line internal/php5/php5.y:1498 { pairList := yyDollar[3].node.(*ast.ParserSeparatedList) fistPair := pairList.Items[0].(*ast.ExprArrayItem) @@ -3655,7 +3681,7 @@ yydefault: } case 114: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1493 + // line internal/php5/php5.y:1519 { yyVAL.node = &ast.StmtFor{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3664,7 +3690,7 @@ yydefault: } case 115: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1500 + // line internal/php5/php5.y:1526 { yyVAL.node = &ast.StmtFor{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3679,7 +3705,7 @@ yydefault: } case 116: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1516 + // line internal/php5/php5.y:1542 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3688,7 +3714,7 @@ yydefault: } case 117: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1523 + // line internal/php5/php5.y:1549 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3703,7 +3729,7 @@ yydefault: } case 118: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1540 + // line internal/php5/php5.y:1566 { yyVAL.node = &ast.StmtDeclare{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3712,7 +3738,7 @@ yydefault: } case 119: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1547 + // line internal/php5/php5.y:1573 { yyVAL.node = &ast.StmtDeclare{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3727,7 +3753,7 @@ yydefault: } case 120: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1564 + // line internal/php5/php5.y:1590 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -3746,7 +3772,7 @@ yydefault: } case 121: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:1581 + // line internal/php5/php5.y:1607 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append( @@ -3767,7 +3793,7 @@ yydefault: } case 122: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1604 + // line internal/php5/php5.y:1630 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3778,7 +3804,7 @@ yydefault: } case 123: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1613 + // line internal/php5/php5.y:1639 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3790,7 +3816,7 @@ yydefault: } case 124: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1623 + // line internal/php5/php5.y:1649 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3802,7 +3828,7 @@ yydefault: } case 125: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:1633 + // line internal/php5/php5.y:1659 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[5].token), @@ -3815,13 +3841,13 @@ yydefault: } case 126: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1648 + // line internal/php5/php5.y:1674 { yyVAL.list = nil } case 127: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:1652 + // line internal/php5/php5.y:1678 { yyVAL.list = append(yyDollar[1].list, &ast.StmtCase{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[5].list), @@ -3833,7 +3859,7 @@ yydefault: } case 128: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1662 + // line internal/php5/php5.y:1688 { yyVAL.list = append(yyDollar[1].list, &ast.StmtDefault{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list), @@ -3844,19 +3870,19 @@ yydefault: } case 129: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1675 + // line internal/php5/php5.y:1701 { yyVAL.token = yyDollar[1].token } case 130: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1679 + // line internal/php5/php5.y:1705 { yyVAL.token = yyDollar[1].token } case 131: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1687 + // line internal/php5/php5.y:1713 { yyVAL.node = &ast.StmtWhile{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3865,7 +3891,7 @@ yydefault: } case 132: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1694 + // line internal/php5/php5.y:1720 { yyVAL.node = &ast.StmtWhile{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3880,13 +3906,13 @@ yydefault: } case 133: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1712 + // line internal/php5/php5.y:1738 { yyVAL.list = nil } case 134: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1716 + // line internal/php5/php5.y:1742 { yyVAL.list = append(yyDollar[1].list, &ast.StmtElseIf{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[4].node), @@ -3899,13 +3925,13 @@ yydefault: } case 135: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1731 + // line internal/php5/php5.y:1757 { yyVAL.list = nil } case 136: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:1735 + // line internal/php5/php5.y:1761 { yyVAL.list = append(yyDollar[1].list, &ast.StmtElseIf{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[5].list), @@ -3922,13 +3948,13 @@ yydefault: } case 137: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1754 + // line internal/php5/php5.y:1780 { yyVAL.node = nil } case 138: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1758 + // line internal/php5/php5.y:1784 { yyVAL.node = &ast.StmtElse{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -3938,13 +3964,13 @@ yydefault: } case 139: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1770 + // line internal/php5/php5.y:1796 { yyVAL.node = nil } case 140: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1774 + // line internal/php5/php5.y:1800 { yyVAL.node = &ast.StmtElse{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].list), @@ -3958,19 +3984,19 @@ yydefault: } case 141: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1790 + // line internal/php5/php5.y:1816 { yyVAL.node = yyDollar[1].node } case 142: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1794 + // line internal/php5/php5.y:1820 { yyVAL.node = &ast.ParserSeparatedList{} } case 143: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1801 + // line internal/php5/php5.y:1827 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -3978,7 +4004,7 @@ yydefault: } case 144: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1807 + // line internal/php5/php5.y:1833 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -3987,7 +4013,7 @@ yydefault: } case 145: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:1817 + // line internal/php5/php5.y:1843 { pos := yylex.(*Parser).builder.NewTokenPosition(yyDollar[4].token) if yyDollar[1].node != nil { @@ -4015,7 +4041,7 @@ yydefault: } case 146: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php5/php5.y:1843 + // line internal/php5/php5.y:1869 { pos := yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[4].token, yyDollar[6].node) if yyDollar[1].node != nil { @@ -4045,13 +4071,13 @@ yydefault: } case 147: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:1875 + // line internal/php5/php5.y:1901 { yyVAL.node = nil } case 148: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1879 + // line internal/php5/php5.y:1905 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4061,7 +4087,7 @@ yydefault: } case 149: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1887 + // line internal/php5/php5.y:1913 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4071,13 +4097,13 @@ yydefault: } case 150: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1895 + // line internal/php5/php5.y:1921 { yyVAL.node = yyDollar[1].node } case 151: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1903 + // line internal/php5/php5.y:1929 { yyVAL.node = &ast.ArgumentList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -4087,7 +4113,7 @@ yydefault: } case 152: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1911 + // line internal/php5/php5.y:1937 { argumentList := yyDollar[2].node.(*ast.ArgumentList) argumentList.Position = yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) @@ -4098,7 +4124,7 @@ yydefault: } case 153: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1920 + // line internal/php5/php5.y:1946 { yyVAL.node = &ast.ArgumentList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -4114,7 +4140,7 @@ yydefault: } case 154: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1938 + // line internal/php5/php5.y:1964 { yyVAL.node = &ast.ArgumentList{ Arguments: []ast.Vertex{yyDollar[1].node}, @@ -4122,7 +4148,7 @@ yydefault: } case 155: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1944 + // line internal/php5/php5.y:1970 { yyDollar[1].node.(*ast.ArgumentList).SeparatorTkns = append(yyDollar[1].node.(*ast.ArgumentList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ArgumentList).Arguments = append(yyDollar[1].node.(*ast.ArgumentList).Arguments, yyDollar[3].node) @@ -4131,7 +4157,7 @@ yydefault: } case 156: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1954 + // line internal/php5/php5.y:1980 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -4140,7 +4166,7 @@ yydefault: } case 157: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1961 + // line internal/php5/php5.y:1987 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -4149,7 +4175,7 @@ yydefault: } case 158: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1968 + // line internal/php5/php5.y:1994 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4159,7 +4185,7 @@ yydefault: } case 159: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:1976 + // line internal/php5/php5.y:2002 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4169,7 +4195,7 @@ yydefault: } case 160: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:1987 + // line internal/php5/php5.y:2013 { yyDollar[1].node.(*ast.StmtGlobal).Vars = append(yyDollar[1].node.(*ast.StmtGlobal).Vars, yyDollar[3].node) yyDollar[1].node.(*ast.StmtGlobal).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtGlobal).SeparatorTkns, yyDollar[2].token) @@ -4178,7 +4204,7 @@ yydefault: } case 161: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:1994 + // line internal/php5/php5.y:2020 { yyVAL.node = &ast.StmtGlobal{ Vars: []ast.Vertex{yyDollar[1].node}, @@ -4186,7 +4212,7 @@ yydefault: } case 162: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2004 + // line internal/php5/php5.y:2030 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4199,7 +4225,7 @@ yydefault: } case 163: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2015 + // line internal/php5/php5.y:2041 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4209,7 +4235,7 @@ yydefault: } case 164: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:2023 + // line internal/php5/php5.y:2049 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -4221,7 +4247,7 @@ yydefault: } case 165: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2037 + // line internal/php5/php5.y:2063 { yyDollar[1].node.(*ast.StmtStatic).Vars = append(yyDollar[1].node.(*ast.StmtStatic).Vars, &ast.StmtStaticVar{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[3].token), @@ -4240,7 +4266,7 @@ yydefault: } case 166: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:2054 + // line internal/php5/php5.y:2080 { yyDollar[1].node.(*ast.StmtStatic).Vars = append(yyDollar[1].node.(*ast.StmtStatic).Vars, &ast.StmtStaticVar{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[5].node), @@ -4261,7 +4287,7 @@ yydefault: } case 167: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2073 + // line internal/php5/php5.y:2099 { yyVAL.node = &ast.StmtStatic{ Vars: []ast.Vertex{ @@ -4281,7 +4307,7 @@ yydefault: } case 168: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2091 + // line internal/php5/php5.y:2117 { yyVAL.node = &ast.StmtStatic{ Vars: []ast.Vertex{ @@ -4303,19 +4329,19 @@ yydefault: } case 169: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2115 + // line internal/php5/php5.y:2141 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 170: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:2119 + // line internal/php5/php5.y:2145 { yyVAL.list = []ast.Vertex{} } case 171: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2127 + // line internal/php5/php5.y:2153 { yyVAL.node = &ast.StmtPropertyList{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].list, yyDollar[3].token), @@ -4327,7 +4353,7 @@ yydefault: } case 172: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2137 + // line internal/php5/php5.y:2163 { yyDollar[1].node.(*ast.StmtClassConstList).SemiColonTkn = yyDollar[2].token yyDollar[1].node.(*ast.StmtClassConstList).Position = yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token) @@ -4335,13 +4361,13 @@ yydefault: } case 173: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2143 + // line internal/php5/php5.y:2169 { yyVAL.node = yyDollar[1].node } case 174: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php5/php5.y:2147 + // line internal/php5/php5.y:2173 { pos := yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[8].node) if yyDollar[1].list != nil { @@ -4367,7 +4393,7 @@ yydefault: } case 175: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2174 + // line internal/php5/php5.y:2200 { traitUse := &ast.StmtTraitUse{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4389,7 +4415,7 @@ yydefault: } case 176: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2197 + // line internal/php5/php5.y:2223 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4397,7 +4423,7 @@ yydefault: } case 177: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2203 + // line internal/php5/php5.y:2229 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4406,7 +4432,7 @@ yydefault: } case 178: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2213 + // line internal/php5/php5.y:2239 { yyVAL.node = &ast.StmtNop{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4415,7 +4441,7 @@ yydefault: } case 179: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2220 + // line internal/php5/php5.y:2246 { yyVAL.node = &ast.TraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -4426,31 +4452,31 @@ yydefault: } case 180: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:2232 + // line internal/php5/php5.y:2258 { yyVAL.list = nil } case 181: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2236 + // line internal/php5/php5.y:2262 { yyVAL.list = yyDollar[1].list } case 182: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2243 + // line internal/php5/php5.y:2269 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 183: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2247 + // line internal/php5/php5.y:2273 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 184: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2254 + // line internal/php5/php5.y:2280 { yyDollar[1].node.(*ast.StmtTraitUsePrecedence).SemiColonTkn = yyDollar[2].token @@ -4458,7 +4484,7 @@ yydefault: } case 185: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2260 + // line internal/php5/php5.y:2286 { yyDollar[1].node.(*ast.StmtTraitUseAlias).SemiColonTkn = yyDollar[2].token @@ -4466,7 +4492,7 @@ yydefault: } case 186: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2269 + // line internal/php5/php5.y:2295 { yyVAL.node = &ast.StmtTraitUsePrecedence{ Position: yylex.(*Parser).builder.NewNodeNodeListPosition(yyDollar[1].node, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -4478,7 +4504,7 @@ yydefault: } case 187: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2282 + // line internal/php5/php5.y:2308 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4486,7 +4512,7 @@ yydefault: } case 188: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2288 + // line internal/php5/php5.y:2314 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4495,7 +4521,7 @@ yydefault: } case 189: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2298 + // line internal/php5/php5.y:2324 { yyVAL.node = &ast.StmtTraitMethodRef{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4508,13 +4534,13 @@ yydefault: } case 190: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2309 + // line internal/php5/php5.y:2335 { yyVAL.node = yyDollar[1].node } case 191: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2316 + // line internal/php5/php5.y:2342 { yyVAL.node = &ast.StmtTraitMethodRef{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -4529,7 +4555,7 @@ yydefault: } case 192: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:2332 + // line internal/php5/php5.y:2358 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -4545,7 +4571,7 @@ yydefault: } case 193: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2346 + // line internal/php5/php5.y:2372 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -4556,19 +4582,19 @@ yydefault: } case 194: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:2358 + // line internal/php5/php5.y:2384 { yyVAL.node = nil } case 195: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2362 + // line internal/php5/php5.y:2388 { yyVAL.node = yyDollar[1].node } case 196: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2369 + // line internal/php5/php5.y:2395 { yyVAL.node = &ast.StmtNop{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4577,7 +4603,7 @@ yydefault: } case 197: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2376 + // line internal/php5/php5.y:2402 { yyVAL.node = &ast.StmtStmtList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -4588,13 +4614,13 @@ yydefault: } case 198: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2388 + // line internal/php5/php5.y:2414 { yyVAL.list = yyDollar[1].list } case 199: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2392 + // line internal/php5/php5.y:2418 { yyVAL.list = []ast.Vertex{ &ast.Identifier{ @@ -4606,31 +4632,31 @@ yydefault: } case 200: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:2405 + // line internal/php5/php5.y:2431 { yyVAL.list = nil } case 201: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2409 + // line internal/php5/php5.y:2435 { yyVAL.list = yyDollar[1].list } case 202: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2416 + // line internal/php5/php5.y:2442 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 203: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2420 + // line internal/php5/php5.y:2446 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 204: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2427 + // line internal/php5/php5.y:2453 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4640,7 +4666,7 @@ yydefault: } case 205: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2435 + // line internal/php5/php5.y:2461 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4650,7 +4676,7 @@ yydefault: } case 206: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2443 + // line internal/php5/php5.y:2469 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4660,7 +4686,7 @@ yydefault: } case 207: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2451 + // line internal/php5/php5.y:2477 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4670,7 +4696,7 @@ yydefault: } case 208: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2459 + // line internal/php5/php5.y:2485 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4680,7 +4706,7 @@ yydefault: } case 209: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2467 + // line internal/php5/php5.y:2493 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4690,7 +4716,7 @@ yydefault: } case 210: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2478 + // line internal/php5/php5.y:2504 { item := &ast.StmtProperty{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[3].token), @@ -4711,7 +4737,7 @@ yydefault: } case 211: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:2497 + // line internal/php5/php5.y:2523 { item := &ast.StmtProperty{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[5].node), @@ -4734,7 +4760,7 @@ yydefault: } case 212: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2518 + // line internal/php5/php5.y:2544 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -4755,7 +4781,7 @@ yydefault: } case 213: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2537 + // line internal/php5/php5.y:2563 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -4777,7 +4803,7 @@ yydefault: } case 214: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:2560 + // line internal/php5/php5.y:2586 { constList := yyDollar[1].node.(*ast.StmtClassConstList) constList.Position = yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[5].node) @@ -4797,7 +4823,7 @@ yydefault: } case 215: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:2578 + // line internal/php5/php5.y:2604 { yyVAL.node = &ast.StmtClassConstList{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node), @@ -4818,7 +4844,7 @@ yydefault: } case 216: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2600 + // line internal/php5/php5.y:2626 { yyDollar[1].node.(*ast.StmtEcho).Exprs = append(yyDollar[1].node.(*ast.StmtEcho).Exprs, yyDollar[3].node) yyDollar[1].node.(*ast.StmtEcho).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtEcho).SeparatorTkns, yyDollar[2].token) @@ -4827,7 +4853,7 @@ yydefault: } case 217: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2607 + // line internal/php5/php5.y:2633 { yyVAL.node = &ast.StmtEcho{ Exprs: []ast.Vertex{yyDollar[1].node}, @@ -4835,19 +4861,19 @@ yydefault: } case 218: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:2617 + // line internal/php5/php5.y:2643 { yyVAL.node = &ast.ParserSeparatedList{} } case 219: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2621 + // line internal/php5/php5.y:2647 { yyVAL.node = yyDollar[1].node } case 220: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2628 + // line internal/php5/php5.y:2654 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4856,7 +4882,7 @@ yydefault: } case 221: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2635 + // line internal/php5/php5.y:2661 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4864,19 +4890,19 @@ yydefault: } case 222: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2644 + // line internal/php5/php5.y:2670 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) } case 223: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2648 + // line internal/php5/php5.y:2674 { yyVAL.list = yyDollar[1].list } case 224: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:2655 + // line internal/php5/php5.y:2681 { fetch := &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), @@ -4890,7 +4916,7 @@ yydefault: } case 225: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2667 + // line internal/php5/php5.y:2693 { fetch := &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -4904,37 +4930,37 @@ yydefault: } case 226: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2682 + // line internal/php5/php5.y:2708 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) } case 227: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2686 + // line internal/php5/php5.y:2712 { yyVAL.list = yyDollar[1].list } case 228: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2690 + // line internal/php5/php5.y:2716 { yyVAL.list = yyDollar[1].list } case 229: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:2697 + // line internal/php5/php5.y:2723 { yyVAL.list = nil } case 230: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:2701 + // line internal/php5/php5.y:2727 { yyVAL.list = yyDollar[1].list } case 231: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2708 + // line internal/php5/php5.y:2734 { if yyDollar[3].node != nil { yyVAL.node = &ast.ExprNew{ @@ -4955,7 +4981,7 @@ yydefault: } case 232: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php5/php5.y:2730 + // line internal/php5/php5.y:2756 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[6].node), @@ -4973,7 +4999,7 @@ yydefault: } case 233: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2746 + // line internal/php5/php5.y:2772 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -4984,7 +5010,7 @@ yydefault: } case 234: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:2755 + // line internal/php5/php5.y:2781 { yyVAL.node = &ast.ExprAssignReference{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -4996,7 +5022,7 @@ yydefault: } case 235: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php5/php5.y:2765 + // line internal/php5/php5.y:2791 { var _new *ast.ExprNew if yyDollar[3].token != nil { @@ -5027,7 +5053,7 @@ yydefault: } case 236: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2794 + // line internal/php5/php5.y:2820 { yyVAL.node = &ast.ExprClone{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5037,7 +5063,7 @@ yydefault: } case 237: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2802 + // line internal/php5/php5.y:2828 { yyVAL.node = &ast.ExprAssignPlus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5048,7 +5074,7 @@ yydefault: } case 238: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2811 + // line internal/php5/php5.y:2837 { yyVAL.node = &ast.ExprAssignMinus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5059,7 +5085,7 @@ yydefault: } case 239: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2820 + // line internal/php5/php5.y:2846 { yyVAL.node = &ast.ExprAssignMul{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5070,7 +5096,7 @@ yydefault: } case 240: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2829 + // line internal/php5/php5.y:2855 { yyVAL.node = &ast.ExprAssignPow{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5081,7 +5107,7 @@ yydefault: } case 241: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2838 + // line internal/php5/php5.y:2864 { yyVAL.node = &ast.ExprAssignDiv{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5092,7 +5118,7 @@ yydefault: } case 242: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2847 + // line internal/php5/php5.y:2873 { yyVAL.node = &ast.ExprAssignConcat{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5103,7 +5129,7 @@ yydefault: } case 243: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2856 + // line internal/php5/php5.y:2882 { yyVAL.node = &ast.ExprAssignMod{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5114,7 +5140,7 @@ yydefault: } case 244: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2865 + // line internal/php5/php5.y:2891 { yyVAL.node = &ast.ExprAssignBitwiseAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5125,7 +5151,7 @@ yydefault: } case 245: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2874 + // line internal/php5/php5.y:2900 { yyVAL.node = &ast.ExprAssignBitwiseOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5136,7 +5162,7 @@ yydefault: } case 246: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2883 + // line internal/php5/php5.y:2909 { yyVAL.node = &ast.ExprAssignBitwiseXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5147,7 +5173,7 @@ yydefault: } case 247: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2892 + // line internal/php5/php5.y:2918 { yyVAL.node = &ast.ExprAssignShiftLeft{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5158,7 +5184,7 @@ yydefault: } case 248: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2901 + // line internal/php5/php5.y:2927 { yyVAL.node = &ast.ExprAssignShiftRight{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5169,7 +5195,7 @@ yydefault: } case 249: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2910 + // line internal/php5/php5.y:2936 { yyVAL.node = &ast.ExprPostInc{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -5179,7 +5205,7 @@ yydefault: } case 250: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2918 + // line internal/php5/php5.y:2944 { yyVAL.node = &ast.ExprPreInc{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5189,7 +5215,7 @@ yydefault: } case 251: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2926 + // line internal/php5/php5.y:2952 { yyVAL.node = &ast.ExprPostDec{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -5199,7 +5225,7 @@ yydefault: } case 252: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:2934 + // line internal/php5/php5.y:2960 { yyVAL.node = &ast.ExprPreDec{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5209,7 +5235,7 @@ yydefault: } case 253: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2942 + // line internal/php5/php5.y:2968 { yyVAL.node = &ast.ExprBinaryBooleanOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5220,7 +5246,7 @@ yydefault: } case 254: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2951 + // line internal/php5/php5.y:2977 { yyVAL.node = &ast.ExprBinaryBooleanAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5231,7 +5257,7 @@ yydefault: } case 255: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2960 + // line internal/php5/php5.y:2986 { yyVAL.node = &ast.ExprBinaryLogicalOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5242,7 +5268,7 @@ yydefault: } case 256: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2969 + // line internal/php5/php5.y:2995 { yyVAL.node = &ast.ExprBinaryLogicalAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5253,7 +5279,7 @@ yydefault: } case 257: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2978 + // line internal/php5/php5.y:3004 { yyVAL.node = &ast.ExprBinaryLogicalXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5264,7 +5290,7 @@ yydefault: } case 258: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2987 + // line internal/php5/php5.y:3013 { yyVAL.node = &ast.ExprBinaryBitwiseOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5275,7 +5301,7 @@ yydefault: } case 259: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:2996 + // line internal/php5/php5.y:3022 { yyVAL.node = &ast.ExprBinaryBitwiseAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5286,7 +5312,7 @@ yydefault: } case 260: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3005 + // line internal/php5/php5.y:3031 { yyVAL.node = &ast.ExprBinaryBitwiseXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5297,7 +5323,7 @@ yydefault: } case 261: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3014 + // line internal/php5/php5.y:3040 { yyVAL.node = &ast.ExprBinaryConcat{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5308,7 +5334,7 @@ yydefault: } case 262: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3023 + // line internal/php5/php5.y:3049 { yyVAL.node = &ast.ExprBinaryPlus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5319,7 +5345,7 @@ yydefault: } case 263: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3032 + // line internal/php5/php5.y:3058 { yyVAL.node = &ast.ExprBinaryMinus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5330,7 +5356,7 @@ yydefault: } case 264: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3041 + // line internal/php5/php5.y:3067 { yyVAL.node = &ast.ExprBinaryMul{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5341,7 +5367,7 @@ yydefault: } case 265: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3050 + // line internal/php5/php5.y:3076 { yyVAL.node = &ast.ExprBinaryPow{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5352,7 +5378,7 @@ yydefault: } case 266: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3059 + // line internal/php5/php5.y:3085 { yyVAL.node = &ast.ExprBinaryDiv{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5363,7 +5389,7 @@ yydefault: } case 267: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3068 + // line internal/php5/php5.y:3094 { yyVAL.node = &ast.ExprBinaryMod{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5374,7 +5400,7 @@ yydefault: } case 268: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3077 + // line internal/php5/php5.y:3103 { yyVAL.node = &ast.ExprBinaryShiftLeft{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5385,7 +5411,7 @@ yydefault: } case 269: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3086 + // line internal/php5/php5.y:3112 { yyVAL.node = &ast.ExprBinaryShiftRight{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5396,7 +5422,7 @@ yydefault: } case 270: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3095 + // line internal/php5/php5.y:3121 { yyVAL.node = &ast.ExprUnaryPlus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5406,7 +5432,7 @@ yydefault: } case 271: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3103 + // line internal/php5/php5.y:3129 { yyVAL.node = &ast.ExprUnaryMinus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5416,7 +5442,7 @@ yydefault: } case 272: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3111 + // line internal/php5/php5.y:3137 { yyVAL.node = &ast.ExprBooleanNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5426,7 +5452,7 @@ yydefault: } case 273: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3119 + // line internal/php5/php5.y:3145 { yyVAL.node = &ast.ExprBitwiseNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5436,7 +5462,7 @@ yydefault: } case 274: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3127 + // line internal/php5/php5.y:3153 { yyVAL.node = &ast.ExprBinaryIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5447,7 +5473,7 @@ yydefault: } case 275: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3136 + // line internal/php5/php5.y:3162 { yyVAL.node = &ast.ExprBinaryNotIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5458,7 +5484,7 @@ yydefault: } case 276: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3145 + // line internal/php5/php5.y:3171 { yyVAL.node = &ast.ExprBinaryEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5469,7 +5495,7 @@ yydefault: } case 277: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3154 + // line internal/php5/php5.y:3180 { yyVAL.node = &ast.ExprBinaryNotEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5480,7 +5506,7 @@ yydefault: } case 278: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3163 + // line internal/php5/php5.y:3189 { yyVAL.node = &ast.ExprBinarySmaller{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5491,7 +5517,7 @@ yydefault: } case 279: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3172 + // line internal/php5/php5.y:3198 { yyVAL.node = &ast.ExprBinarySmallerOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5502,7 +5528,7 @@ yydefault: } case 280: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3181 + // line internal/php5/php5.y:3207 { yyVAL.node = &ast.ExprBinaryGreater{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5513,7 +5539,7 @@ yydefault: } case 281: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3190 + // line internal/php5/php5.y:3216 { yyVAL.node = &ast.ExprBinaryGreaterOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5524,7 +5550,7 @@ yydefault: } case 282: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3199 + // line internal/php5/php5.y:3225 { yyVAL.node = &ast.ExprInstanceOf{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5535,19 +5561,19 @@ yydefault: } case 283: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3208 + // line internal/php5/php5.y:3234 { yyVAL.node = yyDollar[1].node } case 284: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3212 + // line internal/php5/php5.y:3238 { yyVAL.node = yyDollar[1].node } case 285: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3216 + // line internal/php5/php5.y:3242 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5582,7 +5608,7 @@ yydefault: } case 286: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:3249 + // line internal/php5/php5.y:3275 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[5].node), @@ -5595,7 +5621,7 @@ yydefault: } case 287: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3260 + // line internal/php5/php5.y:3286 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5607,13 +5633,13 @@ yydefault: } case 288: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3270 + // line internal/php5/php5.y:3296 { yyVAL.node = yyDollar[1].node } case 289: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3274 + // line internal/php5/php5.y:3300 { yyVAL.node = &ast.ExprCastInt{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5623,7 +5649,7 @@ yydefault: } case 290: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3282 + // line internal/php5/php5.y:3308 { yyVAL.node = &ast.ExprCastDouble{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5633,7 +5659,7 @@ yydefault: } case 291: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3290 + // line internal/php5/php5.y:3316 { yyVAL.node = &ast.ExprCastString{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5643,7 +5669,7 @@ yydefault: } case 292: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3298 + // line internal/php5/php5.y:3324 { yyVAL.node = &ast.ExprCastArray{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5653,7 +5679,7 @@ yydefault: } case 293: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3306 + // line internal/php5/php5.y:3332 { yyVAL.node = &ast.ExprCastObject{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5663,7 +5689,7 @@ yydefault: } case 294: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3314 + // line internal/php5/php5.y:3340 { yyVAL.node = &ast.ExprCastBool{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5673,7 +5699,7 @@ yydefault: } case 295: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3322 + // line internal/php5/php5.y:3348 { yyVAL.node = &ast.ExprCastUnset{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5683,7 +5709,7 @@ yydefault: } case 296: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3330 + // line internal/php5/php5.y:3356 { exit := &ast.ExprExit{ ExitTkn: yyDollar[1].token, @@ -5702,7 +5728,7 @@ yydefault: } case 297: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3347 + // line internal/php5/php5.y:3373 { yyVAL.node = &ast.ExprErrorSuppress{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5712,25 +5738,25 @@ yydefault: } case 298: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3355 + // line internal/php5/php5.y:3381 { yyVAL.node = yyDollar[1].node } case 299: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3359 + // line internal/php5/php5.y:3385 { yyVAL.node = yyDollar[1].node } case 300: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3363 + // line internal/php5/php5.y:3389 { yyVAL.node = yyDollar[1].node } case 301: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3367 + // line internal/php5/php5.y:3393 { yyVAL.node = &ast.ExprShellExec{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5741,7 +5767,7 @@ yydefault: } case 302: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3376 + // line internal/php5/php5.y:3402 { yyVAL.node = &ast.ExprPrint{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5751,7 +5777,7 @@ yydefault: } case 303: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3384 + // line internal/php5/php5.y:3410 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -5760,7 +5786,7 @@ yydefault: } case 304: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php5/php5.y:3391 + // line internal/php5/php5.y:3417 { closure := yyDollar[6].node.(*ast.ExprClosure) @@ -5779,7 +5805,7 @@ yydefault: } case 305: yyDollar = yyS[yypt-10 : yypt+1] - // line internal/php5/php5.y:3408 + // line internal/php5/php5.y:3434 { closure := yyDollar[7].node.(*ast.ExprClosure) @@ -5799,7 +5825,7 @@ yydefault: } case 306: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3429 + // line internal/php5/php5.y:3455 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5809,7 +5835,7 @@ yydefault: } case 307: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3437 + // line internal/php5/php5.y:3463 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5819,7 +5845,7 @@ yydefault: } case 308: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3445 + // line internal/php5/php5.y:3471 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node), @@ -5831,7 +5857,7 @@ yydefault: } case 309: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3455 + // line internal/php5/php5.y:3481 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node), @@ -5843,7 +5869,7 @@ yydefault: } case 310: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3468 + // line internal/php5/php5.y:3494 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -5855,7 +5881,7 @@ yydefault: } case 311: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3478 + // line internal/php5/php5.y:3504 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -5867,7 +5893,7 @@ yydefault: } case 312: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3488 + // line internal/php5/php5.y:3514 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -5883,7 +5909,7 @@ yydefault: } case 313: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3502 + // line internal/php5/php5.y:3528 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -5895,7 +5921,7 @@ yydefault: } case 314: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3515 + // line internal/php5/php5.y:3541 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -5908,7 +5934,7 @@ yydefault: } case 315: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3526 + // line internal/php5/php5.y:3552 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5920,19 +5946,19 @@ yydefault: } case 316: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3539 + // line internal/php5/php5.y:3565 { yyVAL.token = yyDollar[1].token } case 317: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:3546 + // line internal/php5/php5.y:3572 { yyVAL.node = &ast.ExprClosure{} } case 318: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3550 + // line internal/php5/php5.y:3576 { yyVAL.node = &ast.ExprClosure{ UseTkn: yyDollar[1].token, @@ -5944,7 +5970,7 @@ yydefault: } case 319: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3563 + // line internal/php5/php5.y:3589 { variable := &ast.ExprClosureUse{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[3].token), @@ -5965,7 +5991,7 @@ yydefault: } case 320: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3582 + // line internal/php5/php5.y:3608 { variable := &ast.ExprClosureUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[3].token, yyDollar[4].token), @@ -5987,7 +6013,7 @@ yydefault: } case 321: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3602 + // line internal/php5/php5.y:3628 { variable := &ast.ExprClosureUse{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6007,7 +6033,7 @@ yydefault: } case 322: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3620 + // line internal/php5/php5.y:3646 { variable := &ast.ExprClosureUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -6028,7 +6054,7 @@ yydefault: } case 323: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3642 + // line internal/php5/php5.y:3668 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewNodeListNodePosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[2].node), @@ -6045,7 +6071,7 @@ yydefault: } case 324: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3657 + // line internal/php5/php5.y:3683 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node), @@ -6064,7 +6090,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3674 + // line internal/php5/php5.y:3700 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -6082,7 +6108,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3690 + // line internal/php5/php5.y:3716 { staticCall := &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6105,7 +6131,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3711 + // line internal/php5/php5.y:3737 { yyVAL.node = &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6120,7 +6146,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3724 + // line internal/php5/php5.y:3750 { staticCall := &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6143,7 +6169,7 @@ yydefault: } case 329: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3745 + // line internal/php5/php5.y:3771 { yyVAL.node = &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6158,7 +6184,7 @@ yydefault: } case 330: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3758 + // line internal/php5/php5.y:3784 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node), @@ -6171,7 +6197,7 @@ yydefault: } case 331: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3772 + // line internal/php5/php5.y:3798 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6181,7 +6207,7 @@ yydefault: } case 332: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3780 + // line internal/php5/php5.y:3806 { yyVAL.node = &ast.NameName{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -6191,7 +6217,7 @@ yydefault: } case 333: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3788 + // line internal/php5/php5.y:3814 { yyVAL.node = &ast.NameRelative{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -6203,7 +6229,7 @@ yydefault: } case 334: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3798 + // line internal/php5/php5.y:3824 { yyVAL.node = &ast.NameFullyQualified{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -6214,7 +6240,7 @@ yydefault: } case 335: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3810 + // line internal/php5/php5.y:3836 { yyVAL.node = &ast.NameName{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -6224,7 +6250,7 @@ yydefault: } case 336: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:3818 + // line internal/php5/php5.y:3844 { yyVAL.node = &ast.NameRelative{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -6236,7 +6262,7 @@ yydefault: } case 337: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3828 + // line internal/php5/php5.y:3854 { yyVAL.node = &ast.NameFullyQualified{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -6247,19 +6273,19 @@ yydefault: } case 338: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3840 + // line internal/php5/php5.y:3866 { yyVAL.node = yyDollar[1].node } case 339: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3844 + // line internal/php5/php5.y:3870 { yyVAL.node = yyDollar[1].node } case 340: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:3851 + // line internal/php5/php5.y:3877 { yyVAL.node = yyDollar[1].node @@ -6295,25 +6321,25 @@ yydefault: } case 341: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3885 + // line internal/php5/php5.y:3911 { yyVAL.node = yyDollar[1].node } case 342: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3893 + // line internal/php5/php5.y:3919 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) } case 343: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:3897 + // line internal/php5/php5.y:3923 { yyVAL.list = []ast.Vertex{} } case 344: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3905 + // line internal/php5/php5.y:3931 { yyDollar[2].list[0].(*ast.ExprPropertyFetch).ObjectOperatorTkn = yyDollar[1].token @@ -6321,13 +6347,13 @@ yydefault: } case 345: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:3914 + // line internal/php5/php5.y:3940 { yyVAL.node = nil } case 346: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:3918 + // line internal/php5/php5.y:3944 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -6337,19 +6363,19 @@ yydefault: } case 347: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3926 + // line internal/php5/php5.y:3952 { yyVAL.node = yyDollar[1].node } case 348: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:3933 + // line internal/php5/php5.y:3959 { yyVAL.list = []ast.Vertex{} } case 349: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3937 + // line internal/php5/php5.y:3963 { yyVAL.list = []ast.Vertex{ &ast.ScalarEncapsedStringPart{ @@ -6361,25 +6387,25 @@ yydefault: } case 350: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3947 + // line internal/php5/php5.y:3973 { yyVAL.list = yyDollar[1].list } case 351: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:3954 + // line internal/php5/php5.y:3980 { yyVAL.node = &ast.ArgumentList{} } case 352: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3958 + // line internal/php5/php5.y:3984 { yyVAL.node = yyDollar[1].node } case 353: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3965 + // line internal/php5/php5.y:3991 { yyVAL.node = &ast.ScalarLnumber{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6389,7 +6415,7 @@ yydefault: } case 354: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3973 + // line internal/php5/php5.y:3999 { yyVAL.node = &ast.ScalarDnumber{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6399,7 +6425,7 @@ yydefault: } case 355: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3981 + // line internal/php5/php5.y:4007 { yyVAL.node = &ast.ScalarString{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6409,7 +6435,7 @@ yydefault: } case 356: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3989 + // line internal/php5/php5.y:4015 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6419,7 +6445,7 @@ yydefault: } case 357: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:3997 + // line internal/php5/php5.y:4023 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6429,7 +6455,7 @@ yydefault: } case 358: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4005 + // line internal/php5/php5.y:4031 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6439,7 +6465,7 @@ yydefault: } case 359: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4013 + // line internal/php5/php5.y:4039 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6449,7 +6475,7 @@ yydefault: } case 360: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4021 + // line internal/php5/php5.y:4047 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6459,7 +6485,7 @@ yydefault: } case 361: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4029 + // line internal/php5/php5.y:4055 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6469,7 +6495,7 @@ yydefault: } case 362: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4037 + // line internal/php5/php5.y:4063 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6479,7 +6505,7 @@ yydefault: } case 363: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4045 + // line internal/php5/php5.y:4071 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6496,7 +6522,7 @@ yydefault: } case 364: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4060 + // line internal/php5/php5.y:4086 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -6506,7 +6532,7 @@ yydefault: } case 365: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4071 + // line internal/php5/php5.y:4097 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -6521,25 +6547,25 @@ yydefault: } case 366: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4087 + // line internal/php5/php5.y:4113 { yyVAL.node = yyDollar[1].node } case 367: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4094 + // line internal/php5/php5.y:4120 { yyVAL.node = yyDollar[1].node } case 368: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4098 + // line internal/php5/php5.y:4124 { yyVAL.node = yyDollar[1].node } case 369: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4102 + // line internal/php5/php5.y:4128 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -6552,7 +6578,7 @@ yydefault: } case 370: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4113 + // line internal/php5/php5.y:4139 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -6567,7 +6593,7 @@ yydefault: } case 371: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4126 + // line internal/php5/php5.y:4152 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -6581,7 +6607,7 @@ yydefault: } case 372: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4138 + // line internal/php5/php5.y:4164 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6594,7 +6620,7 @@ yydefault: } case 373: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4149 + // line internal/php5/php5.y:4175 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6606,13 +6632,13 @@ yydefault: } case 374: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4159 + // line internal/php5/php5.y:4185 { yyVAL.node = yyDollar[1].node } case 375: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4163 + // line internal/php5/php5.y:4189 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6622,13 +6648,13 @@ yydefault: } case 376: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4171 + // line internal/php5/php5.y:4197 { yyVAL.node = yyDollar[1].node } case 377: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4178 + // line internal/php5/php5.y:4204 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -6640,7 +6666,7 @@ yydefault: } case 378: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4188 + // line internal/php5/php5.y:4214 { yyVAL.node = &ast.ExprBinaryPlus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6651,7 +6677,7 @@ yydefault: } case 379: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4197 + // line internal/php5/php5.y:4223 { yyVAL.node = &ast.ExprBinaryMinus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6662,7 +6688,7 @@ yydefault: } case 380: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4206 + // line internal/php5/php5.y:4232 { yyVAL.node = &ast.ExprBinaryMul{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6673,7 +6699,7 @@ yydefault: } case 381: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4215 + // line internal/php5/php5.y:4241 { yyVAL.node = &ast.ExprBinaryPow{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6684,7 +6710,7 @@ yydefault: } case 382: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4224 + // line internal/php5/php5.y:4250 { yyVAL.node = &ast.ExprBinaryDiv{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6695,7 +6721,7 @@ yydefault: } case 383: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4233 + // line internal/php5/php5.y:4259 { yyVAL.node = &ast.ExprBinaryMod{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6706,7 +6732,7 @@ yydefault: } case 384: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4242 + // line internal/php5/php5.y:4268 { yyVAL.node = &ast.ExprBooleanNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6716,7 +6742,7 @@ yydefault: } case 385: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4250 + // line internal/php5/php5.y:4276 { yyVAL.node = &ast.ExprBitwiseNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6726,7 +6752,7 @@ yydefault: } case 386: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4258 + // line internal/php5/php5.y:4284 { yyVAL.node = &ast.ExprBinaryBitwiseOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6737,7 +6763,7 @@ yydefault: } case 387: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4267 + // line internal/php5/php5.y:4293 { yyVAL.node = &ast.ExprBinaryBitwiseAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6748,7 +6774,7 @@ yydefault: } case 388: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4276 + // line internal/php5/php5.y:4302 { yyVAL.node = &ast.ExprBinaryBitwiseXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6759,7 +6785,7 @@ yydefault: } case 389: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4285 + // line internal/php5/php5.y:4311 { yyVAL.node = &ast.ExprBinaryShiftLeft{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6770,7 +6796,7 @@ yydefault: } case 390: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4294 + // line internal/php5/php5.y:4320 { yyVAL.node = &ast.ExprBinaryShiftRight{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6781,7 +6807,7 @@ yydefault: } case 391: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4303 + // line internal/php5/php5.y:4329 { yyVAL.node = &ast.ExprBinaryConcat{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6792,7 +6818,7 @@ yydefault: } case 392: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4312 + // line internal/php5/php5.y:4338 { yyVAL.node = &ast.ExprBinaryLogicalXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6803,7 +6829,7 @@ yydefault: } case 393: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4321 + // line internal/php5/php5.y:4347 { yyVAL.node = &ast.ExprBinaryLogicalAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6814,7 +6840,7 @@ yydefault: } case 394: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4330 + // line internal/php5/php5.y:4356 { yyVAL.node = &ast.ExprBinaryLogicalOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6825,7 +6851,7 @@ yydefault: } case 395: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4339 + // line internal/php5/php5.y:4365 { yyVAL.node = &ast.ExprBinaryBooleanAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6836,7 +6862,7 @@ yydefault: } case 396: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4348 + // line internal/php5/php5.y:4374 { yyVAL.node = &ast.ExprBinaryBooleanOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6847,7 +6873,7 @@ yydefault: } case 397: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4357 + // line internal/php5/php5.y:4383 { yyVAL.node = &ast.ExprBinaryIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6858,7 +6884,7 @@ yydefault: } case 398: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4366 + // line internal/php5/php5.y:4392 { yyVAL.node = &ast.ExprBinaryNotIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6869,7 +6895,7 @@ yydefault: } case 399: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4375 + // line internal/php5/php5.y:4401 { yyVAL.node = &ast.ExprBinaryEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6880,7 +6906,7 @@ yydefault: } case 400: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4384 + // line internal/php5/php5.y:4410 { yyVAL.node = &ast.ExprBinaryNotEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6891,7 +6917,7 @@ yydefault: } case 401: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4393 + // line internal/php5/php5.y:4419 { yyVAL.node = &ast.ExprBinarySmaller{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6902,7 +6928,7 @@ yydefault: } case 402: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4402 + // line internal/php5/php5.y:4428 { yyVAL.node = &ast.ExprBinaryGreater{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6913,7 +6939,7 @@ yydefault: } case 403: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4411 + // line internal/php5/php5.y:4437 { yyVAL.node = &ast.ExprBinarySmallerOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6924,7 +6950,7 @@ yydefault: } case 404: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4420 + // line internal/php5/php5.y:4446 { yyVAL.node = &ast.ExprBinaryGreaterOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6935,7 +6961,7 @@ yydefault: } case 405: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4429 + // line internal/php5/php5.y:4455 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6947,7 +6973,7 @@ yydefault: } case 406: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:4439 + // line internal/php5/php5.y:4465 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[5].node), @@ -6960,7 +6986,7 @@ yydefault: } case 407: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4450 + // line internal/php5/php5.y:4476 { yyVAL.node = &ast.ExprUnaryPlus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6970,7 +6996,7 @@ yydefault: } case 408: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4458 + // line internal/php5/php5.y:4484 { yyVAL.node = &ast.ExprUnaryMinus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6980,7 +7006,7 @@ yydefault: } case 409: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4466 + // line internal/php5/php5.y:4492 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6991,13 +7017,13 @@ yydefault: } case 410: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4478 + // line internal/php5/php5.y:4504 { yyVAL.node = yyDollar[1].node } case 411: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4482 + // line internal/php5/php5.y:4508 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -7010,7 +7036,7 @@ yydefault: } case 412: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4493 + // line internal/php5/php5.y:4519 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -7025,7 +7051,7 @@ yydefault: } case 413: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4506 + // line internal/php5/php5.y:4532 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -7039,7 +7065,7 @@ yydefault: } case 414: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4521 + // line internal/php5/php5.y:4547 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -7052,25 +7078,25 @@ yydefault: } case 415: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4532 + // line internal/php5/php5.y:4558 { yyVAL.node = yyDollar[1].node } case 416: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4536 + // line internal/php5/php5.y:4562 { yyVAL.node = yyDollar[1].node } case 417: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4540 + // line internal/php5/php5.y:4566 { yyVAL.node = yyDollar[1].node } case 418: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4544 + // line internal/php5/php5.y:4570 { yyVAL.node = &ast.ScalarEncapsed{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -7081,7 +7107,7 @@ yydefault: } case 419: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4553 + // line internal/php5/php5.y:4579 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -7092,7 +7118,7 @@ yydefault: } case 420: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4562 + // line internal/php5/php5.y:4588 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -7102,13 +7128,13 @@ yydefault: } case 421: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:4573 + // line internal/php5/php5.y:4599 { yyVAL.node = &ast.ParserSeparatedList{} } case 422: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4577 + // line internal/php5/php5.y:4603 { if yyDollar[2].token != nil { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) @@ -7119,19 +7145,19 @@ yydefault: } case 423: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:4589 + // line internal/php5/php5.y:4615 { yyVAL.token = nil } case 424: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4593 + // line internal/php5/php5.y:4619 { yyVAL.token = yyDollar[1].token } case 425: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:4600 + // line internal/php5/php5.y:4626 { arrayItem := &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[5].node), @@ -7147,7 +7173,7 @@ yydefault: } case 426: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4614 + // line internal/php5/php5.y:4640 { arrayItem := &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[3].node), @@ -7161,7 +7187,7 @@ yydefault: } case 427: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4626 + // line internal/php5/php5.y:4652 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -7176,7 +7202,7 @@ yydefault: } case 428: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4639 + // line internal/php5/php5.y:4665 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -7189,19 +7215,19 @@ yydefault: } case 429: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4653 + // line internal/php5/php5.y:4679 { yyVAL.node = yyDollar[1].node } case 430: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4657 + // line internal/php5/php5.y:4683 { yyVAL.node = yyDollar[1].node } case 431: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4664 + // line internal/php5/php5.y:4690 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -7212,7 +7238,7 @@ yydefault: } case 432: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4673 + // line internal/php5/php5.y:4699 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -7223,25 +7249,25 @@ yydefault: } case 433: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4686 + // line internal/php5/php5.y:4712 { yyVAL.node = yyDollar[1].node } case 434: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4694 + // line internal/php5/php5.y:4720 { yyVAL.node = yyDollar[1].node } case 435: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4701 + // line internal/php5/php5.y:4727 { yyVAL.node = yyDollar[1].node } case 436: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:4708 + // line internal/php5/php5.y:4734 { yyVAL.node = yyDollar[1].node @@ -7320,25 +7346,25 @@ yydefault: } case 437: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4785 + // line internal/php5/php5.y:4811 { yyVAL.node = yyDollar[1].node } case 438: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4792 + // line internal/php5/php5.y:4818 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) } case 439: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:4796 + // line internal/php5/php5.y:4822 { yyVAL.list = []ast.Vertex{} } case 440: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4804 + // line internal/php5/php5.y:4830 { yyDollar[2].list[0].(*ast.ExprPropertyFetch).ObjectOperatorTkn = yyDollar[1].token @@ -7369,7 +7395,7 @@ yydefault: } case 441: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4836 + // line internal/php5/php5.y:4862 { fetch := &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), @@ -7383,7 +7409,7 @@ yydefault: } case 442: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4848 + // line internal/php5/php5.y:4874 { fetch := &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), @@ -7397,7 +7423,7 @@ yydefault: } case 443: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4863 + // line internal/php5/php5.y:4889 { yyVAL.node = &ast.ExprMethodCall{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -7409,31 +7435,31 @@ yydefault: } case 444: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4876 + // line internal/php5/php5.y:4902 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 445: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4880 + // line internal/php5/php5.y:4906 { yyVAL.list = yyDollar[1].list } case 446: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:4884 + // line internal/php5/php5.y:4910 { yyVAL.list = nil } case 447: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4891 + // line internal/php5/php5.y:4917 { yyVAL.node = yyDollar[1].node } case 448: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4895 + // line internal/php5/php5.y:4921 { for i := len(yyDollar[1].list) - 1; i >= 0; i-- { yyDollar[1].list[i].(*ast.ExprVariable).VarName = yyDollar[2].node @@ -7445,7 +7471,7 @@ yydefault: } case 449: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4908 + // line internal/php5/php5.y:4934 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -7456,7 +7482,7 @@ yydefault: } case 450: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:4917 + // line internal/php5/php5.y:4943 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -7467,13 +7493,13 @@ yydefault: } case 451: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4929 + // line internal/php5/php5.y:4955 { yyVAL.node = yyDollar[1].node } case 452: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4936 + // line internal/php5/php5.y:4962 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -7485,7 +7511,7 @@ yydefault: } case 453: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4946 + // line internal/php5/php5.y:4972 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -7497,31 +7523,31 @@ yydefault: } case 454: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4959 + // line internal/php5/php5.y:4985 { yyVAL.node = yyDollar[1].node } case 455: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4963 + // line internal/php5/php5.y:4989 { yyVAL.node = yyDollar[1].node } case 456: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4967 + // line internal/php5/php5.y:4993 { yyVAL.node = yyDollar[1].node } case 457: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4975 + // line internal/php5/php5.y:5001 { yyVAL.node = yyDollar[1].node } case 458: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:4979 + // line internal/php5/php5.y:5005 { for i := len(yyDollar[1].list) - 1; i >= 0; i-- { yyDollar[1].list[i].(*ast.ExprVariable).VarName = yyDollar[2].node @@ -7533,13 +7559,13 @@ yydefault: } case 459: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:4989 + // line internal/php5/php5.y:5015 { yyVAL.node = yyDollar[1].node } case 460: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:4996 + // line internal/php5/php5.y:5022 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -7551,7 +7577,7 @@ yydefault: } case 461: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5006 + // line internal/php5/php5.y:5032 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -7563,13 +7589,13 @@ yydefault: } case 462: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5016 + // line internal/php5/php5.y:5042 { yyVAL.node = yyDollar[1].node } case 463: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5024 + // line internal/php5/php5.y:5050 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -7582,7 +7608,7 @@ yydefault: } case 464: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5035 + // line internal/php5/php5.y:5061 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -7594,25 +7620,25 @@ yydefault: } case 465: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:5048 + // line internal/php5/php5.y:5074 { yyVAL.node = nil } case 466: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5052 + // line internal/php5/php5.y:5078 { yyVAL.node = yyDollar[1].node } case 467: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5060 + // line internal/php5/php5.y:5086 { yyVAL.list = yyDollar[1].list } case 468: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5064 + // line internal/php5/php5.y:5090 { yyVAL.list = []ast.Vertex{ &ast.ExprPropertyFetch{ @@ -7623,7 +7649,7 @@ yydefault: } case 469: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5076 + // line internal/php5/php5.y:5102 { fetch := &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), @@ -7637,7 +7663,7 @@ yydefault: } case 470: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5088 + // line internal/php5/php5.y:5114 { fetch := &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), @@ -7651,7 +7677,7 @@ yydefault: } case 471: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5100 + // line internal/php5/php5.y:5126 { property := &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -7668,7 +7694,7 @@ yydefault: } case 472: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5118 + // line internal/php5/php5.y:5144 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -7678,7 +7704,7 @@ yydefault: } case 473: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5126 + // line internal/php5/php5.y:5152 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -7689,7 +7715,7 @@ yydefault: } case 474: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5138 + // line internal/php5/php5.y:5164 { yyVAL.list = []ast.Vertex{ &ast.ExprVariable{ @@ -7700,7 +7726,7 @@ yydefault: } case 475: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5147 + // line internal/php5/php5.y:5173 { yyVAL.list = append(yyDollar[1].list, &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[2].token), @@ -7709,7 +7735,7 @@ yydefault: } case 476: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5157 + // line internal/php5/php5.y:5183 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -7718,7 +7744,7 @@ yydefault: } case 477: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5164 + // line internal/php5/php5.y:5190 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -7726,7 +7752,7 @@ yydefault: } case 478: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5174 + // line internal/php5/php5.y:5200 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -7735,7 +7761,7 @@ yydefault: } case 479: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5181 + // line internal/php5/php5.y:5207 { pairList := yyDollar[3].node.(*ast.ParserSeparatedList) fistPair := pairList.Items[0].(*ast.ExprArrayItem) @@ -7758,19 +7784,19 @@ yydefault: } case 480: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:5202 + // line internal/php5/php5.y:5228 { yyVAL.node = &ast.ExprArrayItem{} } case 481: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:5210 + // line internal/php5/php5.y:5236 { yyVAL.node = &ast.ParserSeparatedList{} } case 482: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5214 + // line internal/php5/php5.y:5240 { if yyDollar[2].token != nil { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) @@ -7781,7 +7807,7 @@ yydefault: } case 483: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:5226 + // line internal/php5/php5.y:5252 { arrayItem := &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[5].node), @@ -7797,7 +7823,7 @@ yydefault: } case 484: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5240 + // line internal/php5/php5.y:5266 { arrayItem := &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[3].node), @@ -7811,7 +7837,7 @@ yydefault: } case 485: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5252 + // line internal/php5/php5.y:5278 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -7826,7 +7852,7 @@ yydefault: } case 486: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5265 + // line internal/php5/php5.y:5291 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -7839,7 +7865,7 @@ yydefault: } case 487: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php5/php5.y:5276 + // line internal/php5/php5.y:5302 { arrayItem := &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[6].node), @@ -7856,7 +7882,7 @@ yydefault: } case 488: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5291 + // line internal/php5/php5.y:5317 { arrayItem := &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node), @@ -7871,7 +7897,7 @@ yydefault: } case 489: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5304 + // line internal/php5/php5.y:5330 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -7887,7 +7913,7 @@ yydefault: } case 490: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5318 + // line internal/php5/php5.y:5344 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -7901,13 +7927,13 @@ yydefault: } case 491: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5333 + // line internal/php5/php5.y:5359 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 492: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5337 + // line internal/php5/php5.y:5363 { yyVAL.list = append( yyDollar[1].list, @@ -7920,13 +7946,13 @@ yydefault: } case 493: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5348 + // line internal/php5/php5.y:5374 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 494: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5352 + // line internal/php5/php5.y:5378 { yyVAL.list = []ast.Vertex{ &ast.ScalarEncapsedStringPart{ @@ -7939,7 +7965,7 @@ yydefault: } case 495: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5366 + // line internal/php5/php5.y:5392 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -7952,7 +7978,7 @@ yydefault: } case 496: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5377 + // line internal/php5/php5.y:5403 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -7971,7 +7997,7 @@ yydefault: } case 497: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5394 + // line internal/php5/php5.y:5420 { yyVAL.node = &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -7993,7 +8019,7 @@ yydefault: } case 498: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5414 + // line internal/php5/php5.y:5440 { yyVAL.node = &ast.ScalarEncapsedStringVar{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -8004,7 +8030,7 @@ yydefault: } case 499: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5423 + // line internal/php5/php5.y:5449 { yyVAL.node = &ast.ScalarEncapsedStringVar{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -8019,7 +8045,7 @@ yydefault: } case 500: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php5/php5.y:5436 + // line internal/php5/php5.y:5462 { yyVAL.node = &ast.ScalarEncapsedStringVar{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -8037,7 +8063,7 @@ yydefault: } case 501: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5452 + // line internal/php5/php5.y:5478 { yyVAL.node = &ast.ScalarEncapsedStringBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -8048,7 +8074,7 @@ yydefault: } case 502: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5464 + // line internal/php5/php5.y:5490 { yyVAL.node = &ast.ScalarString{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -8058,7 +8084,7 @@ yydefault: } case 503: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5472 + // line internal/php5/php5.y:5498 { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { @@ -8077,7 +8103,7 @@ yydefault: } case 504: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5489 + // line internal/php5/php5.y:5515 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -8090,7 +8116,7 @@ yydefault: } case 505: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5503 + // line internal/php5/php5.y:5529 { yyVAL.node = &ast.ExprIsset{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -8103,7 +8129,7 @@ yydefault: } case 506: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5514 + // line internal/php5/php5.y:5540 { yyVAL.node = &ast.ExprEmpty{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -8115,7 +8141,7 @@ yydefault: } case 507: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5524 + // line internal/php5/php5.y:5550 { yyVAL.node = &ast.ExprEmpty{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -8127,7 +8153,7 @@ yydefault: } case 508: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5534 + // line internal/php5/php5.y:5560 { yyVAL.node = &ast.ExprInclude{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -8137,7 +8163,7 @@ yydefault: } case 509: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5542 + // line internal/php5/php5.y:5568 { yyVAL.node = &ast.ExprIncludeOnce{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -8147,7 +8173,7 @@ yydefault: } case 510: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:5550 + // line internal/php5/php5.y:5576 { yyVAL.node = &ast.ExprEval{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -8159,7 +8185,7 @@ yydefault: } case 511: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5560 + // line internal/php5/php5.y:5586 { yyVAL.node = &ast.ExprRequire{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -8169,7 +8195,7 @@ yydefault: } case 512: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:5568 + // line internal/php5/php5.y:5594 { yyVAL.node = &ast.ExprRequireOnce{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -8179,7 +8205,7 @@ yydefault: } case 513: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5579 + // line internal/php5/php5.y:5605 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -8187,7 +8213,7 @@ yydefault: } case 514: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5585 + // line internal/php5/php5.y:5611 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -8196,19 +8222,19 @@ yydefault: } case 515: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5595 + // line internal/php5/php5.y:5621 { yyVAL.node = yyDollar[1].node } case 516: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:5599 + // line internal/php5/php5.y:5625 { yyVAL.node = yyDollar[1].node } case 517: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5606 + // line internal/php5/php5.y:5632 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -8223,7 +8249,7 @@ yydefault: } case 518: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5619 + // line internal/php5/php5.y:5645 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -8238,7 +8264,7 @@ yydefault: } case 519: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5635 + // line internal/php5/php5.y:5661 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -8253,7 +8279,7 @@ yydefault: } case 520: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:5651 + // line internal/php5/php5.y:5677 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 65e6ed1..b422f9f 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -1280,36 +1280,55 @@ unticked_class_declaration_statement: { switch n := $1.(type) { case *ast.StmtClass : - n.Position = yylex.(*Parser).builder.NewNodeTokenPosition($1, $7) - n.ClassName = &ast.Identifier{ - Position: yylex.(*Parser).builder.NewTokenPosition($2), + className := &ast.Identifier{ + Position: yylex.(*Parser).builder.NewTokenPosition($2), IdentifierTkn: $2, Value: $2.Value, } - n.Extends = $3 - n.Implements = $4 - n.OpenCurlyBracketTkn = $5 - n.Stmts = $6 + + n.Position = yylex.(*Parser).builder.NewNodeTokenPosition($1, $7) + n.ClassName = className + n.OpenCurlyBracketTkn = $5 + n.Stmts = $6 n.CloseCurlyBracketTkn = $7 + + if $3 != nil { + n.ExtendsTkn = $3.(*ast.StmtClass).ExtendsTkn + n.Extends = $3.(*ast.StmtClass).Extends + } + + if $4 != nil { + n.ImplementsTkn = $4.(*ast.StmtClass).ImplementsTkn + n.Implements = $4.(*ast.StmtClass).Implements + n.ImplementsSeparatorTkns = $4.(*ast.StmtClass).ImplementsSeparatorTkns + } case *ast.StmtTrait : - n.Position = yylex.(*Parser).builder.NewNodeTokenPosition($1, $7) - n.TraitName = &ast.Identifier{ - Position: yylex.(*Parser).builder.NewTokenPosition($2), + traitName := &ast.Identifier{ + Position: yylex.(*Parser).builder.NewTokenPosition($2), IdentifierTkn: $2, Value: $2.Value, } - n.Extends = $3 - n.Implements = $4 - n.OpenCurlyBracketTkn = $5 - n.Stmts = $6 + + n.Position = yylex.(*Parser).builder.NewNodeTokenPosition($1, $7) + n.TraitName = traitName + n.OpenCurlyBracketTkn = $5 + n.Stmts = $6 n.CloseCurlyBracketTkn = $7 + + if $3 != nil { + yylex.(*Parser).errHandlerFunc(errors.NewError("A trait cannot extend a class. Traits can only be composed from other traits with the 'use' keyword", $3.(*ast.StmtClass).Position)) + } + + if $4 != nil { + yylex.(*Parser).errHandlerFunc(errors.NewError("A trait cannot implement an interface", $4.(*ast.StmtClass).Position)) + } } $$ = $1 } | interface_entry T_STRING interface_extends_list '{' class_statement_list '}' { - $$ = &ast.StmtInterface{ + iface := &ast.StmtInterface{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $6), InterfaceTkn: $1, InterfaceName: &ast.Identifier{ @@ -1317,11 +1336,18 @@ unticked_class_declaration_statement: IdentifierTkn: $2, Value: $2.Value, }, - Extends: $3, OpenCurlyBracketTkn: $4, Stmts: $5, CloseCurlyBracketTkn: $6, } + + if $3 != nil { + iface.ExtendsTkn = $3.(*ast.StmtInterface).ExtendsTkn + iface.Extends = $3.(*ast.StmtInterface).Extends + iface.ExtendsSeparatorTkns = $3.(*ast.StmtInterface).ExtendsSeparatorTkns + } + + $$ = iface } ; @@ -1378,10 +1404,10 @@ extends_from: } | T_EXTENDS fully_qualified_class_name { - $$ = &ast.StmtClassExtends{ - Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $2), - ExtendTkn: $1, - ClassName: $2, + $$ = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $2), + ExtendsTkn: $1, + Extends: $2, } } ; @@ -1400,11 +1426,11 @@ interface_extends_list: } | T_EXTENDS interface_list { - $$ = &ast.StmtInterfaceExtends{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), - ExtendsTkn: $1, - InterfaceNames: $2.(*ast.ParserSeparatedList).Items, - SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + $$ = &ast.StmtInterface{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + ExtendsTkn: $1, + Extends: $2.(*ast.ParserSeparatedList).Items, + ExtendsSeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, }; } ; @@ -1416,11 +1442,11 @@ implements_list: } | T_IMPLEMENTS interface_list { - $$ = &ast.StmtClassImplements{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), - ImplementsTkn: $1, - InterfaceNames: $2.(*ast.ParserSeparatedList).Items, - SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + $$ = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + ImplementsTkn: $1, + Implements: $2.(*ast.ParserSeparatedList).Items, + ImplementsSeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, }; } ; diff --git a/internal/php7/parser_test.go b/internal/php7/parser_test.go index d6ddeac..5b63320 100644 --- a/internal/php7/parser_test.go +++ b/internal/php7/parser_test.go @@ -11108,74 +11108,66 @@ func TestStmtClass_ClassExtends(t *testing.T) { }, Value: []byte("foo"), }, - Extends: &ast.StmtClassExtends{ + ExtendsTkn: &token.Token{ + ID: token.T_EXTENDS, + Value: []byte("extends"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 19, - EndPos: 30, + EndPos: 26, }, - ExtendTkn: &token.Token{ - ID: token.T_EXTENDS, - Value: []byte("extends"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 19, - EndPos: 26, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 18, - EndPos: 19, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 18, + EndPos: 19, }, }, }, - ClassName: &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 30, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + Extends: &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 30, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 30, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 27, EndPos: 30, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 30, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 26, - EndPos: 27, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 26, + EndPos: 27, }, }, }, - Value: []byte("bar"), }, + Value: []byte("bar"), }, }, }, @@ -11350,75 +11342,67 @@ func TestStmtClass_ClassImplement(t *testing.T) { }, Value: []byte("foo"), }, - Implements: &ast.StmtClassImplements{ + ImplementsTkn: &token.Token{ + ID: token.T_IMPLEMENTS, + Value: []byte("implements"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 19, - EndPos: 33, + EndPos: 29, }, - ImplementsTkn: &token.Token{ - ID: token.T_IMPLEMENTS, - Value: []byte("implements"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 19, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 18, - EndPos: 19, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 30, - EndPos: 33, + StartPos: 18, + EndPos: 19, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Implements: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("bar"), }, + Value: []byte("bar"), }, }, }, @@ -11594,129 +11578,121 @@ func TestStmtClass_ClassImplements(t *testing.T) { }, Value: []byte("foo"), }, - Implements: &ast.StmtClassImplements{ + ImplementsTkn: &token.Token{ + ID: token.T_IMPLEMENTS, + Value: []byte("implements"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 19, - EndPos: 38, + EndPos: 29, }, - ImplementsTkn: &token.Token{ - ID: token.T_IMPLEMENTS, - Value: []byte("implements"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 19, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 18, - EndPos: 19, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 30, - EndPos: 33, + StartPos: 18, + EndPos: 19, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Implements: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("bar"), }, + Value: []byte("bar"), }, }, - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 35, - EndPos: 38, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 35, + EndPos: 38, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 35, + EndPos: 38, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 35, EndPos: 38, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 35, - EndPos: 38, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 34, - EndPos: 35, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 34, + EndPos: 35, }, }, }, - Value: []byte("baz"), }, + Value: []byte("baz"), }, }, }, - SeparatorTkns: []*token.Token{ - { - ID: token.ID(44), - Value: []byte(","), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 33, - EndPos: 34, - }, + }, + ImplementsSeparatorTkns: []*token.Token{ + { + ID: token.ID(44), + Value: []byte(","), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 34, }, }, }, @@ -11883,58 +11859,115 @@ func TestStmtClass_AnonimousClass(t *testing.T) { EndPos: 14, }, }, - Extends: &ast.StmtClassExtends{ + ExtendsTkn: &token.Token{ + ID: token.T_EXTENDS, + Value: []byte("extends"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 15, - EndPos: 26, + EndPos: 22, }, - ExtendTkn: &token.Token{ - ID: token.T_EXTENDS, - Value: []byte("extends"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 15, - EndPos: 22, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 14, - EndPos: 15, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 14, + EndPos: 15, }, }, }, - ClassName: &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 23, - EndPos: 26, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + Extends: &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 23, + EndPos: 26, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 23, + EndPos: 26, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("foo"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 23, EndPos: 26, }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 22, + EndPos: 23, + }, + }, + }, + }, + Value: []byte("foo"), + }, + }, + }, + ImplementsTkn: &token.Token{ + ID: token.T_IMPLEMENTS, + Value: []byte("implements"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 37, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 26, + EndPos: 27, + }, + }, + }, + }, + Implements: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 38, + EndPos: 41, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 38, + EndPos: 41, + }, StringTkn: &token.Token{ ID: token.T_STRING, - Value: []byte("foo"), + Value: []byte("bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 23, - EndPos: 26, + StartPos: 38, + EndPos: 41, }, FreeFloating: []*token.Token{ { @@ -11943,140 +11976,67 @@ func TestStmtClass_AnonimousClass(t *testing.T) { Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 22, - EndPos: 23, + StartPos: 37, + EndPos: 38, }, }, }, }, - Value: []byte("foo"), + Value: []byte("bar"), }, }, }, - }, - Implements: &ast.StmtClassImplements{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 46, - }, - ImplementsTkn: &token.Token{ - ID: token.T_IMPLEMENTS, - Value: []byte("implements"), + &ast.NameName{ Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 27, - EndPos: 37, + StartPos: 43, + EndPos: 46, }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), + Parts: []ast.Vertex{ + &ast.NameNamePart{ Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 26, - EndPos: 27, + StartPos: 43, + EndPos: 46, }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 38, - EndPos: 41, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 38, - EndPos: 41, - }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 38, - EndPos: 41, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 38, - }, - }, - }, - }, - Value: []byte("bar"), - }, - }, - }, - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 43, - EndPos: 46, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 43, EndPos: 46, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 43, - EndPos: 46, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 42, - EndPos: 43, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 42, + EndPos: 43, }, }, }, - Value: []byte("baz"), }, + Value: []byte("baz"), }, }, }, - SeparatorTkns: []*token.Token{ - { - ID: token.ID(44), - Value: []byte(","), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 41, - EndPos: 42, - }, + }, + ImplementsSeparatorTkns: []*token.Token{ + { + ID: token.ID(44), + Value: []byte(","), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 41, + EndPos: 42, }, }, }, @@ -20762,75 +20722,67 @@ func TestStmtInterface_Extend(t *testing.T) { }, Value: []byte("Foo"), }, - Extends: &ast.StmtInterfaceExtends{ + ExtendsTkn: &token.Token{ + ID: token.T_EXTENDS, + Value: []byte("extends"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 17, - EndPos: 28, + EndPos: 24, }, - ExtendsTkn: &token.Token{ - ID: token.T_EXTENDS, - Value: []byte("extends"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 17, - EndPos: 24, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 16, - EndPos: 17, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 25, - EndPos: 28, + StartPos: 16, + EndPos: 17, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Extends: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 25, EndPos: 28, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 25, - EndPos: 28, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 24, - EndPos: 25, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 24, + EndPos: 25, }, }, }, - Value: []byte("Bar"), }, + Value: []byte("Bar"), }, }, }, @@ -20961,129 +20913,121 @@ func TestStmtInterface_Extends(t *testing.T) { }, Value: []byte("Foo"), }, - Extends: &ast.StmtInterfaceExtends{ + ExtendsTkn: &token.Token{ + ID: token.T_EXTENDS, + Value: []byte("extends"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 17, - EndPos: 33, + EndPos: 24, }, - ExtendsTkn: &token.Token{ - ID: token.T_EXTENDS, - Value: []byte("extends"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 17, - EndPos: 24, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 16, - EndPos: 17, - }, - }, - }, - }, - InterfaceNames: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 25, - EndPos: 28, + StartPos: 16, + EndPos: 17, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Extends: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 25, + EndPos: 28, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 25, EndPos: 28, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 25, - EndPos: 28, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 24, - EndPos: 25, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 24, + EndPos: 25, }, }, }, - Value: []byte("Bar"), }, + Value: []byte("Bar"), }, }, - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("Baz"), }, + Value: []byte("Baz"), }, }, }, - SeparatorTkns: []*token.Token{ - { - ID: token.ID(44), - Value: []byte(","), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, + }, + ExtendsSeparatorTkns: []*token.Token{ + { + ID: token.ID(44), + Value: []byte(","), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 28, + EndPos: 29, }, }, }, diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 97c37c1..2c353f7 100644 --- a/internal/php7/php7.go +++ b/internal/php7/php7.go @@ -339,7 +339,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -// line internal/php7/php7.y:4378 +// line internal/php7/php7.y:4418 // line yacctab:1 var yyExca = [...]int{ @@ -3569,7 +3569,7 @@ yydefault: yyDollar = yyS[yypt-9 : yypt+1] // line internal/php7/php7.y:1205 { - yyVAL.node = &ast.StmtClass{ + class := &ast.StmtClass{ Position: yylex.(*Parser).builder.NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[9].token), Modifiers: yyDollar[1].list, ClassTkn: yyDollar[2].token, @@ -3578,18 +3578,29 @@ yydefault: IdentifierTkn: yyDollar[3].token, Value: yyDollar[3].token.Value, }, - Extends: yyDollar[4].node, - Implements: yyDollar[5].node, OpenCurlyBracketTkn: yyDollar[7].token, Stmts: yyDollar[8].list, CloseCurlyBracketTkn: yyDollar[9].token, } + + if yyDollar[4].node != nil { + class.ExtendsTkn = yyDollar[4].node.(*ast.StmtClass).ExtendsTkn + class.Extends = yyDollar[4].node.(*ast.StmtClass).Extends + } + + if yyDollar[5].node != nil { + class.ImplementsTkn = yyDollar[5].node.(*ast.StmtClass).ImplementsTkn + class.Implements = yyDollar[5].node.(*ast.StmtClass).Implements + class.ImplementsSeparatorTkns = yyDollar[5].node.(*ast.StmtClass).ImplementsSeparatorTkns + } + + yyVAL.node = class } case 171: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php7/php7.y:1223 + // line internal/php7/php7.y:1234 { - yyVAL.node = &ast.StmtClass{ + class := &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[8].token), ClassTkn: yyDollar[1].token, ClassName: &ast.Identifier{ @@ -3597,28 +3608,39 @@ yydefault: IdentifierTkn: yyDollar[2].token, Value: yyDollar[2].token.Value, }, - Extends: yyDollar[3].node, - Implements: yyDollar[4].node, OpenCurlyBracketTkn: yyDollar[6].token, Stmts: yyDollar[7].list, CloseCurlyBracketTkn: yyDollar[8].token, } + + if yyDollar[3].node != nil { + class.ExtendsTkn = yyDollar[3].node.(*ast.StmtClass).ExtendsTkn + class.Extends = yyDollar[3].node.(*ast.StmtClass).Extends + } + + if yyDollar[4].node != nil { + class.ImplementsTkn = yyDollar[4].node.(*ast.StmtClass).ImplementsTkn + class.Implements = yyDollar[4].node.(*ast.StmtClass).Implements + class.ImplementsSeparatorTkns = yyDollar[4].node.(*ast.StmtClass).ImplementsSeparatorTkns + } + + yyVAL.node = class } case 172: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1243 + // line internal/php7/php7.y:1265 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 173: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1247 + // line internal/php7/php7.y:1269 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 174: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1254 + // line internal/php7/php7.y:1276 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -3628,7 +3650,7 @@ yydefault: } case 175: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1262 + // line internal/php7/php7.y:1284 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -3638,7 +3660,7 @@ yydefault: } case 176: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1273 + // line internal/php7/php7.y:1295 { yyVAL.node = &ast.StmtTrait{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), @@ -3655,9 +3677,9 @@ yydefault: } case 177: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:1291 + // line internal/php7/php7.y:1313 { - yyVAL.node = &ast.StmtInterface{ + iface := &ast.StmtInterface{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[7].token), InterfaceTkn: yyDollar[1].token, InterfaceName: &ast.Identifier{ @@ -3665,71 +3687,78 @@ yydefault: IdentifierTkn: yyDollar[2].token, Value: yyDollar[2].token.Value, }, - Extends: yyDollar[3].node, OpenCurlyBracketTkn: yyDollar[5].token, Stmts: yyDollar[6].list, CloseCurlyBracketTkn: yyDollar[7].token, } + + if yyDollar[3].node != nil { + iface.ExtendsTkn = yyDollar[3].node.(*ast.StmtInterface).ExtendsTkn + iface.Extends = yyDollar[3].node.(*ast.StmtInterface).Extends + iface.ExtendsSeparatorTkns = yyDollar[3].node.(*ast.StmtInterface).ExtendsSeparatorTkns + } + + yyVAL.node = iface } case 178: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1310 + // line internal/php7/php7.y:1339 { yyVAL.node = nil } case 179: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1314 + // line internal/php7/php7.y:1343 { - yyVAL.node = &ast.StmtClassExtends{ - Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), - ExtendTkn: yyDollar[1].token, - ClassName: yyDollar[2].node, + yyVAL.node = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), + ExtendsTkn: yyDollar[1].token, + Extends: yyDollar[2].node, } } case 180: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1325 + // line internal/php7/php7.y:1354 { yyVAL.node = nil } case 181: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1329 + // line internal/php7/php7.y:1358 { - yyVAL.node = &ast.StmtInterfaceExtends{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), - ExtendsTkn: yyDollar[1].token, - InterfaceNames: yyDollar[2].node.(*ast.ParserSeparatedList).Items, - SeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, + yyVAL.node = &ast.StmtInterface{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), + ExtendsTkn: yyDollar[1].token, + Extends: yyDollar[2].node.(*ast.ParserSeparatedList).Items, + ExtendsSeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, } } case 182: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1341 + // line internal/php7/php7.y:1370 { yyVAL.node = nil } case 183: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1345 + // line internal/php7/php7.y:1374 { - yyVAL.node = &ast.StmtClassImplements{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), - ImplementsTkn: yyDollar[1].token, - InterfaceNames: yyDollar[2].node.(*ast.ParserSeparatedList).Items, - SeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, + yyVAL.node = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), + ImplementsTkn: yyDollar[1].token, + Implements: yyDollar[2].node.(*ast.ParserSeparatedList).Items, + ImplementsSeparatorTkns: yyDollar[2].node.(*ast.ParserSeparatedList).SeparatorTkns, } } case 184: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1357 + // line internal/php7/php7.y:1386 { yyVAL.node = yyDollar[1].node } case 185: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1361 + // line internal/php7/php7.y:1390 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -3739,7 +3768,7 @@ yydefault: } case 186: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1369 + // line internal/php7/php7.y:1398 { yyVAL.node = &ast.ExprList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3752,7 +3781,7 @@ yydefault: } case 187: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1380 + // line internal/php7/php7.y:1409 { yyVAL.node = &ast.ExprList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3764,7 +3793,7 @@ yydefault: } case 188: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1393 + // line internal/php7/php7.y:1422 { yyVAL.node = &ast.StmtFor{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3773,7 +3802,7 @@ yydefault: } case 189: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1400 + // line internal/php7/php7.y:1429 { yyVAL.node = &ast.StmtFor{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3788,7 +3817,7 @@ yydefault: } case 190: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1416 + // line internal/php7/php7.y:1445 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3797,7 +3826,7 @@ yydefault: } case 191: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1423 + // line internal/php7/php7.y:1452 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3812,7 +3841,7 @@ yydefault: } case 192: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1439 + // line internal/php7/php7.y:1468 { yyVAL.node = &ast.StmtDeclare{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3821,7 +3850,7 @@ yydefault: } case 193: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1446 + // line internal/php7/php7.y:1475 { yyVAL.node = &ast.StmtDeclare{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3836,7 +3865,7 @@ yydefault: } case 194: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1462 + // line internal/php7/php7.y:1491 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3847,7 +3876,7 @@ yydefault: } case 195: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1471 + // line internal/php7/php7.y:1500 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3859,7 +3888,7 @@ yydefault: } case 196: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1481 + // line internal/php7/php7.y:1510 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3871,7 +3900,7 @@ yydefault: } case 197: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1491 + // line internal/php7/php7.y:1520 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[5].token), @@ -3884,13 +3913,13 @@ yydefault: } case 198: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1505 + // line internal/php7/php7.y:1534 { yyVAL.list = nil } case 199: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1509 + // line internal/php7/php7.y:1538 { yyVAL.list = append(yyDollar[1].list, &ast.StmtCase{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[5].list), @@ -3902,7 +3931,7 @@ yydefault: } case 200: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1519 + // line internal/php7/php7.y:1548 { yyVAL.list = append(yyDollar[1].list, &ast.StmtDefault{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list), @@ -3913,19 +3942,19 @@ yydefault: } case 201: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1531 + // line internal/php7/php7.y:1560 { yyVAL.token = yyDollar[1].token } case 202: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1535 + // line internal/php7/php7.y:1564 { yyVAL.token = yyDollar[1].token } case 203: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1542 + // line internal/php7/php7.y:1571 { yyVAL.node = &ast.StmtWhile{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3934,7 +3963,7 @@ yydefault: } case 204: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1549 + // line internal/php7/php7.y:1578 { yyVAL.node = &ast.StmtWhile{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3949,7 +3978,7 @@ yydefault: } case 205: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1565 + // line internal/php7/php7.y:1594 { yyVAL.node = &ast.StmtIf{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node), @@ -3962,7 +3991,7 @@ yydefault: } case 206: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1576 + // line internal/php7/php7.y:1605 { yyDollar[1].node.(*ast.StmtIf).ElseIf = append(yyDollar[1].node.(*ast.StmtIf).ElseIf, &ast.StmtElseIf{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[6].node), @@ -3979,13 +4008,13 @@ yydefault: } case 207: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1594 + // line internal/php7/php7.y:1623 { yyVAL.node = yyDollar[1].node } case 208: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1598 + // line internal/php7/php7.y:1627 { yyDollar[1].node.(*ast.StmtIf).Else = &ast.StmtElse{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[3].node), @@ -3999,7 +4028,7 @@ yydefault: } case 209: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1613 + // line internal/php7/php7.y:1642 { yyVAL.node = &ast.StmtIf{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[6].list), @@ -4016,7 +4045,7 @@ yydefault: } case 210: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:1628 + // line internal/php7/php7.y:1657 { yyDollar[1].node.(*ast.StmtIf).ElseIf = append(yyDollar[1].node.(*ast.StmtIf).ElseIf, &ast.StmtElseIf{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[7].list), @@ -4035,7 +4064,7 @@ yydefault: } case 211: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1648 + // line internal/php7/php7.y:1677 { yyDollar[1].node.(*ast.StmtIf).EndIfTkn = yyDollar[2].token yyDollar[1].node.(*ast.StmtIf).SemiColonTkn = yyDollar[3].token @@ -4045,7 +4074,7 @@ yydefault: } case 212: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1656 + // line internal/php7/php7.y:1685 { yyDollar[1].node.(*ast.StmtIf).Else = &ast.StmtElse{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list), @@ -4064,19 +4093,19 @@ yydefault: } case 213: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1676 + // line internal/php7/php7.y:1705 { yyVAL.node = yyDollar[1].node } case 214: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1680 + // line internal/php7/php7.y:1709 { yyVAL.node = &ast.ParserSeparatedList{} } case 215: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1687 + // line internal/php7/php7.y:1716 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4084,7 +4113,7 @@ yydefault: } case 216: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1693 + // line internal/php7/php7.y:1722 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4093,7 +4122,7 @@ yydefault: } case 217: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1703 + // line internal/php7/php7.y:1732 { pos := yylex.(*Parser).builder.NewTokenPosition(yyDollar[4].token) if yyDollar[1].node != nil { @@ -4121,7 +4150,7 @@ yydefault: } case 218: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1729 + // line internal/php7/php7.y:1758 { pos := yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[4].token, yyDollar[6].node) if yyDollar[1].node != nil { @@ -4151,25 +4180,25 @@ yydefault: } case 219: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1760 + // line internal/php7/php7.y:1789 { yyVAL.node = nil } case 220: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1764 + // line internal/php7/php7.y:1793 { yyVAL.node = yyDollar[1].node } case 221: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1771 + // line internal/php7/php7.y:1800 { yyVAL.node = yyDollar[1].node } case 222: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1775 + // line internal/php7/php7.y:1804 { yyVAL.node = &ast.Nullable{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4179,7 +4208,7 @@ yydefault: } case 223: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1786 + // line internal/php7/php7.y:1815 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4189,7 +4218,7 @@ yydefault: } case 224: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1794 + // line internal/php7/php7.y:1823 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4199,19 +4228,19 @@ yydefault: } case 225: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1802 + // line internal/php7/php7.y:1831 { yyVAL.node = yyDollar[1].node } case 226: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1809 + // line internal/php7/php7.y:1838 { yyVAL.node = &ast.ReturnType{} } case 227: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1813 + // line internal/php7/php7.y:1842 { yyVAL.node = &ast.ReturnType{ ColonTkn: yyDollar[1].token, @@ -4220,7 +4249,7 @@ yydefault: } case 228: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1823 + // line internal/php7/php7.y:1852 { yyVAL.node = &ast.ArgumentList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -4230,7 +4259,7 @@ yydefault: } case 229: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1831 + // line internal/php7/php7.y:1860 { argumentList := yyDollar[2].node.(*ast.ArgumentList) argumentList.Position = yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token) @@ -4244,7 +4273,7 @@ yydefault: } case 230: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1846 + // line internal/php7/php7.y:1875 { yyVAL.node = &ast.ArgumentList{ Arguments: []ast.Vertex{yyDollar[1].node}, @@ -4252,7 +4281,7 @@ yydefault: } case 231: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1852 + // line internal/php7/php7.y:1881 { yyDollar[1].node.(*ast.ArgumentList).SeparatorTkns = append(yyDollar[1].node.(*ast.ArgumentList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ArgumentList).Arguments = append(yyDollar[1].node.(*ast.ArgumentList).Arguments, yyDollar[3].node) @@ -4261,7 +4290,7 @@ yydefault: } case 232: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1862 + // line internal/php7/php7.y:1891 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -4270,7 +4299,7 @@ yydefault: } case 233: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1869 + // line internal/php7/php7.y:1898 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4280,7 +4309,7 @@ yydefault: } case 234: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1880 + // line internal/php7/php7.y:1909 { yyDollar[1].node.(*ast.StmtGlobal).Vars = append(yyDollar[1].node.(*ast.StmtGlobal).Vars, yyDollar[3].node) yyDollar[1].node.(*ast.StmtGlobal).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtGlobal).SeparatorTkns, yyDollar[2].token) @@ -4289,7 +4318,7 @@ yydefault: } case 235: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1887 + // line internal/php7/php7.y:1916 { yyVAL.node = &ast.StmtGlobal{ Vars: []ast.Vertex{yyDollar[1].node}, @@ -4297,13 +4326,13 @@ yydefault: } case 236: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1896 + // line internal/php7/php7.y:1925 { yyVAL.node = yyDollar[1].node } case 237: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1903 + // line internal/php7/php7.y:1932 { yyDollar[1].node.(*ast.StmtStatic).Vars = append(yyDollar[1].node.(*ast.StmtStatic).Vars, yyDollar[3].node) yyDollar[1].node.(*ast.StmtStatic).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtStatic).SeparatorTkns, yyDollar[2].token) @@ -4312,7 +4341,7 @@ yydefault: } case 238: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1910 + // line internal/php7/php7.y:1939 { yyVAL.node = &ast.StmtStatic{ Vars: []ast.Vertex{yyDollar[1].node}, @@ -4320,7 +4349,7 @@ yydefault: } case 239: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1919 + // line internal/php7/php7.y:1948 { yyVAL.node = &ast.StmtStaticVar{ @@ -4337,7 +4366,7 @@ yydefault: } case 240: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1934 + // line internal/php7/php7.y:1963 { yyVAL.node = &ast.StmtStaticVar{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4355,19 +4384,19 @@ yydefault: } case 241: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1953 + // line internal/php7/php7.y:1982 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 242: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1957 + // line internal/php7/php7.y:1986 { yyVAL.list = []ast.Vertex{} } case 243: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1964 + // line internal/php7/php7.y:1993 { yyVAL.node = &ast.StmtPropertyList{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].list, yyDollar[4].token), @@ -4380,7 +4409,7 @@ yydefault: } case 244: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1975 + // line internal/php7/php7.y:2004 { yyVAL.node = &ast.StmtClassConstList{ Position: yylex.(*Parser).builder.NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[4].token), @@ -4393,7 +4422,7 @@ yydefault: } case 245: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1986 + // line internal/php7/php7.y:2015 { traitUse := &ast.StmtTraitUse{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4415,7 +4444,7 @@ yydefault: } case 246: yyDollar = yyS[yypt-10 : yypt+1] - // line internal/php7/php7.y:2006 + // line internal/php7/php7.y:2035 { pos := yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[10].node) if yyDollar[1].list != nil { @@ -4443,7 +4472,7 @@ yydefault: } case 247: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2035 + // line internal/php7/php7.y:2064 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4451,7 +4480,7 @@ yydefault: } case 248: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2041 + // line internal/php7/php7.y:2070 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4460,7 +4489,7 @@ yydefault: } case 249: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2051 + // line internal/php7/php7.y:2080 { yyVAL.node = &ast.StmtNop{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4469,7 +4498,7 @@ yydefault: } case 250: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2058 + // line internal/php7/php7.y:2087 { yyVAL.node = &ast.TraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -4479,7 +4508,7 @@ yydefault: } case 251: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2066 + // line internal/php7/php7.y:2095 { yyVAL.node = &ast.TraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -4490,19 +4519,19 @@ yydefault: } case 252: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2078 + // line internal/php7/php7.y:2107 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 253: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2082 + // line internal/php7/php7.y:2111 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 254: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2089 + // line internal/php7/php7.y:2118 { yyDollar[1].node.(*ast.StmtTraitUsePrecedence).SemiColonTkn = yyDollar[2].token @@ -4510,7 +4539,7 @@ yydefault: } case 255: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2095 + // line internal/php7/php7.y:2124 { yyDollar[1].node.(*ast.StmtTraitUseAlias).SemiColonTkn = yyDollar[2].token @@ -4518,7 +4547,7 @@ yydefault: } case 256: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2104 + // line internal/php7/php7.y:2133 { yyVAL.node = &ast.StmtTraitUsePrecedence{ Position: yylex.(*Parser).builder.NewNodeNodeListPosition(yyDollar[1].node, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -4530,7 +4559,7 @@ yydefault: } case 257: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2117 + // line internal/php7/php7.y:2146 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -4545,7 +4574,7 @@ yydefault: } case 258: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2130 + // line internal/php7/php7.y:2159 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -4560,7 +4589,7 @@ yydefault: } case 259: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2143 + // line internal/php7/php7.y:2172 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -4576,7 +4605,7 @@ yydefault: } case 260: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2157 + // line internal/php7/php7.y:2186 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -4587,7 +4616,7 @@ yydefault: } case 261: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2169 + // line internal/php7/php7.y:2198 { yyVAL.node = &ast.StmtTraitMethodRef{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4600,13 +4629,13 @@ yydefault: } case 262: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2180 + // line internal/php7/php7.y:2209 { yyVAL.node = yyDollar[1].node } case 263: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2187 + // line internal/php7/php7.y:2216 { yyVAL.node = &ast.StmtTraitMethodRef{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -4621,7 +4650,7 @@ yydefault: } case 264: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2203 + // line internal/php7/php7.y:2232 { yyVAL.node = &ast.StmtNop{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4630,7 +4659,7 @@ yydefault: } case 265: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2210 + // line internal/php7/php7.y:2239 { yyVAL.node = &ast.StmtStmtList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -4641,13 +4670,13 @@ yydefault: } case 266: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2222 + // line internal/php7/php7.y:2251 { yyVAL.list = yyDollar[1].list } case 267: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2226 + // line internal/php7/php7.y:2255 { yyVAL.list = []ast.Vertex{ &ast.Identifier{ @@ -4659,31 +4688,31 @@ yydefault: } case 268: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2239 + // line internal/php7/php7.y:2268 { yyVAL.list = nil } case 269: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2243 + // line internal/php7/php7.y:2272 { yyVAL.list = yyDollar[1].list } case 270: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2250 + // line internal/php7/php7.y:2279 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 271: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2254 + // line internal/php7/php7.y:2283 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 272: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2261 + // line internal/php7/php7.y:2290 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4693,7 +4722,7 @@ yydefault: } case 273: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2269 + // line internal/php7/php7.y:2298 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4703,7 +4732,7 @@ yydefault: } case 274: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2277 + // line internal/php7/php7.y:2306 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4713,7 +4742,7 @@ yydefault: } case 275: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2285 + // line internal/php7/php7.y:2314 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4723,7 +4752,7 @@ yydefault: } case 276: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2293 + // line internal/php7/php7.y:2322 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4733,7 +4762,7 @@ yydefault: } case 277: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2301 + // line internal/php7/php7.y:2330 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4743,7 +4772,7 @@ yydefault: } case 278: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2312 + // line internal/php7/php7.y:2341 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4752,7 +4781,7 @@ yydefault: } case 279: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2319 + // line internal/php7/php7.y:2348 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4760,7 +4789,7 @@ yydefault: } case 280: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2328 + // line internal/php7/php7.y:2357 { yyVAL.node = &ast.StmtProperty{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4777,7 +4806,7 @@ yydefault: } case 281: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2343 + // line internal/php7/php7.y:2372 { yyVAL.node = &ast.StmtProperty{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4795,7 +4824,7 @@ yydefault: } case 282: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2362 + // line internal/php7/php7.y:2391 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4804,7 +4833,7 @@ yydefault: } case 283: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2369 + // line internal/php7/php7.y:2398 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4812,7 +4841,7 @@ yydefault: } case 284: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2378 + // line internal/php7/php7.y:2407 { yyVAL.node = &ast.StmtConstant{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4827,7 +4856,7 @@ yydefault: } case 285: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2394 + // line internal/php7/php7.y:2423 { yyVAL.node = &ast.StmtConstant{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4842,7 +4871,7 @@ yydefault: } case 286: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2410 + // line internal/php7/php7.y:2439 { yyDollar[1].node.(*ast.StmtEcho).Exprs = append(yyDollar[1].node.(*ast.StmtEcho).Exprs, yyDollar[3].node) yyDollar[1].node.(*ast.StmtEcho).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtEcho).SeparatorTkns, yyDollar[2].token) @@ -4851,7 +4880,7 @@ yydefault: } case 287: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2417 + // line internal/php7/php7.y:2446 { yyVAL.node = &ast.StmtEcho{ Exprs: []ast.Vertex{yyDollar[1].node}, @@ -4859,25 +4888,25 @@ yydefault: } case 288: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2426 + // line internal/php7/php7.y:2455 { yyVAL.node = yyDollar[1].node } case 289: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2433 + // line internal/php7/php7.y:2462 { yyVAL.node = &ast.ParserSeparatedList{} } case 290: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2437 + // line internal/php7/php7.y:2466 { yyVAL.node = yyDollar[1].node } case 291: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2444 + // line internal/php7/php7.y:2473 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4886,7 +4915,7 @@ yydefault: } case 292: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2451 + // line internal/php7/php7.y:2480 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4894,25 +4923,36 @@ yydefault: } case 293: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php7/php7.y:2460 + // line internal/php7/php7.y:2489 { - yyVAL.node = &ast.StmtClass{ + class := &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[8].token), ClassTkn: yyDollar[1].token, OpenParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[2].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[2].node.(*ast.ArgumentList).SeparatorTkns, CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).CloseParenthesisTkn, - Extends: yyDollar[3].node, - Implements: yyDollar[4].node, OpenCurlyBracketTkn: yyDollar[6].token, Stmts: yyDollar[7].list, CloseCurlyBracketTkn: yyDollar[8].token, } + + if yyDollar[3].node != nil { + class.ExtendsTkn = yyDollar[3].node.(*ast.StmtClass).ExtendsTkn + class.Extends = yyDollar[3].node.(*ast.StmtClass).Extends + } + + if yyDollar[4].node != nil { + class.ImplementsTkn = yyDollar[4].node.(*ast.StmtClass).ImplementsTkn + class.Implements = yyDollar[4].node.(*ast.StmtClass).Implements + class.ImplementsSeparatorTkns = yyDollar[4].node.(*ast.StmtClass).ImplementsSeparatorTkns + } + + yyVAL.node = class } case 294: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2479 + // line internal/php7/php7.y:2519 { if yyDollar[3].node != nil { yyVAL.node = &ast.ExprNew{ @@ -4934,7 +4974,7 @@ yydefault: } case 295: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2499 + // line internal/php7/php7.y:2539 { yyVAL.node = &ast.ExprNew{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4944,7 +4984,7 @@ yydefault: } case 296: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:2510 + // line internal/php7/php7.y:2550 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[6].node), @@ -4962,7 +5002,7 @@ yydefault: } case 297: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:2526 + // line internal/php7/php7.y:2566 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node), @@ -4979,7 +5019,7 @@ yydefault: } case 298: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2541 + // line internal/php7/php7.y:2581 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -4990,7 +5030,7 @@ yydefault: } case 299: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2550 + // line internal/php7/php7.y:2590 { yyVAL.node = &ast.ExprAssignReference{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5002,7 +5042,7 @@ yydefault: } case 300: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2560 + // line internal/php7/php7.y:2600 { yyVAL.node = &ast.ExprClone{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5012,7 +5052,7 @@ yydefault: } case 301: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2568 + // line internal/php7/php7.y:2608 { yyVAL.node = &ast.ExprAssignPlus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5023,7 +5063,7 @@ yydefault: } case 302: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2577 + // line internal/php7/php7.y:2617 { yyVAL.node = &ast.ExprAssignMinus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5034,7 +5074,7 @@ yydefault: } case 303: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2586 + // line internal/php7/php7.y:2626 { yyVAL.node = &ast.ExprAssignMul{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5045,7 +5085,7 @@ yydefault: } case 304: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2595 + // line internal/php7/php7.y:2635 { yyVAL.node = &ast.ExprAssignPow{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5056,7 +5096,7 @@ yydefault: } case 305: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2604 + // line internal/php7/php7.y:2644 { yyVAL.node = &ast.ExprAssignDiv{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5067,7 +5107,7 @@ yydefault: } case 306: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2613 + // line internal/php7/php7.y:2653 { yyVAL.node = &ast.ExprAssignConcat{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5078,7 +5118,7 @@ yydefault: } case 307: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2622 + // line internal/php7/php7.y:2662 { yyVAL.node = &ast.ExprAssignMod{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5089,7 +5129,7 @@ yydefault: } case 308: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2631 + // line internal/php7/php7.y:2671 { yyVAL.node = &ast.ExprAssignBitwiseAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5100,7 +5140,7 @@ yydefault: } case 309: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2640 + // line internal/php7/php7.y:2680 { yyVAL.node = &ast.ExprAssignBitwiseOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5111,7 +5151,7 @@ yydefault: } case 310: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2649 + // line internal/php7/php7.y:2689 { yyVAL.node = &ast.ExprAssignBitwiseXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5122,7 +5162,7 @@ yydefault: } case 311: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2658 + // line internal/php7/php7.y:2698 { yyVAL.node = &ast.ExprAssignShiftLeft{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5133,7 +5173,7 @@ yydefault: } case 312: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2667 + // line internal/php7/php7.y:2707 { yyVAL.node = &ast.ExprAssignShiftRight{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5144,7 +5184,7 @@ yydefault: } case 313: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2676 + // line internal/php7/php7.y:2716 { yyVAL.node = &ast.ExprAssignCoalesce{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5155,7 +5195,7 @@ yydefault: } case 314: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2685 + // line internal/php7/php7.y:2725 { yyVAL.node = &ast.ExprPostInc{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -5165,7 +5205,7 @@ yydefault: } case 315: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2693 + // line internal/php7/php7.y:2733 { yyVAL.node = &ast.ExprPreInc{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5175,7 +5215,7 @@ yydefault: } case 316: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2701 + // line internal/php7/php7.y:2741 { yyVAL.node = &ast.ExprPostDec{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -5185,7 +5225,7 @@ yydefault: } case 317: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2709 + // line internal/php7/php7.y:2749 { yyVAL.node = &ast.ExprPreDec{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5195,7 +5235,7 @@ yydefault: } case 318: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2717 + // line internal/php7/php7.y:2757 { yyVAL.node = &ast.ExprBinaryBooleanOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5206,7 +5246,7 @@ yydefault: } case 319: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2726 + // line internal/php7/php7.y:2766 { yyVAL.node = &ast.ExprBinaryBooleanAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5217,7 +5257,7 @@ yydefault: } case 320: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2735 + // line internal/php7/php7.y:2775 { yyVAL.node = &ast.ExprBinaryLogicalOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5228,7 +5268,7 @@ yydefault: } case 321: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2744 + // line internal/php7/php7.y:2784 { yyVAL.node = &ast.ExprBinaryLogicalAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5239,7 +5279,7 @@ yydefault: } case 322: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2753 + // line internal/php7/php7.y:2793 { yyVAL.node = &ast.ExprBinaryLogicalXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5250,7 +5290,7 @@ yydefault: } case 323: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2762 + // line internal/php7/php7.y:2802 { yyVAL.node = &ast.ExprBinaryBitwiseOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5261,7 +5301,7 @@ yydefault: } case 324: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2771 + // line internal/php7/php7.y:2811 { yyVAL.node = &ast.ExprBinaryBitwiseAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5272,7 +5312,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2780 + // line internal/php7/php7.y:2820 { yyVAL.node = &ast.ExprBinaryBitwiseXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5283,7 +5323,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2789 + // line internal/php7/php7.y:2829 { yyVAL.node = &ast.ExprBinaryConcat{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5294,7 +5334,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2798 + // line internal/php7/php7.y:2838 { yyVAL.node = &ast.ExprBinaryPlus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5305,7 +5345,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2807 + // line internal/php7/php7.y:2847 { yyVAL.node = &ast.ExprBinaryMinus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5316,7 +5356,7 @@ yydefault: } case 329: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2816 + // line internal/php7/php7.y:2856 { yyVAL.node = &ast.ExprBinaryMul{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5327,7 +5367,7 @@ yydefault: } case 330: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2825 + // line internal/php7/php7.y:2865 { yyVAL.node = &ast.ExprBinaryPow{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5338,7 +5378,7 @@ yydefault: } case 331: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2834 + // line internal/php7/php7.y:2874 { yyVAL.node = &ast.ExprBinaryDiv{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5349,7 +5389,7 @@ yydefault: } case 332: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2843 + // line internal/php7/php7.y:2883 { yyVAL.node = &ast.ExprBinaryMod{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5360,7 +5400,7 @@ yydefault: } case 333: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2852 + // line internal/php7/php7.y:2892 { yyVAL.node = &ast.ExprBinaryShiftLeft{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5371,7 +5411,7 @@ yydefault: } case 334: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2861 + // line internal/php7/php7.y:2901 { yyVAL.node = &ast.ExprBinaryShiftRight{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5382,7 +5422,7 @@ yydefault: } case 335: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2870 + // line internal/php7/php7.y:2910 { yyVAL.node = &ast.ExprUnaryPlus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5392,7 +5432,7 @@ yydefault: } case 336: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2878 + // line internal/php7/php7.y:2918 { yyVAL.node = &ast.ExprUnaryMinus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5402,7 +5442,7 @@ yydefault: } case 337: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2886 + // line internal/php7/php7.y:2926 { yyVAL.node = &ast.ExprBooleanNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5412,7 +5452,7 @@ yydefault: } case 338: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2894 + // line internal/php7/php7.y:2934 { yyVAL.node = &ast.ExprBitwiseNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5422,7 +5462,7 @@ yydefault: } case 339: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2902 + // line internal/php7/php7.y:2942 { yyVAL.node = &ast.ExprBinaryIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5433,7 +5473,7 @@ yydefault: } case 340: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2911 + // line internal/php7/php7.y:2951 { yyVAL.node = &ast.ExprBinaryNotIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5444,7 +5484,7 @@ yydefault: } case 341: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2920 + // line internal/php7/php7.y:2960 { yyVAL.node = &ast.ExprBinaryEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5455,7 +5495,7 @@ yydefault: } case 342: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2929 + // line internal/php7/php7.y:2969 { yyVAL.node = &ast.ExprBinaryNotEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5466,7 +5506,7 @@ yydefault: } case 343: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2938 + // line internal/php7/php7.y:2978 { yyVAL.node = &ast.ExprBinarySmaller{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5477,7 +5517,7 @@ yydefault: } case 344: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2947 + // line internal/php7/php7.y:2987 { yyVAL.node = &ast.ExprBinarySmallerOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5488,7 +5528,7 @@ yydefault: } case 345: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2956 + // line internal/php7/php7.y:2996 { yyVAL.node = &ast.ExprBinaryGreater{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5499,7 +5539,7 @@ yydefault: } case 346: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2965 + // line internal/php7/php7.y:3005 { yyVAL.node = &ast.ExprBinaryGreaterOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5510,7 +5550,7 @@ yydefault: } case 347: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2974 + // line internal/php7/php7.y:3014 { yyVAL.node = &ast.ExprBinarySpaceship{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5521,7 +5561,7 @@ yydefault: } case 348: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2983 + // line internal/php7/php7.y:3023 { yyVAL.node = &ast.ExprInstanceOf{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5532,7 +5572,7 @@ yydefault: } case 349: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2992 + // line internal/php7/php7.y:3032 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5543,13 +5583,13 @@ yydefault: } case 350: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3001 + // line internal/php7/php7.y:3041 { yyVAL.node = yyDollar[1].node } case 351: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:3005 + // line internal/php7/php7.y:3045 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[5].node), @@ -5562,7 +5602,7 @@ yydefault: } case 352: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3016 + // line internal/php7/php7.y:3056 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5574,7 +5614,7 @@ yydefault: } case 353: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3026 + // line internal/php7/php7.y:3066 { yyVAL.node = &ast.ExprBinaryCoalesce{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5585,13 +5625,13 @@ yydefault: } case 354: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3035 + // line internal/php7/php7.y:3075 { yyVAL.node = yyDollar[1].node } case 355: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3039 + // line internal/php7/php7.y:3079 { yyVAL.node = &ast.ExprCastInt{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5601,7 +5641,7 @@ yydefault: } case 356: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3047 + // line internal/php7/php7.y:3087 { yyVAL.node = &ast.ExprCastDouble{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5611,7 +5651,7 @@ yydefault: } case 357: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3055 + // line internal/php7/php7.y:3095 { yyVAL.node = &ast.ExprCastString{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5621,7 +5661,7 @@ yydefault: } case 358: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3063 + // line internal/php7/php7.y:3103 { yyVAL.node = &ast.ExprCastArray{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5631,7 +5671,7 @@ yydefault: } case 359: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3071 + // line internal/php7/php7.y:3111 { yyVAL.node = &ast.ExprCastObject{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5641,7 +5681,7 @@ yydefault: } case 360: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3079 + // line internal/php7/php7.y:3119 { yyVAL.node = &ast.ExprCastBool{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5651,7 +5691,7 @@ yydefault: } case 361: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3087 + // line internal/php7/php7.y:3127 { yyVAL.node = &ast.ExprCastUnset{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5661,7 +5701,7 @@ yydefault: } case 362: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3095 + // line internal/php7/php7.y:3135 { exit := &ast.ExprExit{ ExitTkn: yyDollar[1].token, @@ -5680,7 +5720,7 @@ yydefault: } case 363: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3112 + // line internal/php7/php7.y:3152 { yyVAL.node = &ast.ExprErrorSuppress{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5690,13 +5730,13 @@ yydefault: } case 364: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3120 + // line internal/php7/php7.y:3160 { yyVAL.node = yyDollar[1].node } case 365: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3124 + // line internal/php7/php7.y:3164 { yyVAL.node = &ast.ExprShellExec{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5707,7 +5747,7 @@ yydefault: } case 366: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3133 + // line internal/php7/php7.y:3173 { yyVAL.node = &ast.ExprPrint{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5717,7 +5757,7 @@ yydefault: } case 367: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3141 + // line internal/php7/php7.y:3181 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -5726,7 +5766,7 @@ yydefault: } case 368: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3148 + // line internal/php7/php7.y:3188 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5736,7 +5776,7 @@ yydefault: } case 369: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3156 + // line internal/php7/php7.y:3196 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node), @@ -5748,7 +5788,7 @@ yydefault: } case 370: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3166 + // line internal/php7/php7.y:3206 { yyVAL.node = &ast.ExprYieldFrom{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5758,13 +5798,13 @@ yydefault: } case 371: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3174 + // line internal/php7/php7.y:3214 { yyVAL.node = yyDollar[1].node } case 372: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3178 + // line internal/php7/php7.y:3218 { switch n := yyDollar[2].node.(type) { case *ast.ExprClosure: @@ -5779,7 +5819,7 @@ yydefault: } case 373: yyDollar = yyS[yypt-11 : yypt+1] - // line internal/php7/php7.y:3194 + // line internal/php7/php7.y:3234 { closure := yyDollar[7].node.(*ast.ExprClosure) @@ -5800,7 +5840,7 @@ yydefault: } case 374: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:3213 + // line internal/php7/php7.y:3253 { yyVAL.node = &ast.ExprArrowFunction{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[9].node), @@ -5818,25 +5858,25 @@ yydefault: } case 376: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3236 + // line internal/php7/php7.y:3276 { yyVAL.token = nil } case 377: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3240 + // line internal/php7/php7.y:3280 { yyVAL.token = yyDollar[1].token } case 378: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3247 + // line internal/php7/php7.y:3287 { yyVAL.node = &ast.ExprClosure{} } case 379: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3251 + // line internal/php7/php7.y:3291 { yyVAL.node = &ast.ExprClosure{ UseTkn: yyDollar[1].token, @@ -5848,7 +5888,7 @@ yydefault: } case 380: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3264 + // line internal/php7/php7.y:3304 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -5857,7 +5897,7 @@ yydefault: } case 381: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3271 + // line internal/php7/php7.y:3311 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -5865,7 +5905,7 @@ yydefault: } case 382: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3280 + // line internal/php7/php7.y:3320 { yyVAL.node = &ast.ExprClosureUse{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -5881,7 +5921,7 @@ yydefault: } case 383: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3294 + // line internal/php7/php7.y:3334 { yyVAL.node = &ast.ExprClosureUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -5898,7 +5938,7 @@ yydefault: } case 384: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3312 + // line internal/php7/php7.y:3352 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node), @@ -5911,7 +5951,7 @@ yydefault: } case 385: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3323 + // line internal/php7/php7.y:3363 { staticCall := &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5934,7 +5974,7 @@ yydefault: } case 386: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3344 + // line internal/php7/php7.y:3384 { staticCall := &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5957,7 +5997,7 @@ yydefault: } case 387: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3365 + // line internal/php7/php7.y:3405 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node), @@ -5970,7 +6010,7 @@ yydefault: } case 388: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3379 + // line internal/php7/php7.y:3419 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -5980,31 +6020,31 @@ yydefault: } case 389: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3387 + // line internal/php7/php7.y:3427 { yyVAL.node = yyDollar[1].node } case 390: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3394 + // line internal/php7/php7.y:3434 { yyVAL.node = yyDollar[1].node } case 391: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3398 + // line internal/php7/php7.y:3438 { yyVAL.node = yyDollar[1].node } case 392: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3405 + // line internal/php7/php7.y:3445 { yyVAL.node = nil } case 393: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3409 + // line internal/php7/php7.y:3449 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6015,13 +6055,13 @@ yydefault: } case 394: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3421 + // line internal/php7/php7.y:3461 { yyVAL.list = []ast.Vertex{} } case 395: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3425 + // line internal/php7/php7.y:3465 { yyVAL.list = []ast.Vertex{ &ast.ScalarEncapsedStringPart{ @@ -6033,25 +6073,25 @@ yydefault: } case 396: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3435 + // line internal/php7/php7.y:3475 { yyVAL.list = yyDollar[1].list } case 397: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3442 + // line internal/php7/php7.y:3482 { yyVAL.node = &ast.ArgumentList{} } case 398: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3446 + // line internal/php7/php7.y:3486 { yyVAL.node = yyDollar[1].node } case 399: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3453 + // line internal/php7/php7.y:3493 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6064,7 +6104,7 @@ yydefault: } case 400: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3464 + // line internal/php7/php7.y:3504 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6076,7 +6116,7 @@ yydefault: } case 401: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3474 + // line internal/php7/php7.y:3514 { yyVAL.node = &ast.ScalarString{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6086,7 +6126,7 @@ yydefault: } case 402: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3485 + // line internal/php7/php7.y:3525 { yyVAL.node = &ast.ScalarLnumber{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6096,7 +6136,7 @@ yydefault: } case 403: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3493 + // line internal/php7/php7.y:3533 { yyVAL.node = &ast.ScalarDnumber{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6106,7 +6146,7 @@ yydefault: } case 404: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3501 + // line internal/php7/php7.y:3541 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6116,7 +6156,7 @@ yydefault: } case 405: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3509 + // line internal/php7/php7.y:3549 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6126,7 +6166,7 @@ yydefault: } case 406: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3517 + // line internal/php7/php7.y:3557 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6136,7 +6176,7 @@ yydefault: } case 407: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3525 + // line internal/php7/php7.y:3565 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6146,7 +6186,7 @@ yydefault: } case 408: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3533 + // line internal/php7/php7.y:3573 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6156,7 +6196,7 @@ yydefault: } case 409: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3541 + // line internal/php7/php7.y:3581 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6166,7 +6206,7 @@ yydefault: } case 410: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3549 + // line internal/php7/php7.y:3589 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6176,7 +6216,7 @@ yydefault: } case 411: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3557 + // line internal/php7/php7.y:3597 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6186,7 +6226,7 @@ yydefault: } case 412: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3565 + // line internal/php7/php7.y:3605 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6203,7 +6243,7 @@ yydefault: } case 413: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3580 + // line internal/php7/php7.y:3620 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -6213,7 +6253,7 @@ yydefault: } case 414: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3588 + // line internal/php7/php7.y:3628 { yyVAL.node = &ast.ScalarEncapsed{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6224,7 +6264,7 @@ yydefault: } case 415: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3597 + // line internal/php7/php7.y:3637 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6235,19 +6275,19 @@ yydefault: } case 416: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3606 + // line internal/php7/php7.y:3646 { yyVAL.node = yyDollar[1].node } case 417: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3610 + // line internal/php7/php7.y:3650 { yyVAL.node = yyDollar[1].node } case 418: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3617 + // line internal/php7/php7.y:3657 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -6256,7 +6296,7 @@ yydefault: } case 419: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3624 + // line internal/php7/php7.y:3664 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -6271,7 +6311,7 @@ yydefault: } case 420: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3637 + // line internal/php7/php7.y:3677 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -6286,43 +6326,43 @@ yydefault: } case 421: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3653 + // line internal/php7/php7.y:3693 { yyVAL.node = yyDollar[1].node } case 422: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3657 + // line internal/php7/php7.y:3697 { yyVAL.node = yyDollar[1].node } case 423: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3664 + // line internal/php7/php7.y:3704 { yyVAL.node = nil } case 424: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3668 + // line internal/php7/php7.y:3708 { yyVAL.node = yyDollar[1].node } case 425: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3675 + // line internal/php7/php7.y:3715 { yyVAL.node = yyDollar[1].node } case 426: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3682 + // line internal/php7/php7.y:3722 { yyVAL.node = yyDollar[1].node } case 427: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3686 + // line internal/php7/php7.y:3726 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6333,19 +6373,19 @@ yydefault: } case 428: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3695 + // line internal/php7/php7.y:3735 { yyVAL.node = yyDollar[1].node } case 429: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3702 + // line internal/php7/php7.y:3742 { yyVAL.node = yyDollar[1].node } case 430: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3706 + // line internal/php7/php7.y:3746 { yyVAL.node = &ast.ExprBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6356,19 +6396,19 @@ yydefault: } case 431: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3715 + // line internal/php7/php7.y:3755 { yyVAL.node = yyDollar[1].node } case 432: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3722 + // line internal/php7/php7.y:3762 { yyVAL.node = yyDollar[1].node } case 433: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3726 + // line internal/php7/php7.y:3766 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -6380,7 +6420,7 @@ yydefault: } case 434: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3736 + // line internal/php7/php7.y:3776 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -6392,7 +6432,7 @@ yydefault: } case 435: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3746 + // line internal/php7/php7.y:3786 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -6404,7 +6444,7 @@ yydefault: } case 436: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3756 + // line internal/php7/php7.y:3796 { methodCall := &ast.ExprMethodCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6427,25 +6467,25 @@ yydefault: } case 437: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3777 + // line internal/php7/php7.y:3817 { yyVAL.node = yyDollar[1].node } case 438: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3784 + // line internal/php7/php7.y:3824 { yyVAL.node = yyDollar[1].node } case 439: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3788 + // line internal/php7/php7.y:3828 { yyVAL.node = yyDollar[1].node } case 440: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3792 + // line internal/php7/php7.y:3832 { propertyFetch := &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6464,7 +6504,7 @@ yydefault: } case 441: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3812 + // line internal/php7/php7.y:3852 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6477,7 +6517,7 @@ yydefault: } case 442: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3823 + // line internal/php7/php7.y:3863 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6489,7 +6529,7 @@ yydefault: } case 443: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3833 + // line internal/php7/php7.y:3873 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6499,7 +6539,7 @@ yydefault: } case 444: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3844 + // line internal/php7/php7.y:3884 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6510,7 +6550,7 @@ yydefault: } case 445: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3853 + // line internal/php7/php7.y:3893 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6521,13 +6561,13 @@ yydefault: } case 446: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3865 + // line internal/php7/php7.y:3905 { yyVAL.node = yyDollar[1].node } case 447: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3869 + // line internal/php7/php7.y:3909 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -6539,7 +6579,7 @@ yydefault: } case 448: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3879 + // line internal/php7/php7.y:3919 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -6551,7 +6591,7 @@ yydefault: } case 449: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3889 + // line internal/php7/php7.y:3929 { propertyFetch := &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6570,7 +6610,7 @@ yydefault: } case 450: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3906 + // line internal/php7/php7.y:3946 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6581,7 +6621,7 @@ yydefault: } case 451: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3915 + // line internal/php7/php7.y:3955 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6592,7 +6632,7 @@ yydefault: } case 452: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3927 + // line internal/php7/php7.y:3967 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6602,7 +6642,7 @@ yydefault: } case 453: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3935 + // line internal/php7/php7.y:3975 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6613,13 +6653,13 @@ yydefault: } case 454: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3944 + // line internal/php7/php7.y:3984 { yyVAL.node = yyDollar[1].node } case 455: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3951 + // line internal/php7/php7.y:3991 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6629,7 +6669,7 @@ yydefault: } case 456: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3959 + // line internal/php7/php7.y:3999 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6640,13 +6680,13 @@ yydefault: } case 457: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3968 + // line internal/php7/php7.y:4008 { yyVAL.node = yyDollar[1].node } case 458: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3975 + // line internal/php7/php7.y:4015 { pairList := yyDollar[1].node.(*ast.ParserSeparatedList) fistPair := pairList.Items[0].(*ast.ExprArrayItem) @@ -6659,19 +6699,19 @@ yydefault: } case 459: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3989 + // line internal/php7/php7.y:4029 { yyVAL.node = &ast.ExprArrayItem{} } case 460: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3993 + // line internal/php7/php7.y:4033 { yyVAL.node = yyDollar[1].node } case 461: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4000 + // line internal/php7/php7.y:4040 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -6680,7 +6720,7 @@ yydefault: } case 462: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4007 + // line internal/php7/php7.y:4047 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -6688,7 +6728,7 @@ yydefault: } case 463: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4016 + // line internal/php7/php7.y:4056 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6699,7 +6739,7 @@ yydefault: } case 464: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4025 + // line internal/php7/php7.y:4065 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -6708,7 +6748,7 @@ yydefault: } case 465: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4032 + // line internal/php7/php7.y:4072 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6720,7 +6760,7 @@ yydefault: } case 466: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4042 + // line internal/php7/php7.y:4082 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6730,7 +6770,7 @@ yydefault: } case 467: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4050 + // line internal/php7/php7.y:4090 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6740,7 +6780,7 @@ yydefault: } case 468: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:4058 + // line internal/php7/php7.y:4098 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token), @@ -6758,7 +6798,7 @@ yydefault: } case 469: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4074 + // line internal/php7/php7.y:4114 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6774,13 +6814,13 @@ yydefault: } case 470: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4091 + // line internal/php7/php7.y:4131 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 471: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4095 + // line internal/php7/php7.y:4135 { yyVAL.list = append( yyDollar[1].list, @@ -6793,13 +6833,13 @@ yydefault: } case 472: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4106 + // line internal/php7/php7.y:4146 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 473: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4110 + // line internal/php7/php7.y:4150 { yyVAL.list = []ast.Vertex{ &ast.ScalarEncapsedStringPart{ @@ -6812,7 +6852,7 @@ yydefault: } case 474: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4124 + // line internal/php7/php7.y:4164 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6825,7 +6865,7 @@ yydefault: } case 475: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4135 + // line internal/php7/php7.y:4175 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6844,7 +6884,7 @@ yydefault: } case 476: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4152 + // line internal/php7/php7.y:4192 { yyVAL.node = &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6866,7 +6906,7 @@ yydefault: } case 477: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4172 + // line internal/php7/php7.y:4212 { yyVAL.node = &ast.ScalarEncapsedStringVar{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6877,7 +6917,7 @@ yydefault: } case 478: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4181 + // line internal/php7/php7.y:4221 { yyVAL.node = &ast.ScalarEncapsedStringVar{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6892,7 +6932,7 @@ yydefault: } case 479: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:4194 + // line internal/php7/php7.y:4234 { yyVAL.node = &ast.ScalarEncapsedStringVar{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6910,7 +6950,7 @@ yydefault: } case 480: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4210 + // line internal/php7/php7.y:4250 { yyVAL.node = &ast.ScalarEncapsedStringBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6921,7 +6961,7 @@ yydefault: } case 481: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4222 + // line internal/php7/php7.y:4262 { yyVAL.node = &ast.ScalarString{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6931,7 +6971,7 @@ yydefault: } case 482: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4230 + // line internal/php7/php7.y:4270 { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { @@ -6950,7 +6990,7 @@ yydefault: } case 483: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4247 + // line internal/php7/php7.y:4287 { _, err := strconv.Atoi(string(yyDollar[2].token.Value)) isInt := err == nil @@ -6976,7 +7016,7 @@ yydefault: } case 484: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4271 + // line internal/php7/php7.y:4311 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6989,7 +7029,7 @@ yydefault: } case 485: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:4285 + // line internal/php7/php7.y:4325 { if yyDollar[4].token != nil { yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token) @@ -7006,7 +7046,7 @@ yydefault: } case 486: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4300 + // line internal/php7/php7.y:4340 { yyVAL.node = &ast.ExprEmpty{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -7018,7 +7058,7 @@ yydefault: } case 487: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4310 + // line internal/php7/php7.y:4350 { yyVAL.node = &ast.ExprInclude{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -7028,7 +7068,7 @@ yydefault: } case 488: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4318 + // line internal/php7/php7.y:4358 { yyVAL.node = &ast.ExprIncludeOnce{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -7038,7 +7078,7 @@ yydefault: } case 489: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4326 + // line internal/php7/php7.y:4366 { yyVAL.node = &ast.ExprEval{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -7050,7 +7090,7 @@ yydefault: } case 490: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4336 + // line internal/php7/php7.y:4376 { yyVAL.node = &ast.ExprRequire{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -7060,7 +7100,7 @@ yydefault: } case 491: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4344 + // line internal/php7/php7.y:4384 { yyVAL.node = &ast.ExprRequireOnce{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -7070,7 +7110,7 @@ yydefault: } case 492: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4355 + // line internal/php7/php7.y:4395 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -7078,7 +7118,7 @@ yydefault: } case 493: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4361 + // line internal/php7/php7.y:4401 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -7087,7 +7127,7 @@ yydefault: } case 494: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4371 + // line internal/php7/php7.y:4411 { yyVAL.node = yyDollar[1].node } diff --git a/internal/php7/php7.y b/internal/php7/php7.y index ec98771..117b1f8 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -1203,7 +1203,7 @@ is_variadic: class_declaration_statement: class_modifiers T_CLASS T_STRING extends_from implements_list backup_doc_comment '{' class_statement_list '}' { - $$ = &ast.StmtClass{ + class := &ast.StmtClass{ Position: yylex.(*Parser).builder.NewOptionalListTokensPosition($1, $2, $9), Modifiers: $1, ClassTkn: $2, @@ -1212,16 +1212,27 @@ class_declaration_statement: IdentifierTkn: $3, Value: $3.Value, }, - Extends: $4, - Implements: $5, OpenCurlyBracketTkn: $7, Stmts: $8, CloseCurlyBracketTkn: $9, } + + if $4 != nil { + class.ExtendsTkn = $4.(*ast.StmtClass).ExtendsTkn + class.Extends = $4.(*ast.StmtClass).Extends + } + + if $5 != nil { + class.ImplementsTkn = $5.(*ast.StmtClass).ImplementsTkn + class.Implements = $5.(*ast.StmtClass).Implements + class.ImplementsSeparatorTkns = $5.(*ast.StmtClass).ImplementsSeparatorTkns + } + + $$ = class } | T_CLASS T_STRING extends_from implements_list backup_doc_comment '{' class_statement_list '}' { - $$ = &ast.StmtClass{ + class := &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $8), ClassTkn: $1, ClassName: &ast.Identifier{ @@ -1229,12 +1240,23 @@ class_declaration_statement: IdentifierTkn: $2, Value: $2.Value, }, - Extends: $3, - Implements: $4, OpenCurlyBracketTkn: $6, Stmts: $7, CloseCurlyBracketTkn: $8, } + + if $3 != nil { + class.ExtendsTkn = $3.(*ast.StmtClass).ExtendsTkn + class.Extends = $3.(*ast.StmtClass).Extends + } + + if $4 != nil { + class.ImplementsTkn = $4.(*ast.StmtClass).ImplementsTkn + class.Implements = $4.(*ast.StmtClass).Implements + class.ImplementsSeparatorTkns = $4.(*ast.StmtClass).ImplementsSeparatorTkns + } + + $$ = class } ; @@ -1289,7 +1311,7 @@ trait_declaration_statement: interface_declaration_statement: T_INTERFACE T_STRING interface_extends_list backup_doc_comment '{' class_statement_list '}' { - $$ = &ast.StmtInterface{ + iface := &ast.StmtInterface{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $7), InterfaceTkn: $1, InterfaceName: &ast.Identifier{ @@ -1297,11 +1319,18 @@ interface_declaration_statement: IdentifierTkn: $2, Value: $2.Value, }, - Extends: $3, OpenCurlyBracketTkn: $5, Stmts: $6, CloseCurlyBracketTkn: $7, } + + if $3 != nil { + iface.ExtendsTkn = $3.(*ast.StmtInterface).ExtendsTkn + iface.Extends = $3.(*ast.StmtInterface).Extends + iface.ExtendsSeparatorTkns = $3.(*ast.StmtInterface).ExtendsSeparatorTkns + } + + $$ = iface } ; @@ -1312,10 +1341,10 @@ extends_from: } | T_EXTENDS name { - $$ = &ast.StmtClassExtends{ - Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $2), - ExtendTkn: $1, - ClassName: $2, + $$ = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $2), + ExtendsTkn: $1, + Extends: $2, } } ; @@ -1327,11 +1356,11 @@ interface_extends_list: } | T_EXTENDS name_list { - $$ = &ast.StmtInterfaceExtends{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), - ExtendsTkn: $1, - InterfaceNames: $2.(*ast.ParserSeparatedList).Items, - SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + $$ = &ast.StmtInterface{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + ExtendsTkn: $1, + Extends: $2.(*ast.ParserSeparatedList).Items, + ExtendsSeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, }; } ; @@ -1343,11 +1372,11 @@ implements_list: } | T_IMPLEMENTS name_list { - $$ = &ast.StmtClassImplements{ - Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), - ImplementsTkn: $1, - InterfaceNames: $2.(*ast.ParserSeparatedList).Items, - SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + $$ = &ast.StmtClass{ + Position: yylex.(*Parser).builder.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + ImplementsTkn: $1, + Implements: $2.(*ast.ParserSeparatedList).Items, + ImplementsSeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, }; } ; @@ -2458,19 +2487,30 @@ non_empty_for_exprs: anonymous_class: T_CLASS ctor_arguments extends_from implements_list backup_doc_comment '{' class_statement_list '}' { - $$ = &ast.StmtClass{ + class := &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $8), ClassTkn: $1, OpenParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $2.(*ast.ArgumentList).Arguments, SeparatorTkns: $2.(*ast.ArgumentList).SeparatorTkns, CloseParenthesisTkn: $2.(*ast.ArgumentList).CloseParenthesisTkn, - Extends: $3, - Implements: $4, OpenCurlyBracketTkn: $6, Stmts: $7, CloseCurlyBracketTkn: $8, } + + if $3 != nil { + class.ExtendsTkn = $3.(*ast.StmtClass).ExtendsTkn + class.Extends = $3.(*ast.StmtClass).Extends + } + + if $4 != nil { + class.ImplementsTkn = $4.(*ast.StmtClass).ImplementsTkn + class.Implements = $4.(*ast.StmtClass).Implements + class.ImplementsSeparatorTkns = $4.(*ast.StmtClass).ImplementsSeparatorTkns + } + + $$ = class } ; diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index 508cca0..d8fb966 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -31,8 +31,6 @@ type NodeVisitor interface { StmtCatch(n *StmtCatch) StmtClass(n *StmtClass) StmtClassConstList(n *StmtClassConstList) - StmtClassExtends(n *StmtClassExtends) - StmtClassImplements(n *StmtClassImplements) StmtClassMethod(n *StmtClassMethod) StmtConstList(n *StmtConstList) StmtConstant(n *StmtConstant) @@ -54,7 +52,6 @@ type NodeVisitor interface { StmtIf(n *StmtIf) StmtInlineHtml(n *StmtInlineHtml) StmtInterface(n *StmtInterface) - StmtInterfaceExtends(n *StmtInterfaceExtends) StmtLabel(n *StmtLabel) StmtNamespace(n *StmtNamespace) StmtNop(n *StmtNop) diff --git a/pkg/ast/node.go b/pkg/ast/node.go index d523b27..98889da 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -285,19 +285,22 @@ func (n *StmtCatch) GetPosition() *position.Position { // StmtClass node type StmtClass struct { - Position *position.Position - Modifiers []Vertex - ClassTkn *token.Token - ClassName Vertex - OpenParenthesisTkn *token.Token - Arguments []Vertex - SeparatorTkns []*token.Token - CloseParenthesisTkn *token.Token - Extends Vertex - Implements Vertex - OpenCurlyBracketTkn *token.Token - Stmts []Vertex - CloseCurlyBracketTkn *token.Token + Position *position.Position + Modifiers []Vertex + ClassTkn *token.Token + ClassName Vertex + OpenParenthesisTkn *token.Token + Arguments []Vertex + SeparatorTkns []*token.Token + CloseParenthesisTkn *token.Token + ExtendsTkn *token.Token + Extends Vertex + ImplementsTkn *token.Token + Implements []Vertex + ImplementsSeparatorTkns []*token.Token + OpenCurlyBracketTkn *token.Token + Stmts []Vertex + CloseCurlyBracketTkn *token.Token } func (n *StmtClass) Accept(v NodeVisitor) { @@ -326,37 +329,6 @@ func (n *StmtClassConstList) GetPosition() *position.Position { return n.Position } -// StmtClassExtends node -type StmtClassExtends struct { - Position *position.Position - ExtendTkn *token.Token - ClassName Vertex -} - -func (n *StmtClassExtends) Accept(v NodeVisitor) { - v.StmtClassExtends(n) -} - -func (n *StmtClassExtends) GetPosition() *position.Position { - return n.Position -} - -// StmtClassImplements node -type StmtClassImplements struct { - Position *position.Position - ImplementsTkn *token.Token - InterfaceNames []Vertex - SeparatorTkns []*token.Token -} - -func (n *StmtClassImplements) Accept(v NodeVisitor) { - v.StmtClassImplements(n) -} - -func (n *StmtClassImplements) GetPosition() *position.Position { - return n.Position -} - // StmtClassMethod node type StmtClassMethod struct { Position *position.Position @@ -744,7 +716,9 @@ type StmtInterface struct { Position *position.Position InterfaceTkn *token.Token InterfaceName Vertex - Extends Vertex + ExtendsTkn *token.Token + Extends []Vertex + ExtendsSeparatorTkns []*token.Token OpenCurlyBracketTkn *token.Token Stmts []Vertex CloseCurlyBracketTkn *token.Token @@ -758,22 +732,6 @@ func (n *StmtInterface) GetPosition() *position.Position { return n.Position } -// StmtInterfaceExtends node -type StmtInterfaceExtends struct { - Position *position.Position - ExtendsTkn *token.Token - InterfaceNames []Vertex - SeparatorTkns []*token.Token -} - -func (n *StmtInterfaceExtends) Accept(v NodeVisitor) { - v.StmtInterfaceExtends(n) -} - -func (n *StmtInterfaceExtends) GetPosition() *position.Position { - return n.Position -} - // StmtLabel node type StmtLabel struct { Position *position.Position @@ -966,8 +924,6 @@ type StmtTrait struct { Position *position.Position TraitTkn *token.Token TraitName Vertex - Extends Vertex - Implements Vertex OpenCurlyBracketTkn *token.Token Stmts []Vertex CloseCurlyBracketTkn *token.Token diff --git a/pkg/ast/traverser/dfs.go b/pkg/ast/traverser/dfs.go index 93333c9..9e58ba5 100644 --- a/pkg/ast/traverser/dfs.go +++ b/pkg/ast/traverser/dfs.go @@ -170,9 +170,11 @@ func (t *DFS) Traverse(n ast.Vertex) { t.visitor.Leave("Extends", true) } if nn.Implements != nil { - t.visitor.Enter("Implements", true) - t.Traverse(nn.Implements) - t.visitor.Leave("Implements", true) + t.visitor.Enter("Implements", false) + for _, c := range nn.Implements { + t.Traverse(c) + } + t.visitor.Leave("Implements", false) } if nn.Stmts != nil { t.visitor.Enter("Stmts", false) @@ -202,32 +204,6 @@ func (t *DFS) Traverse(n ast.Vertex) { } t.visitor.Leave("Consts", false) } - case *ast.StmtClassExtends: - if nn == nil { - return - } - if !t.visitor.EnterNode(nn) { - return - } - if nn.ClassName != nil { - t.visitor.Enter("ClassName", true) - t.Traverse(nn.ClassName) - t.visitor.Leave("ClassName", true) - } - case *ast.StmtClassImplements: - if nn == nil { - return - } - if !t.visitor.EnterNode(nn) { - return - } - if nn.InterfaceNames != nil { - t.visitor.Enter("InterfaceNames", false) - for _, c := range nn.InterfaceNames { - t.Traverse(c) - } - t.visitor.Leave("InterfaceNames", false) - } case *ast.StmtClassMethod: if nn == nil { return @@ -599,9 +575,11 @@ func (t *DFS) Traverse(n ast.Vertex) { t.visitor.Leave("InterfaceName", true) } if nn.Extends != nil { - t.visitor.Enter("Extends", true) - t.Traverse(nn.Extends) - t.visitor.Leave("Extends", true) + t.visitor.Enter("Extends", false) + for _, c := range nn.Extends { + t.Traverse(c) + } + t.visitor.Leave("Extends", false) } if nn.Stmts != nil { t.visitor.Enter("Stmts", false) @@ -610,20 +588,6 @@ func (t *DFS) Traverse(n ast.Vertex) { } t.visitor.Leave("Stmts", false) } - case *ast.StmtInterfaceExtends: - if nn == nil { - return - } - if !t.visitor.EnterNode(nn) { - return - } - if nn.InterfaceNames != nil { - t.visitor.Enter("InterfaceNames", false) - for _, c := range nn.InterfaceNames { - t.Traverse(c) - } - t.visitor.Leave("InterfaceNames", false) - } case *ast.StmtLabel: if nn == nil { return diff --git a/pkg/ast/visitor/dumper.go b/pkg/ast/visitor/dumper.go index 0e1bf41..2783faa 100644 --- a/pkg/ast/visitor/dumper.go +++ b/pkg/ast/visitor/dumper.go @@ -286,8 +286,11 @@ func (v *Dumper) StmtClass(n *ast.StmtClass) { v.dumpVertexList("Arguments", n.Arguments) v.dumpTokenList("SeparatorTkns", n.SeparatorTkns) v.dumpToken("CloseParenthesisTkn", n.CloseParenthesisTkn) + v.dumpToken("ExtendsTkn", n.ExtendsTkn) v.dumpVertex("Extends", n.Extends) - v.dumpVertex("Implements", n.Implements) + v.dumpToken("ImplementsTkn", n.ImplementsTkn) + v.dumpVertexList("Implements", n.Implements) + v.dumpTokenList("ImplementsSeparatorTkns", n.ImplementsSeparatorTkns) v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn) v.dumpVertexList("Stmts", n.Stmts) v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn) @@ -311,31 +314,6 @@ func (v *Dumper) StmtClassConstList(n *ast.StmtClassConstList) { v.print(v.indent, "},\n") } -func (v *Dumper) StmtClassExtends(n *ast.StmtClassExtends) { - v.print(0, "&ast.StmtClassExtends{\n") - v.indent++ - - v.dumpPosition(n.Position) - v.dumpToken("ExtendTkn", n.ExtendTkn) - v.dumpVertex("ClassName", n.ClassName) - - v.indent-- - v.print(v.indent, "},\n") -} - -func (v *Dumper) StmtClassImplements(n *ast.StmtClassImplements) { - v.print(0, "&ast.StmtClassImplements{\n") - v.indent++ - - v.dumpPosition(n.Position) - v.dumpToken("ImplementsTkn", n.ImplementsTkn) - v.dumpVertexList("InterfaceNames", n.InterfaceNames) - v.dumpTokenList("SeparatorTkns", n.SeparatorTkns) - - v.indent-- - v.print(v.indent, "},\n") -} - func (v *Dumper) StmtClassMethod(n *ast.StmtClassMethod) { v.print(0, "&ast.StmtClassMethod{\n") v.indent++ @@ -666,7 +644,9 @@ func (v *Dumper) StmtInterface(n *ast.StmtInterface) { v.dumpPosition(n.Position) v.dumpToken("InterfaceTkn", n.InterfaceTkn) v.dumpVertex("InterfaceName", n.InterfaceName) - v.dumpVertex("Extends", n.Extends) + v.dumpToken("ExtendsTkn", n.ExtendsTkn) + v.dumpVertexList("Extends", n.Extends) + v.dumpTokenList("ExtendsSeparatorTkns", n.ExtendsSeparatorTkns) v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn) v.dumpVertexList("Stmts", n.Stmts) v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn) @@ -675,19 +655,6 @@ func (v *Dumper) StmtInterface(n *ast.StmtInterface) { v.print(v.indent, "},\n") } -func (v *Dumper) StmtInterfaceExtends(n *ast.StmtInterfaceExtends) { - v.print(0, "&ast.StmtInterfaceExtends{\n") - v.indent++ - - v.dumpPosition(n.Position) - v.dumpToken("ExtendsTkn", n.ExtendsTkn) - v.dumpVertexList("InterfaceNames", n.InterfaceNames) - v.dumpTokenList("SeparatorTkns", n.SeparatorTkns) - - v.indent-- - v.print(v.indent, "},\n") -} - func (v *Dumper) StmtLabel(n *ast.StmtLabel) { v.print(0, "&ast.StmtLabel{\n") v.indent++ @@ -849,8 +816,6 @@ func (v *Dumper) StmtTrait(n *ast.StmtTrait) { v.dumpPosition(n.Position) v.dumpToken("TraitTkn", n.TraitTkn) v.dumpVertex("TraitName", n.TraitName) - v.dumpVertex("Extends", n.Extends) - v.dumpVertex("Implements", n.Implements) v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn) v.dumpVertexList("Stmts", n.Stmts) v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn) diff --git a/pkg/ast/visitor/formatter.go b/pkg/ast/visitor/formatter.go index b81a13c..c6e1a50 100644 --- a/pkg/ast/visitor/formatter.go +++ b/pkg/ast/visitor/formatter.go @@ -281,12 +281,14 @@ func (f *formatter) StmtClass(n *ast.StmtClass) { f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) if n.Extends != nil { + n.ExtendsTkn = f.newToken(token.T_EXTENDS, []byte("extends")) n.Extends.Accept(f) f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) } if n.Implements != nil { - n.Implements.Accept(f) + n.ImplementsTkn = f.newToken(token.T_IMPLEMENTS, []byte("implements")) + n.ImplementsSeparatorTkns = f.formatList(n.Implements, ',') f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) } @@ -318,20 +320,6 @@ func (f *formatter) StmtClassConstList(n *ast.StmtClassConstList) { n.SemiColonTkn = f.newSemicolonTkn() } -func (f *formatter) StmtClassExtends(n *ast.StmtClassExtends) { - n.ExtendTkn = f.newToken(token.T_EXTENDS, []byte("extends")) - f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) - - n.ClassName.Accept(f) -} - -func (f *formatter) StmtClassImplements(n *ast.StmtClassImplements) { - n.ImplementsTkn = f.newToken(token.T_IMPLEMENTS, []byte("implements")) - f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) - - n.SeparatorTkns = f.formatList(n.InterfaceNames, ',') -} - func (f *formatter) StmtClassMethod(n *ast.StmtClassMethod) { for _, m := range n.Modifiers { m.Accept(f) @@ -677,7 +665,8 @@ func (f *formatter) StmtInterface(n *ast.StmtInterface) { f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) if n.Extends != nil { - n.Extends.Accept(f) + n.ExtendsTkn = f.newToken(token.T_EXTENDS, []byte("extends")) + n.ExtendsSeparatorTkns = f.formatList(n.Extends, ',') f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) } @@ -695,16 +684,6 @@ func (f *formatter) StmtInterface(n *ast.StmtInterface) { n.CloseCurlyBracketTkn = f.newToken('}', []byte("}")) } -func (f *formatter) StmtInterfaceExtends(n *ast.StmtInterfaceExtends) { - n.ExtendsTkn = f.newToken(token.T_EXTENDS, []byte("extends")) - f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) - - n.SeparatorTkns = nil - if len(n.InterfaceNames) > 0 { - n.SeparatorTkns = f.formatList(n.InterfaceNames, ',') - } -} - func (f *formatter) StmtLabel(n *ast.StmtLabel) { n.LabelName.Accept(f) n.ColonTkn = f.newToken(':', []byte(":")) @@ -865,16 +844,6 @@ func (f *formatter) StmtTrait(n *ast.StmtTrait) { n.TraitName.Accept(f) f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) - if n.Extends != nil { - n.Extends.Accept(f) - f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) - } - - if n.Implements != nil { - n.Implements.Accept(f) - f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) - } - n.OpenCurlyBracketTkn = f.newToken('{', []byte("{")) if len(n.Stmts) > 0 { diff --git a/pkg/ast/visitor/formatter_test.go b/pkg/ast/visitor/formatter_test.go index 9e59126..7c708bc 100644 --- a/pkg/ast/visitor/formatter_test.go +++ b/pkg/ast/visitor/formatter_test.go @@ -519,12 +519,10 @@ func TestFormatter_Class_Extends(t *testing.T) { ClassName: &ast.Identifier{ Value: []byte("foo"), }, - Extends: &ast.StmtClassExtends{ - ClassName: &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, + Extends: &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("bar"), }, }, }, @@ -556,13 +554,11 @@ func TestFormatter_Class_Implements(t *testing.T) { ClassName: &ast.Identifier{ Value: []byte("foo"), }, - Implements: &ast.StmtClassImplements{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, + Implements: []ast.Vertex{ + &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("bar"), }, }, }, @@ -669,69 +665,6 @@ func TestFormatter_StmtClassConstList_Modifier(t *testing.T) { } } -func TestFormatter_ClassExtends(t *testing.T) { - o := bytes.NewBufferString("") - - n := &ast.StmtClassExtends{ - ClassName: &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("foo"), - }, - }, - }, - } - - f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) - n.Accept(f) - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n.Accept(p) - - expected := `extends foo` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - -func TestFormatter_ClassImplements(t *testing.T) { - o := bytes.NewBufferString("") - - n := &ast.StmtClassImplements{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("foo"), - }, - }, - }, - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, - }, - }, - }, - } - - f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) - n.Accept(f) - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n.Accept(p) - - expected := `implements foo, bar` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - func TestFormatter_ClassMethod(t *testing.T) { o := bytes.NewBufferString("") @@ -1881,13 +1814,11 @@ func TestFormatter_StmtInterface_Extends(t *testing.T) { InterfaceName: &ast.Identifier{ Value: []byte("foo"), }, - Extends: &ast.StmtInterfaceExtends{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, + Extends: []ast.Vertex{ + &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("bar"), }, }, }, @@ -1913,42 +1844,6 @@ func TestFormatter_StmtInterface_Extends(t *testing.T) { } } -func TestFormatter_StmtInterfaceExtends(t *testing.T) { - o := bytes.NewBufferString("") - - n := &ast.StmtInterfaceExtends{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("foo"), - }, - }, - }, - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, - }, - }, - }, - } - - f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) - n.Accept(f) - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n.Accept(p) - - expected := `extends foo, bar` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - func TestFormatter_StmtLabel(t *testing.T) { o := bytes.NewBufferString("") @@ -2465,82 +2360,6 @@ func TestFormatter_StmtTrait(t *testing.T) { } } -func TestFormatter_StmtTrait_Extends(t *testing.T) { - o := bytes.NewBufferString("") - - n := &ast.StmtTrait{ - TraitName: &ast.Identifier{ - Value: []byte("foo"), - }, - Extends: &ast.StmtClassExtends{ - ClassName: &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, - }, - }, - }, - Stmts: []ast.Vertex{ - &ast.StmtNop{}, - }, - } - - f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) - n.Accept(f) - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n.Accept(p) - - expected := `trait foo extends bar { - ; - }` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - -func TestFormatter_StmtTrait_Implements(t *testing.T) { - o := bytes.NewBufferString("") - - n := &ast.StmtTrait{ - TraitName: &ast.Identifier{ - Value: []byte("foo"), - }, - Implements: &ast.StmtClassImplements{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, - }, - }, - }, - }, - Stmts: []ast.Vertex{ - &ast.StmtNop{}, - }, - } - - f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) - n.Accept(f) - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n.Accept(p) - - expected := `trait foo implements bar { - ; - }` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - func TestFormatter_StmtTraitMethodRef(t *testing.T) { o := bytes.NewBufferString("") diff --git a/pkg/ast/visitor/namespace_resolver.go b/pkg/ast/visitor/namespace_resolver.go index 9e4e6a2..7de7f68 100644 --- a/pkg/ast/visitor/namespace_resolver.go +++ b/pkg/ast/visitor/namespace_resolver.go @@ -73,11 +73,11 @@ func (nsr *NamespaceResolver) StmtGroupUse(n *ast.StmtGroupUse) { func (nsr *NamespaceResolver) StmtClass(n *ast.StmtClass) { if n.Extends != nil { - nsr.ResolveName(n.Extends.(*ast.StmtClassExtends).ClassName, "") + nsr.ResolveName(n.Extends, "") } if n.Implements != nil { - for _, interfaceName := range n.Implements.(*ast.StmtClassImplements).InterfaceNames { + for _, interfaceName := range n.Implements { nsr.ResolveName(interfaceName, "") } } @@ -89,7 +89,7 @@ func (nsr *NamespaceResolver) StmtClass(n *ast.StmtClass) { func (nsr *NamespaceResolver) StmtInterface(n *ast.StmtInterface) { if n.Extends != nil { - for _, interfaceName := range n.Extends.(*ast.StmtInterfaceExtends).InterfaceNames { + for _, interfaceName := range n.Extends { nsr.ResolveName(interfaceName, "") } } diff --git a/pkg/ast/visitor/namespace_resolver_test.go b/pkg/ast/visitor/namespace_resolver_test.go index 8a8bb14..8d7d5cb 100644 --- a/pkg/ast/visitor/namespace_resolver_test.go +++ b/pkg/ast/visitor/namespace_resolver_test.go @@ -401,13 +401,9 @@ func TestResolveClassName(t *testing.T) { class := &ast.StmtClass{ ClassName: &ast.Identifier{Value: []byte("A")}, - Extends: &ast.StmtClassExtends{ - ClassName: nameAB, - }, - Implements: &ast.StmtClassImplements{ - InterfaceNames: []ast.Vertex{ - nameBC, - }, + Extends: nameAB, + Implements: []ast.Vertex{ + nameBC, }, } @@ -436,11 +432,9 @@ func TestResolveInterfaceName(t *testing.T) { interfaceNode := &ast.StmtInterface{ InterfaceName: &ast.Identifier{Value: []byte("A")}, - Extends: &ast.StmtInterfaceExtends{ - InterfaceNames: []ast.Vertex{ - nameAB, - nameBC, - }, + Extends: []ast.Vertex{ + nameAB, + nameBC, }, } diff --git a/pkg/ast/visitor/null.go b/pkg/ast/visitor/null.go index f412369..a8ca90d 100644 --- a/pkg/ast/visitor/null.go +++ b/pkg/ast/visitor/null.go @@ -62,14 +62,6 @@ func (v *Null) StmtClassConstList(_ *ast.StmtClassConstList) { // do nothing } -func (v *Null) StmtClassExtends(_ *ast.StmtClassExtends) { - // do nothing -} - -func (v *Null) StmtClassImplements(_ *ast.StmtClassImplements) { - // do nothing -} - func (v *Null) StmtClassMethod(_ *ast.StmtClassMethod) { // do nothing } @@ -154,10 +146,6 @@ func (v *Null) StmtInterface(_ *ast.StmtInterface) { // do nothing } -func (v *Null) StmtInterfaceExtends(_ *ast.StmtInterfaceExtends) { - // do nothing -} - func (v *Null) StmtLabel(_ *ast.StmtLabel) { // do nothing } diff --git a/pkg/ast/visitor/printer.go b/pkg/ast/visitor/printer.go index ff82f60..88fffed 100644 --- a/pkg/ast/visitor/printer.go +++ b/pkg/ast/visitor/printer.go @@ -194,8 +194,10 @@ func (p *printer) StmtClass(n *ast.StmtClass) { p.printToken(n.OpenParenthesisTkn, p.ifNodeList(n.Arguments, []byte("("))) p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(",")) p.printToken(n.CloseParenthesisTkn, p.ifNodeList(n.Arguments, []byte(")"))) + p.printToken(n.ExtendsTkn, p.ifNode(n.Extends, []byte("extends"))) p.printNode(n.Extends) - p.printNode(n.Implements) + 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("}")) @@ -208,16 +210,6 @@ func (p *printer) StmtClassConstList(n *ast.StmtClassConstList) { p.printToken(n.SemiColonTkn, []byte(";")) } -func (p *printer) StmtClassExtends(n *ast.StmtClassExtends) { - p.printToken(n.ExtendTkn, []byte("extends")) - p.printNode(n.ClassName) -} - -func (p *printer) StmtClassImplements(n *ast.StmtClassImplements) { - p.printToken(n.ImplementsTkn, []byte("implements")) - p.printSeparatedList(n.InterfaceNames, n.SeparatorTkns, []byte(",")) -} - func (p *printer) StmtClassMethod(n *ast.StmtClassMethod) { p.printList(n.Modifiers) p.printToken(n.FunctionTkn, []byte("function")) @@ -436,17 +428,13 @@ func (p *printer) StmtInlineHtml(n *ast.StmtInlineHtml) { func (p *printer) StmtInterface(n *ast.StmtInterface) { p.printToken(n.InterfaceTkn, []byte("interface")) p.printNode(n.InterfaceName) - p.printNode(n.Extends) + p.printToken(n.ExtendsTkn, p.ifNodeList(n.Extends, []byte("extends"))) + p.printSeparatedList(n.Extends, n.ExtendsSeparatorTkns, []byte(",")) p.printToken(n.OpenCurlyBracketTkn, []byte("{")) p.printList(n.Stmts) p.printToken(n.CloseCurlyBracketTkn, []byte("}")) } -func (p *printer) StmtInterfaceExtends(n *ast.StmtInterfaceExtends) { - p.printToken(n.ExtendsTkn, []byte("extends")) - p.printSeparatedList(n.InterfaceNames, n.SeparatorTkns, []byte(",")) -} - func (p *printer) StmtLabel(n *ast.StmtLabel) { p.printNode(n.LabelName) p.printToken(n.ColonTkn, []byte(":")) @@ -525,8 +513,6 @@ func (p *printer) StmtThrow(n *ast.StmtThrow) { func (p *printer) StmtTrait(n *ast.StmtTrait) { p.printToken(n.TraitTkn, []byte("trait")) p.printNode(n.TraitName) - p.printNode(n.Extends) - p.printNode(n.Implements) p.printToken(n.OpenCurlyBracketTkn, []byte("{")) p.printList(n.Stmts) p.printToken(n.CloseCurlyBracketTkn, []byte("}")) diff --git a/pkg/ast/visitor/printer_test.go b/pkg/ast/visitor/printer_test.go index 1d4bcb1..7735a52 100644 --- a/pkg/ast/visitor/printer_test.go +++ b/pkg/ast/visitor/printer_test.go @@ -29,11 +29,9 @@ func TestPrinterPrintFile(t *testing.T) { &ast.NameNamePart{Value: []byte("Bar")}, }, }, - Extends: &ast.StmtClassExtends{ - ClassName: &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{Value: []byte("Baz")}, - }, + Extends: &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{Value: []byte("Baz")}, }, }, Stmts: []ast.Vertex{ @@ -3255,14 +3253,10 @@ func TestPrinterPrintStmtClass(t *testing.T) { n := &ast.StmtClass{ Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("abstract")}}, ClassName: &ast.Identifier{Value: []byte("Foo")}, - Extends: &ast.StmtClassExtends{ - ClassName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, - }, - Implements: &ast.StmtClassImplements{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, - &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, - }, + Extends: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, + Implements: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, Stmts: []ast.Vertex{ &ast.StmtClassConstList{ @@ -3307,14 +3301,10 @@ func TestPrinterPrintStmtAnonymousClass(t *testing.T) { }, }, }, - Extends: &ast.StmtClassExtends{ - ClassName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, - }, - Implements: &ast.StmtClassImplements{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, - &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, - }, + Extends: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, + Implements: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, Stmts: []ast.Vertex{ &ast.StmtClassConstList{ @@ -4122,11 +4112,9 @@ func TestPrinterPrintInterface(t *testing.T) { p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) n := &ast.StmtInterface{ InterfaceName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, - Extends: &ast.StmtInterfaceExtends{ - InterfaceNames: []ast.Vertex{ - &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, - &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, - }, + Extends: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, }, Stmts: []ast.Vertex{ &ast.StmtClassMethod{