Skip to content

Commit f57b08f

Browse files
committed
Solve FNSR memory problem
1 parent da8e93e commit f57b08f

File tree

4 files changed

+19
-18
lines changed

4 files changed

+19
-18
lines changed

src/Analyser/ExpressionResultStorage.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
final class ExpressionResultStorage
1414
{
1515

16-
/** @var SplObjectStorage<Expr, ExpressionResult> */
16+
/** @var SplObjectStorage<Expr, Scope> */
1717
private SplObjectStorage $results;
1818

19-
/** @var array<array{fiber: Fiber<mixed, ExpressionResult, null, ExpressionAnalysisRequest>, request: ExpressionAnalysisRequest}> */
19+
/** @var array<array{fiber: Fiber<mixed, Scope, null, ExpressionAnalysisRequest>, request: ExpressionAnalysisRequest}> */
2020
public array $pendingFibers = [];
2121

2222
public function __construct()
@@ -31,15 +31,15 @@ public function duplicate(): self
3131
return $new;
3232
}
3333

34-
public function storeResult(Expr $expr, ExpressionResult $result): void
34+
public function storeResult(Expr $expr, Scope $scope): void
3535
{
3636
if (isset($this->results[$expr])) {
37-
throw new ShouldNotHappenException(sprintf('already stored %s on line %d', get_class($expr), $expr->getStartLine()));
37+
//throw new ShouldNotHappenException(sprintf('already stored %s on line %d', get_class($expr), $expr->getStartLine()));
3838
}
39-
$this->results[$expr] = $result;
39+
$this->results[$expr] = $scope;
4040
}
4141

42-
public function findResult(Expr $expr): ?ExpressionResult
42+
public function findResult(Expr $expr): ?Scope
4343
{
4444
return $this->results[$expr] ?? null;
4545
}

src/Analyser/Fiber/FiberNodeScopeResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ protected function processPendingFibers(ExpressionResultStorage $storage): void
103103
}
104104
}
105105

106-
protected function processPendingFibersForRequestedExpr(ExpressionResultStorage $storage, Expr $expr, ExpressionResult $result): void
106+
protected function processPendingFibersForRequestedExpr(ExpressionResultStorage $storage, Expr $expr, Scope $result): void
107107
{
108108
$restartLoop = true;
109109

src/Analyser/Fiber/FiberScope.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use PhpParser\Node\Expr;
77
use PHPStan\Analyser\ExpressionResult;
88
use PHPStan\Analyser\MutatingScope;
9+
use PHPStan\Analyser\Scope;
910
use PHPStan\Type\Type;
1011

1112
final class FiberScope extends MutatingScope
@@ -41,12 +42,12 @@ public function toMutatingScope(): MutatingScope
4142
/** @api */
4243
public function getType(Expr $node): Type
4344
{
44-
/** @var ExpressionResult $exprResult */
45+
/** @var Scope $exprResult */
4546
$exprResult = Fiber::suspend(
4647
new ExpressionAnalysisRequest($node, $this),
4748
);
4849

49-
return $exprResult->getBeforeScope()->toMutatingScope()->getType($node);
50+
return $exprResult->toMutatingScope()->getType($node);
5051
}
5152

5253
public function getScopeType(Expr $expr): Type
@@ -62,22 +63,22 @@ public function getScopeNativeType(Expr $expr): Type
6263
/** @api */
6364
public function getNativeType(Expr $expr): Type
6465
{
65-
/** @var ExpressionResult $exprResult */
66+
/** @var Scope $exprResult */
6667
$exprResult = Fiber::suspend(
6768
new ExpressionAnalysisRequest($expr, $this),
6869
);
6970

70-
return $exprResult->getBeforeScope()->toMutatingScope()->getNativeType($expr);
71+
return $exprResult->toMutatingScope()->getNativeType($expr);
7172
}
7273

7374
public function getKeepVoidType(Expr $node): Type
7475
{
75-
/** @var ExpressionResult $exprResult */
76+
/** @var Scope $exprResult */
7677
$exprResult = Fiber::suspend(
7778
new ExpressionAnalysisRequest($node, $this),
7879
);
7980

80-
return $exprResult->getBeforeScope()->toMutatingScope()->getKeepVoidType($node);
81+
return $exprResult->toMutatingScope()->getKeepVoidType($node);
8182
}
8283

8384
}

src/Analyser/NodeScopeResolver.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -344,15 +344,15 @@ public function processNodes(
344344

345345
private function storeResult(ExpressionResultStorage $storage, Expr $expr, ExpressionResult $result): void
346346
{
347-
$storage->storeResult($expr, $result);
348-
$this->processPendingFibersForRequestedExpr($storage, $expr, $result);
347+
$storage->storeResult($expr, $result->getBeforeScope());
348+
$this->processPendingFibersForRequestedExpr($storage, $expr, $result->getBeforeScope());
349349
}
350350

351351
protected function processPendingFibers(ExpressionResultStorage $storage): void
352352
{
353353
}
354354

355-
protected function processPendingFibersForRequestedExpr(ExpressionResultStorage $storage, Expr $expr, ExpressionResult $result): void
355+
protected function processPendingFibersForRequestedExpr(ExpressionResultStorage $storage, Expr $expr, Scope $result): void
356356
{
357357
}
358358

@@ -2545,13 +2545,13 @@ public function processExprNode(
25452545
ExpressionContext $context,
25462546
): ExpressionResult
25472547
{
2548-
$existingExprResult = $storage->findResult($expr);
2548+
/*$existingExprResult = $storage->findResult($expr);
25492549
if ($existingExprResult !== null) {
25502550
if ($nodeCallback instanceof ShallowNodeCallback) {
25512551
return $existingExprResult;
25522552
}
25532553
throw new ShouldNotHappenException(sprintf('Expr %s on line %d has already been analysed', get_class($expr), $expr->getStartLine()));
2554-
}
2554+
}*/
25552555

25562556
if ($expr instanceof Expr\CallLike && $expr->isFirstClassCallable()) {
25572557
if ($expr instanceof FuncCall) {

0 commit comments

Comments
 (0)