Skip to content

Commit 9b23185

Browse files
authored
MutatingScope: Faster createConditionalExpressions
1 parent bcdde51 commit 9b23185

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/Analyser/ExpressionTypeHolder.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
final class ExpressionTypeHolder
1111
{
1212

13-
public function __construct(private Expr $expr, private Type $type, private TrinaryLogic $certainty)
13+
public function __construct(
14+
private readonly Expr $expr,
15+
private readonly Type $type,
16+
private readonly TrinaryLogic $certainty,
17+
)
1418
{
1519
}
1620

@@ -24,6 +28,15 @@ public static function createMaybe(Expr $expr, Type $type): self
2428
return new self($expr, $type, TrinaryLogic::createMaybe());
2529
}
2630

31+
public function equalTypes(self $other): bool
32+
{
33+
if ($this === $other) {
34+
return true;
35+
}
36+
37+
return $this->type === $other->type || $this->type->equals($other->type);
38+
}
39+
2740
public function equals(self $other): bool
2841
{
2942
if ($this === $other) {

src/Analyser/MutatingScope.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4014,7 +4014,7 @@ private function createConditionalExpressions(
40144014
continue;
40154015
}
40164016

4017-
if (!$mergedExpressionTypes[$exprString]->getType()->equals($holder->getType())) {
4017+
if (!$mergedExpressionTypes[$exprString]->equalTypes($holder)) {
40184018
continue;
40194019
}
40204020

@@ -4023,13 +4023,13 @@ private function createConditionalExpressions(
40234023

40244024
$typeGuards = [];
40254025
foreach ($newVariableTypes as $exprString => $holder) {
4026-
if (!$holder->getCertainty()->yes()) {
4026+
if (!array_key_exists($exprString, $mergedExpressionTypes)) {
40274027
continue;
40284028
}
4029-
if (!array_key_exists($exprString, $mergedExpressionTypes)) {
4029+
if (!$holder->getCertainty()->yes()) {
40304030
continue;
40314031
}
4032-
if ($mergedExpressionTypes[$exprString]->getType()->equals($holder->getType())) {
4032+
if ($mergedExpressionTypes[$exprString]->equalTypes($holder)) {
40334033
continue;
40344034
}
40354035

@@ -4194,7 +4194,7 @@ private function processFinallyScopeVariableTypeHolders(
41944194
foreach ($finallyVariableTypeHolders as $exprString => $variableTypeHolder) {
41954195
if (
41964196
isset($originalVariableTypeHolders[$exprString])
4197-
&& !$originalVariableTypeHolders[$exprString]->getType()->equals($variableTypeHolder->getType())
4197+
&& !$originalVariableTypeHolders[$exprString]->equalTypes($variableTypeHolder)
41984198
) {
41994199
$ourVariableTypeHolders[$exprString] = $variableTypeHolder;
42004200
continue;
@@ -4766,7 +4766,7 @@ private function compareVariableTypeHolders(array $variableTypeHolders, array $o
47664766
return false;
47674767
}
47684768

4769-
if (!$variableTypeHolder->getType()->equals($otherVariableTypeHolders[$variableExprString]->getType())) {
4769+
if (!$variableTypeHolder->equalTypes($otherVariableTypeHolders[$variableExprString])) {
47704770
return false;
47714771
}
47724772
}

0 commit comments

Comments
 (0)