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 101101class MutatingScope implements Scope
102102{
103103
104+ public const CALCULATE_SCALARS_LIMIT = 128 ;
105+
104106 private const OPERATOR_SIGIL_MAP = [
105107 Node \Expr \AssignOp \Plus::class => '+ ' ,
106108 Node \Expr \AssignOp \Minus::class => '- ' ,
@@ -1099,11 +1101,18 @@ private function resolveType(Expr $node): Type
10991101 $ leftTypes = TypeUtils::getConstantScalars ($ this ->getType ($ left ));
11001102 $ rightTypes = TypeUtils::getConstantScalars ($ this ->getType ($ right ));
11011103
1102- if (count ($ leftTypes ) > 0 && count ($ rightTypes ) > 0 ) {
1104+ $ leftTypesCount = count ($ leftTypes );
1105+ $ rightTypesCount = count ($ rightTypes );
1106+ if ($ leftTypesCount > 0 && $ rightTypesCount > 0 ) {
11031107 $ resultTypes = [];
1108+ $ generalize = $ leftTypesCount * $ rightTypesCount > self ::CALCULATE_SCALARS_LIMIT ;
11041109 foreach ($ leftTypes as $ leftType ) {
11051110 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 ;
11071116 }
11081117 }
11091118 return TypeCombinator::union (...$ resultTypes );
You can’t perform that action at this time.
0 commit comments