Skip to content

Commit ea924ef

Browse files
phpstan-botclaude
andcommitted
Simplify: use $scopeBeforeArgs instead of per-argument findBeforeScope
Instead of looking up the before-scope for each individual argument via ExpressionResultStorage::findBeforeScope(), save the scope once before processArgs and use that single scope for all argument type evaluations. This is simpler and equivalent: the scope before args correctly reflects the types at evaluation time for all value arguments. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 76e96b7 commit ea924ef

1 file changed

Lines changed: 7 additions & 12 deletions

File tree

src/Analyser/ExprHandler/FuncCallHandler.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ public function processExpr(NodeScopeResolver $nodeScopeResolver, Stmt $stmt, Ex
265265
}
266266
}
267267

268+
$scopeBeforeArgs = $scope;
268269
$argsResult = $nodeScopeResolver->processArgs($stmt, $functionReflection, null, $parametersAcceptor, $normalizedExpr, $scope, $storage, $nodeCallbackForArgs, $context);
269270
$scope = $argsResult->getScope();
270271
$hasYield = $argsResult->hasYield();
@@ -393,9 +394,8 @@ public function processExpr(NodeScopeResolver $nodeScopeResolver, Stmt $stmt, Ex
393394
$callArgTypes = [];
394395
$callArgNativeTypes = [];
395396
foreach ($callArgs as $callArg) {
396-
$argBeforeScope = $storage->findBeforeScope($callArg->value) ?? $scope;
397-
$callArgTypes[] = $argBeforeScope->getType($callArg->value);
398-
$callArgNativeTypes[] = $argBeforeScope->getNativeType($callArg->value);
397+
$callArgTypes[] = $scopeBeforeArgs->getType($callArg->value);
398+
$callArgNativeTypes[] = $scopeBeforeArgs->getNativeType($callArg->value);
399399
}
400400

401401
$scope = $nodeScopeResolver->processVirtualAssign(
@@ -443,23 +443,18 @@ public function processExpr(NodeScopeResolver $nodeScopeResolver, Stmt $stmt, Ex
443443
$arrayArgType = $scope->getType($arrayArg);
444444
$arrayArgNativeType = $scope->getNativeType($arrayArg);
445445

446-
$offsetArg = $normalizedExpr->getArgs()[1]->value;
447-
$offsetBeforeScope = $storage->findBeforeScope($offsetArg) ?? $scope;
448-
$offsetType = $offsetBeforeScope->getType($offsetArg);
446+
$offsetType = $scopeBeforeArgs->getType($normalizedExpr->getArgs()[1]->value);
449447

450448
if (isset($normalizedExpr->getArgs()[2])) {
451-
$lengthArg = $normalizedExpr->getArgs()[2]->value;
452-
$lengthBeforeScope = $storage->findBeforeScope($lengthArg) ?? $scope;
453-
$lengthType = $lengthBeforeScope->getType($lengthArg);
449+
$lengthType = $scopeBeforeArgs->getType($normalizedExpr->getArgs()[2]->value);
454450
} else {
455451
$lengthType = new NullType();
456452
}
457453

458454
if (isset($normalizedExpr->getArgs()[3])) {
459455
$replacementArg = $normalizedExpr->getArgs()[3]->value;
460-
$replacementBeforeScope = $storage->findBeforeScope($replacementArg) ?? $scope;
461-
$replacementType = $replacementBeforeScope->getType($replacementArg);
462-
$replacementNativeType = $replacementBeforeScope->getNativeType($replacementArg);
456+
$replacementType = $scopeBeforeArgs->getType($replacementArg);
457+
$replacementNativeType = $scopeBeforeArgs->getNativeType($replacementArg);
463458
} else {
464459
$replacementType = new ConstantArrayType([], []);
465460
$replacementNativeType = new ConstantArrayType([], []);

0 commit comments

Comments
 (0)