diff --git a/src/Parser.php b/src/Parser.php index 4e55dcb6..8014ab12 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -3047,7 +3047,8 @@ private function parsePostfixExpressionRest($expression, $allowUpdateExpression $expression instanceof SubscriptExpression || $expression instanceof ScopedPropertyAccessExpression || $expression instanceof StringLiteral || - $expression instanceof ArrayCreationExpression + $expression instanceof ArrayCreationExpression || + $expression instanceof ObjectCreationExpression )) { return $expression; } @@ -3289,6 +3290,11 @@ private function parseObjectCreationExpression($parentNode) { $objectCreationExpression->classMembers = $this->parseClassMembers($objectCreationExpression); } + // PHP8.4 new with no parenthesis + if ($this->getCurrentToken()->kind === TokenKind::ArrowToken) { + return $this->parsePostfixExpressionRest($objectCreationExpression); + } + return $objectCreationExpression; } diff --git a/tests/cases/parser84/new-without-parenthesis.php b/tests/cases/parser84/new-without-parenthesis.php new file mode 100644 index 00000000..b2e381dc --- /dev/null +++ b/tests/cases/parser84/new-without-parenthesis.php @@ -0,0 +1,3 @@ +bar(); diff --git a/tests/cases/parser84/new-without-parenthesis.php.diag b/tests/cases/parser84/new-without-parenthesis.php.diag new file mode 100644 index 00000000..b2e381dc --- /dev/null +++ b/tests/cases/parser84/new-without-parenthesis.php.diag @@ -0,0 +1,3 @@ +bar(); diff --git a/tests/cases/parser84/new-without-parenthesis.php.tree b/tests/cases/parser84/new-without-parenthesis.php.tree new file mode 100644 index 00000000..b2e381dc --- /dev/null +++ b/tests/cases/parser84/new-without-parenthesis.php.tree @@ -0,0 +1,3 @@ +bar();