@@ -241,7 +241,7 @@ public function getAllArrays(): array
241
241
}
242
242
243
243
$ array = $ builder ->getArray ();
244
- if (!$ array instanceof ConstantArrayType ) {
244
+ if (!$ array instanceof self ) {
245
245
throw new ShouldNotHappenException ();
246
246
}
247
247
@@ -995,15 +995,14 @@ public function sliceArray(Type $offsetType, Type $lengthType, TrinaryLogic $pre
995
995
$ isOptional = true ;
996
996
}
997
997
998
- $ builder ->setOffsetValueType ($ this ->keyTypes [$ i ], $ this ->valueTypes [$ i ], $ isOptional );
999
- }
998
+ $ offsetType = $ preserveKeys ->yes () || $ this ->keyTypes [$ i ]->isInteger ()->no ()
999
+ ? $ this ->keyTypes [$ i ]
1000
+ : null ;
1000
1001
1001
- $ slice = $ builder ->getArray ();
1002
- if (!$ slice instanceof self) {
1003
- throw new ShouldNotHappenException ();
1002
+ $ builder ->setOffsetValueType ($ offsetType , $ this ->valueTypes [$ i ], $ isOptional );
1004
1003
}
1005
1004
1006
- return $ preserveKeys -> yes () ? $ slice : $ slice -> reindex ();
1005
+ return $ builder -> getArray ();
1007
1006
}
1008
1007
1009
1008
public function isIterableAtLeastOnce (): TrinaryLogic
@@ -1149,7 +1148,7 @@ private function removeLastElements(int $length): self
1149
1148
}
1150
1149
1151
1150
/** @param positive-int $length */
1152
- private function removeFirstElements (int $ length , bool $ reindex = true ): self
1151
+ private function removeFirstElements (int $ length , bool $ reindex = true ): Type
1153
1152
{
1154
1153
$ builder = ConstantArrayTypeBuilder::createEmpty ();
1155
1154
@@ -1176,30 +1175,7 @@ private function removeFirstElements(int $length, bool $reindex = true): self
1176
1175
$ builder ->setOffsetValueType ($ keyType , $ valueType , $ isOptional );
1177
1176
}
1178
1177
1179
- $ array = $ builder ->getArray ();
1180
- if (!$ array instanceof self) {
1181
- throw new ShouldNotHappenException ();
1182
- }
1183
-
1184
- return $ array ;
1185
- }
1186
-
1187
- private function reindex (): self
1188
- {
1189
- $ keyTypes = [];
1190
- $ autoIndex = 0 ;
1191
-
1192
- foreach ($ this ->keyTypes as $ keyType ) {
1193
- if (!$ keyType instanceof ConstantIntegerType) {
1194
- $ keyTypes [] = $ keyType ;
1195
- continue ;
1196
- }
1197
-
1198
- $ keyTypes [] = new ConstantIntegerType ($ autoIndex );
1199
- $ autoIndex ++;
1200
- }
1201
-
1202
- return new self ($ keyTypes , $ this ->valueTypes , [$ autoIndex ], $ this ->optionalKeys , TrinaryLogic::createYes ());
1178
+ return $ builder ->getArray ();
1203
1179
}
1204
1180
1205
1181
public function toBoolean (): BooleanType
0 commit comments