Closed
Description
Version: between 0.0.5 and master
Expected: Should parse without error (<?php class C{use T1,T2,T3{T1::foo insteadof T2,T3;}}
is syntactically valid)
https://secure.php.net/manual/en/language.oop5.traits.php#language.oop5.traits.conflict
(If there are 3 methods with the same list, one needs to exclude two of them, so it has to be a name list)
Observed: There were parse errors, MissingToken and SkippedToken were seen.
php dump.php 'class C{use T1,T2,T3{T1::foo insteadof T2,T3;}}'
Node\SourceFileNode
statementList: Node\Statement\ClassDeclaration
classKeyword: Token: ClassKeyword(109): "class"
name: Token: Name(2): " C"
classMembers: Node\ClassMembersNode
openBrace: Token: OpenBraceToken(205): "{"
classMemberDeclarations: Node\TraitUseClause
useKeyword: Token: UseKeyword(162): "use"
traitNameList: Node\DelimitedList\QualifiedNameList
children: Node\QualifiedName
nameParts: Token: Name(2): " T1"
children: Token: CommaToken(251): ","
children: Node\QualifiedName
nameParts: Token: Name(2): "T2"
children: Token: CommaToken(251): ","
children: Node\QualifiedName
nameParts: Token: Name(2): "T3"
semicolonOrOpenBrace: Token: OpenBraceToken(205): "{"
traitSelectAndAliasClauses: Node\DelimitedList\TraitSelectOrAliasClauseList
children: Node\TraitSelectOrAliasClause
name: Node\Expression\ScopedPropertyAccessExpression
scopeResolutionQualifier: Node\QualifiedName
nameParts: Token: Name(2): "T1"
doubleColon: Token: ColonColonToken(256): "::"
memberName: Token: Name(2): "foo"
asOrInsteadOfKeyword: Token: InsteadOfKeyword(142): " insteadof"
targetName: Node\QualifiedName
nameParts: Token: Name(2): " T2"
closeBrace: MissingToken: CloseBraceToken(206): "" <-- Unexpected MissingToken
classMemberDeclarations: SkippedToken: CommaToken(251): ","
closeBrace: MissingToken: CloseBraceToken(206): ""
statementList: Node\Statement\ExpressionStatement
expression: Node\QualifiedName
nameParts: Token: Name(2): "T3"
semicolon: Token: SemicolonToken(237): ";"
statementList: SkippedToken: CloseBraceToken(206): "}"
statementList: SkippedToken: CloseBraceToken(206): "}"
endOfFileToken: Token: EndOfFileToken(1): ""