Skip to content

Commit f149a5c

Browse files
Fix makeOffsetRequired
1 parent 3d1cd0e commit f149a5c

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

src/Type/Constant/ConstantArrayType.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1805,18 +1805,33 @@ public function makeOffsetRequired(Type $offsetType): self
18051805
{
18061806
$offsetType = $offsetType->toArrayKey();
18071807
$optionalKeys = $this->optionalKeys;
1808+
$isList = $this->isList->yes();
18081809
foreach ($this->keyTypes as $i => $keyType) {
18091810
if (!$keyType->equals($offsetType)) {
18101811
continue;
18111812
}
18121813

1814+
$keyValue = $keyType->getValue();
1815+
$changed = false;
18131816
foreach ($optionalKeys as $j => $key) {
1814-
if ($i === $key) {
1817+
if (
1818+
$i === $key
1819+
|| (
1820+
$isList
1821+
&& \is_int($keyValue)
1822+
&& \is_int($this->keyTypes[$key]->getValue())
1823+
&& $this->keyTypes[$key]->getValue() < $keyValue
1824+
)
1825+
) {
18151826
unset($optionalKeys[$j]);
1816-
return new self($this->keyTypes, $this->valueTypes, $this->nextAutoIndexes, array_values($optionalKeys), $this->isList);
1827+
$changed = true;
18171828
}
18181829
}
18191830

1831+
if ($changed) {
1832+
return new self($this->keyTypes, $this->valueTypes, $this->nextAutoIndexes, array_values($optionalKeys), $this->isList);
1833+
}
1834+
18201835
break;
18211836
}
18221837

0 commit comments

Comments
 (0)