File tree Expand file tree Collapse file tree 1 file changed +11
-2
lines changed Expand file tree Collapse file tree 1 file changed +11
-2
lines changed Original file line number Diff line number Diff line change 101
101
class MutatingScope implements Scope
102
102
{
103
103
104
+ public const CALCULATE_SCALARS_LIMIT = 128 ;
105
+
104
106
private const OPERATOR_SIGIL_MAP = [
105
107
Node \Expr \AssignOp \Plus::class => '+ ' ,
106
108
Node \Expr \AssignOp \Minus::class => '- ' ,
@@ -1099,11 +1101,18 @@ private function resolveType(Expr $node): Type
1099
1101
$ leftTypes = TypeUtils::getConstantScalars ($ this ->getType ($ left ));
1100
1102
$ rightTypes = TypeUtils::getConstantScalars ($ this ->getType ($ right ));
1101
1103
1102
- if (count ($ leftTypes ) > 0 && count ($ rightTypes ) > 0 ) {
1104
+ $ leftTypesCount = count ($ leftTypes );
1105
+ $ rightTypesCount = count ($ rightTypes );
1106
+ if ($ leftTypesCount > 0 && $ rightTypesCount > 0 ) {
1103
1107
$ resultTypes = [];
1108
+ $ generalize = $ leftTypesCount * $ rightTypesCount > self ::CALCULATE_SCALARS_LIMIT ;
1104
1109
foreach ($ leftTypes as $ leftType ) {
1105
1110
foreach ($ rightTypes as $ rightType ) {
1106
- $ resultTypes [] = $ this ->calculateFromScalars ($ node , $ leftType , $ rightType );
1111
+ $ resultType = $ this ->calculateFromScalars ($ node , $ leftType , $ rightType );
1112
+ if ($ generalize ) {
1113
+ $ resultType = TypeUtils::generalizeType ($ resultType );
1114
+ }
1115
+ $ resultTypes [] = $ resultType ;
1107
1116
}
1108
1117
}
1109
1118
return TypeCombinator::union (...$ resultTypes );
You can’t perform that action at this time.
0 commit comments