Skip to content

Commit fd4d241

Browse files
committed
PHP8.4: Support new without parenthesis
1 parent 3bd51bd commit fd4d241

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

src/Parser.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
new Foobar()->bar();
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
new Foobar()->bar();
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
new Foobar()->bar();

0 commit comments

Comments
 (0)