Skip to content

Commit 07e1e1d

Browse files
committed
Optimize shouldInvalidateExpression
1 parent 94e85e8 commit 07e1e1d

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/Analyser/MutatingScope.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3455,7 +3455,7 @@ public function invalidateExpression(Expr $expressionToInvalidate, bool $require
34553455

34563456
foreach ($expressionTypes as $exprString => $exprTypeHolder) {
34573457
$exprExpr = $exprTypeHolder->getExpr();
3458-
if (!$this->shouldInvalidateExpression($exprStringToInvalidate, $expressionToInvalidate, $exprExpr, $requireMoreCharacters)) {
3458+
if (!$this->shouldInvalidateExpression($exprStringToInvalidate, $expressionToInvalidate, $exprExpr, $exprString, $requireMoreCharacters)) {
34593459
continue;
34603460
}
34613461

@@ -3469,14 +3469,15 @@ public function invalidateExpression(Expr $expressionToInvalidate, bool $require
34693469
if (count($holders) === 0) {
34703470
continue;
34713471
}
3472-
if ($this->shouldInvalidateExpression($exprStringToInvalidate, $expressionToInvalidate, $holders[array_key_first($holders)]->getTypeHolder()->getExpr())) {
3472+
$firstExpr = $holders[array_key_first($holders)]->getTypeHolder()->getExpr();
3473+
if ($this->shouldInvalidateExpression($exprStringToInvalidate, $expressionToInvalidate, $firstExpr, $this->getNodeKey($firstExpr))) {
34733474
$invalidated = true;
34743475
continue;
34753476
}
34763477
foreach ($holders as $holder) {
34773478
$conditionalTypeHolders = $holder->getConditionExpressionTypeHolders();
3478-
foreach ($conditionalTypeHolders as $conditionalTypeHolder) {
3479-
if ($this->shouldInvalidateExpression($exprStringToInvalidate, $expressionToInvalidate, $conditionalTypeHolder->getExpr())) {
3479+
foreach ($conditionalTypeHolders as $conditionalTypeHolderExprString => $conditionalTypeHolder) {
3480+
if ($this->shouldInvalidateExpression($exprStringToInvalidate, $expressionToInvalidate, $conditionalTypeHolder->getExpr(), $conditionalTypeHolderExprString)) {
34803481
$invalidated = true;
34813482
continue 3;
34823483
}
@@ -3509,15 +3510,15 @@ public function invalidateExpression(Expr $expressionToInvalidate, bool $require
35093510
);
35103511
}
35113512

3512-
private function shouldInvalidateExpression(string $exprStringToInvalidate, Expr $exprToInvalidate, Expr $expr, bool $requireMoreCharacters = false): bool
3513+
private function shouldInvalidateExpression(string $exprStringToInvalidate, Expr $exprToInvalidate, Expr $expr, string $exprString, bool $requireMoreCharacters = false): bool
35133514
{
3514-
if ($requireMoreCharacters && $exprStringToInvalidate === $this->getNodeKey($expr)) {
3515+
if ($requireMoreCharacters && $exprStringToInvalidate === $exprString) {
35153516
return false;
35163517
}
35173518

35183519
// Variables will not contain traversable expressions. skip the NodeFinder overhead
35193520
if ($expr instanceof Variable && is_string($expr->name) && !$requireMoreCharacters) {
3520-
return $exprStringToInvalidate === $this->getNodeKey($expr);
3521+
return $exprStringToInvalidate === $exprString;
35213522
}
35223523

35233524
$nodeFinder = new NodeFinder();
@@ -4338,7 +4339,7 @@ private function generalizeVariableTypeHolders(
43384339
$newVariableTypeHolders = [];
43394340
foreach ($variableTypeHolders as $variableExprString => $variableTypeHolder) {
43404341
foreach ($generalizedExpressions as $generalizedExprString => $generalizedExpr) {
4341-
if (!$this->shouldInvalidateExpression($generalizedExprString, $generalizedExpr, $variableTypeHolder->getExpr())) {
4342+
if (!$this->shouldInvalidateExpression($generalizedExprString, $generalizedExpr, $variableTypeHolder->getExpr(), $variableExprString)) {
43424343
continue;
43434344
}
43444345

0 commit comments

Comments
 (0)