|
162 | 162 | use function ltrim; |
163 | 163 | use function md5; |
164 | 164 | use function sprintf; |
165 | | -use function str_contains; |
166 | 165 | use function str_decrement; |
167 | 166 | use function str_increment; |
168 | 167 | use function str_starts_with; |
@@ -5301,35 +5300,34 @@ private function generalizeVariableTypeHolders( |
5301 | 5300 | uksort($variableTypeHolders, static fn (string $exprA, string $exprB): int => strlen($exprA) <=> strlen($exprB)); |
5302 | 5301 |
|
5303 | 5302 | $generalizedExpressions = []; |
| 5303 | + $newVariableTypeHolders = []; |
5304 | 5304 | foreach ($variableTypeHolders as $variableExprString => $variableTypeHolder) { |
| 5305 | + foreach ($generalizedExpressions as $generalizedExprString => $generalizedTypeHolder) { |
| 5306 | + if (!$this->shouldInvalidateExpression($generalizedExprString, $generalizedTypeHolder->getExpr(), $variableTypeHolder->getExpr())) { |
| 5307 | + continue; |
| 5308 | + } |
| 5309 | + |
| 5310 | + continue 2; |
| 5311 | + } |
5305 | 5312 | if (!isset($otherVariableTypeHolders[$variableExprString])) { |
| 5313 | + $newVariableTypeHolders[$variableExprString] = $variableTypeHolder; |
5306 | 5314 | continue; |
5307 | 5315 | } |
5308 | 5316 |
|
5309 | | - foreach ($generalizedExpressions as $changedExpr) { |
5310 | | - if ( |
5311 | | - str_contains($variableExprString, $changedExpr . '[') |
5312 | | - || str_contains($variableExprString, '[' . $changedExpr . ']') |
5313 | | - ) { |
5314 | | - unset($variableTypeHolders[$variableExprString]); |
5315 | | - continue 2; |
5316 | | - } |
5317 | | - } |
5318 | | - |
5319 | 5317 | $generalizedType = $this->generalizeType($variableTypeHolder->getType(), $otherVariableTypeHolders[$variableExprString]->getType(), 0); |
5320 | 5318 | if ( |
5321 | 5319 | !$generalizedType->equals($variableTypeHolder->getType()) |
5322 | 5320 | ) { |
5323 | | - $generalizedExpressions[] = $variableExprString; |
| 5321 | + $generalizedExpressions[$variableExprString] = $variableTypeHolder; |
5324 | 5322 | } |
5325 | | - $variableTypeHolders[$variableExprString] = new ExpressionTypeHolder( |
| 5323 | + $newVariableTypeHolders[$variableExprString] = new ExpressionTypeHolder( |
5326 | 5324 | $variableTypeHolder->getExpr(), |
5327 | 5325 | $generalizedType, |
5328 | 5326 | $variableTypeHolder->getCertainty(), |
5329 | 5327 | ); |
5330 | 5328 | } |
5331 | 5329 |
|
5332 | | - return $variableTypeHolders; |
| 5330 | + return $newVariableTypeHolders; |
5333 | 5331 | } |
5334 | 5332 |
|
5335 | 5333 | private function generalizeType(Type $a, Type $b, int $depth): Type |
|
0 commit comments