From 5873b304299eb628c83b980abff4865ca379372d Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Mon, 13 Jan 2025 20:03:36 +0000 Subject: [PATCH] PHP8.4: Support new without parenthesis --- src/Parser.php | 8 +++++++- tests/cases/parser84/new-without-parenthesis.php | 3 +++ tests/cases/parser84/new-without-parenthesis.php.diag | 3 +++ tests/cases/parser84/new-without-parenthesis.php.tree | 3 +++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/cases/parser84/new-without-parenthesis.php create mode 100644 tests/cases/parser84/new-without-parenthesis.php.diag create mode 100644 tests/cases/parser84/new-without-parenthesis.php.tree 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();