Skip to content

Commit ea766a6

Browse files
committed
Faster MutatingScope->mergeWith(Scope)
1 parent faef8e0 commit ea766a6

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

src/Analyser/ExpressionTypeHolder.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public function equals(self $other): bool
3636
public function and(self $other): self
3737
{
3838
if ($this->type->equals($other->type)) {
39+
if ($this->certainty->equals($other->certainty)) {
40+
return $this;
41+
}
42+
3943
$type = $this->type;
4044
} else {
4145
$type = TypeCombinator::union($this->type, $other->type);

src/Analyser/MutatingScope.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4773,6 +4773,11 @@ private function mergeVariableHolders(array $ourVariableTypeHolders, array $thei
47734773
$intersectedVariableTypeHolders = [];
47744774
foreach ($ourVariableTypeHolders as $exprString => $variableTypeHolder) {
47754775
if (isset($theirVariableTypeHolders[$exprString])) {
4776+
if ($variableTypeHolder === $theirVariableTypeHolders[$exprString]) {
4777+
$intersectedVariableTypeHolders[$exprString] = $variableTypeHolder;
4778+
continue;
4779+
}
4780+
47764781
$intersectedVariableTypeHolders[$exprString] = $variableTypeHolder->and($theirVariableTypeHolders[$exprString]);
47774782
} else {
47784783
$intersectedVariableTypeHolders[$exprString] = ExpressionTypeHolder::createMaybe($variableTypeHolder->getExpr(), $variableTypeHolder->getType());

0 commit comments

Comments
 (0)