@@ -3045,7 +3045,8 @@ private function parsePostfixExpressionRest($expression, $allowUpdateExpression
30453045 $ expression instanceof SubscriptExpression ||
30463046 $ expression instanceof ScopedPropertyAccessExpression ||
30473047 $ expression instanceof StringLiteral ||
3048- $ expression instanceof ArrayCreationExpression
3048+ $ expression instanceof ArrayCreationExpression ||
3049+ $ expression instanceof ObjectCreationExpression
30493050 )) {
30503051 return $ expression ;
30513052 }
@@ -3199,6 +3200,16 @@ private function parseSubscriptExpression($expression) : SubscriptExpression {
31993200 return $ subscriptExpression ;
32003201 }
32013202
3203+ private function parseNewObjectNoParenthesisMemberAccessExpression ($ expression ):MemberAccessExpression {
3204+ $ memberAccessExpression = new MemberAccessExpression ();
3205+ $ memberAccessExpression ->parent = $ expression ;
3206+
3207+ $ memberAccessExpression ->dereferencableExpression = $ expression ;
3208+ $ memberAccessExpression ->arrowToken = $ this ->eat (TokenKind::ArrowToken, TokenKind::QuestionArrowToken);
3209+ $ memberAccessExpression ->memberName = $ this ->parseMemberName ($ memberAccessExpression );
3210+
3211+ return $ memberAccessExpression ;
3212+ }
32023213 private function parseMemberAccessExpression ($ expression ):MemberAccessExpression {
32033214 $ memberAccessExpression = new MemberAccessExpression ();
32043215 $ memberAccessExpression ->parent = $ expression ->parent ;
@@ -3287,6 +3298,11 @@ private function parseObjectCreationExpression($parentNode) {
32873298 $ objectCreationExpression ->classMembers = $ this ->parseClassMembers ($ objectCreationExpression );
32883299 }
32893300
3301+ // PHP8.4 new with no parenthesis
3302+ if ($ this ->getCurrentToken ()->kind === TokenKind::ArrowToken) {
3303+ return $ this ->parsePostfixExpressionRest ($ objectCreationExpression );
3304+ }
3305+
32903306 return $ objectCreationExpression ;
32913307 }
32923308
0 commit comments