@@ -2678,7 +2678,7 @@ private function parsePostfixExpressionRest($expression, $allowUpdateExpression
26782678 return $ this ->parsePostfixExpressionRest ($ expression );
26792679 }
26802680
2681- if ($ tokenKind === TokenKind::OpenParenToken && !$ this ->isParsingObjectCreationExpression ) {
2681+ if ($ tokenKind === TokenKind::OpenParenToken && !$ this ->isParsingUnparenthesizedObjectCreationExpression ( $ expression ) ) {
26822682 $ expression = $ this ->parseCallExpressionRest ($ expression );
26832683
26842684 if (!$ this ->checkToken (TokenKind::OpenParenToken)) {
@@ -2822,19 +2822,37 @@ private function parseScopedPropertyAccessExpression($expression, $fallbackParen
28222822 return $ scopedPropertyAccessExpression ;
28232823 }
28242824
2825+ public function isParsingUnparenthesizedObjectCreationExpression ($ expression ) {
2826+ if (!$ this ->isParsingObjectCreationExpression ) {
2827+ return false ;
2828+ }
2829+ if ($ expression instanceof Token) {
2830+ return true ;
2831+ }
2832+ while ($ expression ->parent ) {
2833+ $ expression = $ expression ->parent ;
2834+ if ($ expression instanceof ObjectCreationExpression) {
2835+ return true ;
2836+ } elseif ($ expression instanceof ParenthesizedExpression) {
2837+ return false ;
2838+ }
2839+ }
2840+ }
2841+
28252842 private $ isParsingObjectCreationExpression = false ;
28262843
28272844 private function parseObjectCreationExpression ($ parentNode ) {
28282845 $ objectCreationExpression = new ObjectCreationExpression ();
28292846 $ objectCreationExpression ->parent = $ parentNode ;
28302847 $ objectCreationExpression ->newKeword = $ this ->eat1 (TokenKind::NewKeyword);
28312848 // TODO - add tests for this scenario
2849+ $ oldIsParsingObjectCreationExpression = $ this ->isParsingObjectCreationExpression ;
28322850 $ this ->isParsingObjectCreationExpression = true ;
28332851 $ objectCreationExpression ->classTypeDesignator =
28342852 $ this ->eatOptional1 (TokenKind::ClassKeyword) ??
28352853 $ this ->parseExpression ($ objectCreationExpression );
28362854
2837- $ this ->isParsingObjectCreationExpression = false ;
2855+ $ this ->isParsingObjectCreationExpression = $ oldIsParsingObjectCreationExpression ;
28382856
28392857 $ objectCreationExpression ->openParen = $ this ->eatOptional1 (TokenKind::OpenParenToken);
28402858 if ($ objectCreationExpression ->openParen !== null ) {
0 commit comments