Skip to content

Commit 84b61d4

Browse files
committed
Fix ArrayType being created with never value type
1 parent 23d1064 commit 84b61d4

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/Analyser/NodeScopeResolver.php

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6219,24 +6219,24 @@ private function produceArrayDimFetchAssignValueToWrite(array $dimFetchStack, ar
62196219
continue;
62206220
}
62216221

6222-
if ($scope->hasExpressionType($arrayDimFetch)->yes()) { // keep list for $list[$index] assignments
6222+
if (!$arrayDimFetch->dim instanceof BinaryOp\Plus) {
6223+
continue;
6224+
}
6225+
6226+
if ( // keep list for $list[$index + 1] assignments
6227+
$arrayDimFetch->dim->right instanceof Variable
6228+
&& $arrayDimFetch->dim->left instanceof Node\Scalar\Int_
6229+
&& $arrayDimFetch->dim->left->value === 1
6230+
&& $scope->hasExpressionType(new ArrayDimFetch($arrayDimFetch->var, $arrayDimFetch->dim->right))->yes()
6231+
) {
6232+
$valueToWrite = TypeCombinator::intersect($valueToWrite, new AccessoryArrayListType());
6233+
} elseif ( // keep list for $list[1 + $index] assignments
6234+
$arrayDimFetch->dim->left instanceof Variable
6235+
&& $arrayDimFetch->dim->right instanceof Node\Scalar\Int_
6236+
&& $arrayDimFetch->dim->right->value === 1
6237+
&& $scope->hasExpressionType(new ArrayDimFetch($arrayDimFetch->var, $arrayDimFetch->dim->left))->yes()
6238+
) {
62236239
$valueToWrite = TypeCombinator::intersect($valueToWrite, new AccessoryArrayListType());
6224-
} elseif ($arrayDimFetch->dim instanceof BinaryOp\Plus) {
6225-
if ( // keep list for $list[$index + 1] assignments
6226-
$arrayDimFetch->dim->right instanceof Variable
6227-
&& $arrayDimFetch->dim->left instanceof Node\Scalar\Int_
6228-
&& $arrayDimFetch->dim->left->value === 1
6229-
&& $scope->hasExpressionType(new ArrayDimFetch($arrayDimFetch->var, $arrayDimFetch->dim->right))->yes()
6230-
) {
6231-
$valueToWrite = TypeCombinator::intersect($valueToWrite, new AccessoryArrayListType());
6232-
} elseif ( // keep list for $list[1 + $index] assignments
6233-
$arrayDimFetch->dim->left instanceof Variable
6234-
&& $arrayDimFetch->dim->right instanceof Node\Scalar\Int_
6235-
&& $arrayDimFetch->dim->right->value === 1
6236-
&& $scope->hasExpressionType(new ArrayDimFetch($arrayDimFetch->var, $arrayDimFetch->dim->left))->yes()
6237-
) {
6238-
$valueToWrite = TypeCombinator::intersect($valueToWrite, new AccessoryArrayListType());
6239-
}
62406240
}
62416241
}
62426242

0 commit comments

Comments
 (0)