Skip to content

Commit b2956fc

Browse files
staabmondrejmirtes
authored andcommitted
NodeScopeResolver: Move condition out of loop
1 parent 9487260 commit b2956fc

1 file changed

Lines changed: 67 additions & 68 deletions

File tree

src/Analyser/NodeScopeResolver.php

Lines changed: 67 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -5767,85 +5767,84 @@ private function processArgs(
57675767

57685768
$scope = $scope->restoreOriginalScopeAfterClosureBind($originalScope);
57695769
}
5770-
foreach ($args as $i => $arg) {
5771-
if (!isset($parameters) || $parametersAcceptor === null) {
5772-
continue;
5773-
}
5774-
5775-
$byRefType = new MixedType();
5776-
$assignByReference = false;
5777-
$currentParameter = null;
5778-
if (isset($parameters[$i])) {
5779-
$currentParameter = $parameters[$i];
5780-
} elseif (count($parameters) > 0 && $parametersAcceptor->isVariadic()) {
5781-
$currentParameter = array_last($parameters);
5782-
}
57835770

5784-
if ($currentParameter !== null) {
5785-
$assignByReference = $currentParameter->passedByReference()->createsNewVariable();
5786-
if ($assignByReference) {
5787-
if ($currentParameter instanceof ExtendedParameterReflection && $currentParameter->getOutType() !== null) {
5788-
$byRefType = $currentParameter->getOutType();
5789-
} elseif (
5790-
$calleeReflection instanceof MethodReflection
5791-
&& !$calleeReflection->getDeclaringClass()->isBuiltin()
5792-
) {
5793-
$byRefType = $currentParameter->getType();
5794-
} elseif (
5795-
$calleeReflection instanceof FunctionReflection
5796-
&& !$calleeReflection->isBuiltin()
5797-
) {
5798-
$byRefType = $currentParameter->getType();
5799-
}
5771+
if (isset($parameters) && $parametersAcceptor !== null) {
5772+
foreach ($args as $i => $arg) {
5773+
$byRefType = new MixedType();
5774+
$assignByReference = false;
5775+
$currentParameter = null;
5776+
if (isset($parameters[$i])) {
5777+
$currentParameter = $parameters[$i];
5778+
} elseif (count($parameters) > 0 && $parametersAcceptor->isVariadic()) {
5779+
$currentParameter = array_last($parameters);
58005780
}
5801-
}
58025781

5803-
if ($assignByReference) {
5804-
if ($currentParameter === null) {
5805-
throw new ShouldNotHappenException();
5782+
if ($currentParameter !== null) {
5783+
$assignByReference = $currentParameter->passedByReference()->createsNewVariable();
5784+
if ($assignByReference) {
5785+
if ($currentParameter instanceof ExtendedParameterReflection && $currentParameter->getOutType() !== null) {
5786+
$byRefType = $currentParameter->getOutType();
5787+
} elseif (
5788+
$calleeReflection instanceof MethodReflection
5789+
&& !$calleeReflection->getDeclaringClass()->isBuiltin()
5790+
) {
5791+
$byRefType = $currentParameter->getType();
5792+
} elseif (
5793+
$calleeReflection instanceof FunctionReflection
5794+
&& !$calleeReflection->isBuiltin()
5795+
) {
5796+
$byRefType = $currentParameter->getType();
5797+
}
5798+
}
58065799
}
58075800

5808-
$argValue = $arg->value;
5809-
if (!$argValue instanceof Variable || $argValue->name !== 'this') {
5810-
$paramOutType = $this->getParameterOutExtensionsType($callLike, $calleeReflection, $currentParameter, $scope);
5811-
if ($paramOutType !== null) {
5812-
$byRefType = $paramOutType;
5801+
if ($assignByReference) {
5802+
if ($currentParameter === null) {
5803+
throw new ShouldNotHappenException();
58135804
}
58145805

5815-
$scope = $this->processVirtualAssign(
5816-
$scope,
5817-
$storage,
5818-
$stmt,
5819-
$argValue,
5820-
new TypeExpr($byRefType),
5821-
$nodeCallback,
5822-
)->getScope();
5823-
$scope = $this->lookForUnsetAllowedUndefinedExpressions($scope, $argValue);
5824-
}
5825-
} elseif ($calleeReflection !== null && $calleeReflection->hasSideEffects()->yes()) {
5826-
$argType = $scope->getType($arg->value);
5827-
if (!$argType->isObject()->no()) {
5828-
$nakedReturnType = null;
5829-
if ($nakedMethodReflection !== null) {
5830-
$nakedParametersAcceptor = ParametersAcceptorSelector::selectFromArgs(
5806+
$argValue = $arg->value;
5807+
if (!$argValue instanceof Variable || $argValue->name !== 'this') {
5808+
$paramOutType = $this->getParameterOutExtensionsType($callLike, $calleeReflection, $currentParameter, $scope);
5809+
if ($paramOutType !== null) {
5810+
$byRefType = $paramOutType;
5811+
}
5812+
5813+
$scope = $this->processVirtualAssign(
58315814
$scope,
5832-
$args,
5833-
$nakedMethodReflection->getVariants(),
5834-
$nakedMethodReflection->getNamedArgumentsVariants(),
5835-
);
5836-
$nakedReturnType = $nakedParametersAcceptor->getReturnType();
5837-
}
5838-
if (
5839-
$nakedReturnType === null
5840-
|| !(new ThisType($nakedMethodReflection->getDeclaringClass()))->isSuperTypeOf($nakedReturnType)->yes()
5841-
|| $nakedMethodReflection->isPure()->no()
5842-
) {
5815+
$storage,
5816+
$stmt,
5817+
$argValue,
5818+
new TypeExpr($byRefType),
5819+
$nodeCallback,
5820+
)->getScope();
5821+
$scope = $this->lookForUnsetAllowedUndefinedExpressions($scope, $argValue);
5822+
}
5823+
} elseif ($calleeReflection !== null && $calleeReflection->hasSideEffects()->yes()) {
5824+
$argType = $scope->getType($arg->value);
5825+
if (!$argType->isObject()->no()) {
5826+
$nakedReturnType = null;
5827+
if ($nakedMethodReflection !== null) {
5828+
$nakedParametersAcceptor = ParametersAcceptorSelector::selectFromArgs(
5829+
$scope,
5830+
$args,
5831+
$nakedMethodReflection->getVariants(),
5832+
$nakedMethodReflection->getNamedArgumentsVariants(),
5833+
);
5834+
$nakedReturnType = $nakedParametersAcceptor->getReturnType();
5835+
}
5836+
if (
5837+
$nakedReturnType === null
5838+
|| !(new ThisType($nakedMethodReflection->getDeclaringClass()))->isSuperTypeOf($nakedReturnType)->yes()
5839+
|| $nakedMethodReflection->isPure()->no()
5840+
) {
5841+
$this->callNodeCallback($nodeCallback, new InvalidateExprNode($arg->value), $scope, $storage);
5842+
$scope = $scope->invalidateExpression($arg->value, true);
5843+
}
5844+
} elseif (!(new ResourceType())->isSuperTypeOf($argType)->no()) {
58435845
$this->callNodeCallback($nodeCallback, new InvalidateExprNode($arg->value), $scope, $storage);
58445846
$scope = $scope->invalidateExpression($arg->value, true);
58455847
}
5846-
} elseif (!(new ResourceType())->isSuperTypeOf($argType)->no()) {
5847-
$this->callNodeCallback($nodeCallback, new InvalidateExprNode($arg->value), $scope, $storage);
5848-
$scope = $scope->invalidateExpression($arg->value, true);
58495848
}
58505849
}
58515850
}

0 commit comments

Comments
 (0)