Skip to content

Commit fd1ef14

Browse files
staabmondrejmirtes
authored andcommitted
Prevent unnecessary work in NodeScopeResolver->processAssignVar()
1 parent c53546e commit fd1ef14

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/Analyser/NodeScopeResolver.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6018,15 +6018,16 @@ private function processAssignVar(
60186018
}
60196019

60206020
$truthySpecifiedTypes = $this->typeSpecifier->specifyTypesInCondition($scope, $assignedExpr, TypeSpecifierContext::createTruthy());
6021-
$falseySpecifiedTypes = $this->typeSpecifier->specifyTypesInCondition($scope, $assignedExpr, TypeSpecifierContext::createFalsey());
6022-
60236021
$truthyType = TypeCombinator::removeFalsey($type);
6024-
$falseyType = TypeCombinator::intersect($type, StaticTypeFactory::falsey());
6025-
60266022
$conditionalExpressions = $this->processSureTypesForConditionalExpressionsAfterAssign($scope, $var->name, $conditionalExpressions, $truthySpecifiedTypes, $truthyType);
60276023
$conditionalExpressions = $this->processSureNotTypesForConditionalExpressionsAfterAssign($scope, $var->name, $conditionalExpressions, $truthySpecifiedTypes, $truthyType);
6028-
$conditionalExpressions = $this->processSureTypesForConditionalExpressionsAfterAssign($scope, $var->name, $conditionalExpressions, $falseySpecifiedTypes, $falseyType);
6029-
$conditionalExpressions = $this->processSureNotTypesForConditionalExpressionsAfterAssign($scope, $var->name, $conditionalExpressions, $falseySpecifiedTypes, $falseyType);
6024+
6025+
if ($truthyType !== $type) {
6026+
$falseySpecifiedTypes = $this->typeSpecifier->specifyTypesInCondition($scope, $assignedExpr, TypeSpecifierContext::createFalsey());
6027+
$falseyType = TypeCombinator::intersect($type, StaticTypeFactory::falsey());
6028+
$conditionalExpressions = $this->processSureTypesForConditionalExpressionsAfterAssign($scope, $var->name, $conditionalExpressions, $falseySpecifiedTypes, $falseyType);
6029+
$conditionalExpressions = $this->processSureNotTypesForConditionalExpressionsAfterAssign($scope, $var->name, $conditionalExpressions, $falseySpecifiedTypes, $falseyType);
6030+
}
60306031

60316032
$this->callNodeCallback($nodeCallback, new VariableAssignNode($var, $assignedExpr), $scopeBeforeAssignEval, $storage);
60326033
$scope = $scope->assignVariable($var->name, $type, $scope->getNativeType($assignedExpr), TrinaryLogic::createYes());

0 commit comments

Comments
 (0)