@@ -1446,23 +1446,26 @@ private function callOperatorTypeSpecifyingExtensions(Expr\BinaryOp $expr, Type
1446
1446
*/
1447
1447
private function resolveCommonMath (Expr \BinaryOp $ expr , Type $ leftType , Type $ rightType ): Type
1448
1448
{
1449
- if (($ leftType instanceof IntegerRangeType || $ leftType instanceof ConstantIntegerType || $ leftType instanceof UnionType) &&
1450
- ($ rightType instanceof IntegerRangeType || $ rightType instanceof ConstantIntegerType || $ rightType instanceof UnionType)
1449
+ $ leftNumberType = $ leftType ->toNumber ();
1450
+ $ rightNumberType = $ rightType ->toNumber ();
1451
+
1452
+ if (($ leftNumberType instanceof IntegerRangeType || $ leftNumberType instanceof ConstantIntegerType || $ leftType instanceof UnionType) &&
1453
+ ($ rightNumberType instanceof IntegerRangeType || $ rightNumberType instanceof ConstantIntegerType || $ rightType instanceof UnionType)
1451
1454
) {
1452
1455
1453
- if ($ leftType instanceof ConstantIntegerType) {
1456
+ if ($ leftNumberType instanceof ConstantIntegerType) {
1454
1457
return $ this ->integerRangeMath (
1455
- $ leftType ,
1458
+ $ leftNumberType ,
1456
1459
$ expr ,
1457
- $ rightType ,
1460
+ $ rightNumberType ,
1458
1461
);
1459
1462
} elseif ($ leftType instanceof UnionType) {
1460
-
1461
1463
$ unionParts = [];
1462
1464
1463
1465
foreach ($ leftType ->getTypes () as $ type ) {
1464
- if ($ type instanceof IntegerRangeType || $ type instanceof ConstantIntegerType) {
1465
- $ unionParts [] = $ this ->integerRangeMath ($ type , $ expr , $ rightType );
1466
+ $ numberType = $ type ->toNumber ();
1467
+ if ($ numberType instanceof IntegerRangeType || $ numberType instanceof ConstantIntegerType) {
1468
+ $ unionParts [] = $ this ->integerRangeMath ($ numberType , $ expr , $ rightNumberType );
1466
1469
} else {
1467
1470
$ unionParts [] = $ type ;
1468
1471
}
@@ -1493,8 +1496,6 @@ private function resolveCommonMath(Expr\BinaryOp $expr, Type $leftType, Type $ri
1493
1496
return new ErrorType ();
1494
1497
}
1495
1498
1496
- $ leftNumberType = $ leftType ->toNumber ();
1497
- $ rightNumberType = $ rightType ->toNumber ();
1498
1499
if ($ leftNumberType instanceof ErrorType || $ rightNumberType instanceof ErrorType) {
1499
1500
return new ErrorType ();
1500
1501
}
0 commit comments