Skip to content

Commit 545b5ba

Browse files
committed
PHP8.4: Support new without parenthesis
1 parent 4fd2db9 commit 545b5ba

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

src/Parser.php

+17-1
Original file line numberDiff line numberDiff line change
@@ -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

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
new Foobar()->bar();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
new Foobar()->bar();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
new Foobar()->bar();

0 commit comments

Comments
 (0)