@@ -2128,6 +2128,7 @@ private function parseBinaryExpressionOrHigher($precedence, $parentNode) {
21282128 }
21292129
21302130 if ($ shouldOperatorTakePrecedenceOverUnary ) {
2131+ /** @var UnaryOpExpression $unaryExpression */
21312132 $ unaryExpression = $ leftOperand ;
21322133 $ leftOperand = $ unaryExpression ->operand ;
21332134 }
@@ -2149,6 +2150,7 @@ private function parseBinaryExpressionOrHigher($precedence, $parentNode) {
21492150
21502151 // Rebuild the unary expression if we deconstructed it earlier.
21512152 if ($ shouldOperatorTakePrecedenceOverUnary ) {
2153+ /** @var UnaryOpExpression $unaryExpression */
21522154 $ leftOperand ->parent = $ unaryExpression ;
21532155 $ unaryExpression ->operand = $ leftOperand ;
21542156 $ leftOperand = $ unaryExpression ;
@@ -2275,6 +2277,14 @@ private function getBinaryOperatorPrecedenceAndAssociativity($token) {
22752277 // InstanceOf has other remaining issues, but this heuristic is an improvement for many common cases such as `$x && $y = $z`
22762278 ];
22772279
2280+ /**
2281+ * @param Token|Node $leftOperand
2282+ * @param Token $operatorToken
2283+ * @param Token|null $byRefToken
2284+ * @param Token|Node $rightOperand
2285+ * @param Node $parentNode
2286+ * @return BinaryExpression|AssignmentExpression
2287+ */
22782288 private function makeBinaryExpression ($ leftOperand , $ operatorToken , $ byRefToken , $ rightOperand , $ parentNode ) {
22792289 $ assignmentExpression = $ operatorToken ->kind === TokenKind::EqualsToken;
22802290 if ($ assignmentExpression || \array_key_exists ($ operatorToken ->kind , self ::KNOWN_ASSIGNMENT_TOKEN_SET )) {
@@ -2289,8 +2299,12 @@ private function makeBinaryExpression($leftOperand, $operatorToken, $byRefToken,
22892299 }
22902300 $ binaryExpression = $ assignmentExpression ? new AssignmentExpression () : new BinaryExpression ();
22912301 $ binaryExpression ->parent = $ parentNode ;
2292- $ leftOperand ->parent = $ binaryExpression ;
2293- $ rightOperand ->parent = $ binaryExpression ;
2302+ if ($ leftOperand instanceof Node) {
2303+ $ leftOperand ->parent = $ binaryExpression ;
2304+ }
2305+ if ($ rightOperand instanceof Node) {
2306+ $ rightOperand ->parent = $ binaryExpression ;
2307+ }
22942308 $ binaryExpression ->leftOperand = $ leftOperand ;
22952309 $ binaryExpression ->operator = $ operatorToken ;
22962310 if ($ binaryExpression instanceof AssignmentExpression && isset ($ byRefToken )) {
0 commit comments