@@ -3047,7 +3047,8 @@ private function parsePostfixExpressionRest($expression, $allowUpdateExpression
30473047 $ expression instanceof SubscriptExpression ||
30483048 $ expression instanceof ScopedPropertyAccessExpression ||
30493049 $ expression instanceof StringLiteral ||
3050- $ expression instanceof ArrayCreationExpression
3050+ $ expression instanceof ArrayCreationExpression ||
3051+ $ expression instanceof ObjectCreationExpression
30513052 )) {
30523053 return $ expression ;
30533054 }
@@ -3201,6 +3202,16 @@ private function parseSubscriptExpression($expression) : SubscriptExpression {
32013202 return $ subscriptExpression ;
32023203 }
32033204
3205+ private function parseNewObjectNoParenthesisMemberAccessExpression ($ expression ):MemberAccessExpression {
3206+ $ memberAccessExpression = new MemberAccessExpression ();
3207+ $ memberAccessExpression ->parent = $ expression ;
3208+
3209+ $ memberAccessExpression ->dereferencableExpression = $ expression ;
3210+ $ memberAccessExpression ->arrowToken = $ this ->eat (TokenKind::ArrowToken, TokenKind::QuestionArrowToken);
3211+ $ memberAccessExpression ->memberName = $ this ->parseMemberName ($ memberAccessExpression );
3212+
3213+ return $ memberAccessExpression ;
3214+ }
32043215 private function parseMemberAccessExpression ($ expression ):MemberAccessExpression {
32053216 $ memberAccessExpression = new MemberAccessExpression ();
32063217 $ memberAccessExpression ->parent = $ expression ->parent ;
@@ -3289,6 +3300,11 @@ private function parseObjectCreationExpression($parentNode) {
32893300 $ objectCreationExpression ->classMembers = $ this ->parseClassMembers ($ objectCreationExpression );
32903301 }
32913302
3303+ // PHP8.4 new with no parenthesis
3304+ if ($ this ->getCurrentToken ()->kind === TokenKind::ArrowToken) {
3305+ return $ this ->parsePostfixExpressionRest ($ objectCreationExpression );
3306+ }
3307+
32923308 return $ objectCreationExpression ;
32933309 }
32943310
0 commit comments