@@ -3307,7 +3307,7 @@ private function parseClassBaseClause($parentNode) {
33073307 if ($ classBaseClause ->extendsKeyword === null ) {
33083308 return null ;
33093309 }
3310- $ classBaseClause ->baseClass = $ this ->parseQualifiedName ($ classBaseClause );
3310+ $ classBaseClause ->baseClass = $ this ->parseQualifiedName ($ classBaseClause ) ?? new MissingToken (TokenKind::QualifiedName, $ this -> token -> fullStart ) ;
33113311
33123312 return $ classBaseClause ;
33133313 }
@@ -3500,12 +3500,18 @@ private function parseNamespaceDefinition($parentNode) {
35003500 $ namespaceDefinition ->namespaceKeyword = $ this ->eat1 (TokenKind::NamespaceKeyword);
35013501
35023502 if (!$ this ->checkToken (TokenKind::NamespaceKeyword)) {
3503- $ namespaceDefinition ->name = $ this ->parseQualifiedName ($ namespaceDefinition ); // TODO only optional with compound statement block
3503+ $ namespaceDefinition ->name = $ this ->parseQualifiedName ($ namespaceDefinition );
35043504 }
35053505
3506- $ namespaceDefinition ->compoundStatementOrSemicolon =
3507- $ this ->checkToken (TokenKind::OpenBraceToken) ?
3508- $ this ->parseCompoundStatement ($ namespaceDefinition ) : $ this ->eatSemicolonOrAbortStatement ();
3506+ if ($ this ->checkToken (TokenKind::OpenBraceToken)) {
3507+ $ namespaceDefinition ->compoundStatementOrSemicolon = $ this ->parseCompoundStatement ($ namespaceDefinition );
3508+ } else {
3509+ if (!$ namespaceDefinition ->name ) {
3510+ // only optional with compound statement block
3511+ $ namespaceDefinition ->name = new MissingToken (TokenKind::QualifiedName, $ this ->token ->fullStart );
3512+ }
3513+ $ namespaceDefinition ->compoundStatementOrSemicolon = $ this ->eatSemicolonOrAbortStatement ();
3514+ }
35093515
35103516 return $ namespaceDefinition ;
35113517 }
@@ -3531,13 +3537,17 @@ function ($parentNode) {
35313537 $ namespaceUseClause = new NamespaceUseClause ();
35323538 $ namespaceUseClause ->parent = $ parentNode ;
35333539 $ namespaceUseClause ->namespaceName = $ this ->parseQualifiedName ($ namespaceUseClause );
3534- if ($ this ->checkToken (TokenKind::AsKeyword)) {
3535- $ namespaceUseClause ->namespaceAliasingClause = $ this ->parseNamespaceAliasingClause ($ namespaceUseClause );
3536- }
3537- elseif ($ this ->checkToken (TokenKind::OpenBraceToken)) {
3540+ if ($ this ->checkToken (TokenKind::OpenBraceToken)) {
35383541 $ namespaceUseClause ->openBrace = $ this ->eat1 (TokenKind::OpenBraceToken);
35393542 $ namespaceUseClause ->groupClauses = $ this ->parseNamespaceUseGroupClauseList ($ namespaceUseClause );
35403543 $ namespaceUseClause ->closeBrace = $ this ->eat1 (TokenKind::CloseBraceToken);
3544+ } else {
3545+ if (!$ namespaceUseClause ->namespaceName ) {
3546+ $ namespaceUseClause ->namespaceName = new MissingToken (TokenKind::QualifiedName, $ this ->token ->fullStart );
3547+ }
3548+ if ($ this ->checkToken (TokenKind::AsKeyword)) {
3549+ $ namespaceUseClause ->namespaceAliasingClause = $ this ->parseNamespaceAliasingClause ($ namespaceUseClause );
3550+ }
35413551 }
35423552
35433553 return $ namespaceUseClause ;
@@ -3558,7 +3568,7 @@ function ($parentNode) {
35583568 $ namespaceUseGroupClause ->parent = $ parentNode ;
35593569
35603570 $ namespaceUseGroupClause ->functionOrConst = $ this ->eatOptional (TokenKind::FunctionKeyword, TokenKind::ConstKeyword);
3561- $ namespaceUseGroupClause ->namespaceName = $ this ->parseQualifiedName ($ namespaceUseGroupClause );
3571+ $ namespaceUseGroupClause ->namespaceName = $ this ->parseQualifiedName ($ namespaceUseGroupClause ) ?? new MissingToken (TokenKind::QualifiedName, $ this -> token -> fullStart ) ;
35623572 if ($ this ->checkToken (TokenKind::AsKeyword)) {
35633573 $ namespaceUseGroupClause ->namespaceAliasingClause = $ this ->parseNamespaceAliasingClause ($ namespaceUseGroupClause );
35643574 }
0 commit comments