@@ -186,7 +186,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
186
186
}
187
187
override def slice (from : Int , until : Int ): ImmutableArray [T ] = {
188
188
val lo = scala.math.max(from, 0 )
189
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange[T ](unsafeArray, lo, until))
189
+ val hi = scala.math.min(until, length)
190
+ new ofRef(Arrays .copyOfRange[T ](unsafeArray, lo, hi))
190
191
}
191
192
}
192
193
@@ -201,7 +202,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
201
202
}
202
203
override def slice (from : Int , until : Int ): ImmutableArray [Byte ] = {
203
204
val lo = scala.math.max(from, 0 )
204
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
205
+ val hi = scala.math.min(until, length)
206
+ new ofByte(Arrays .copyOfRange(unsafeArray, lo, hi))
205
207
}
206
208
}
207
209
@@ -216,7 +218,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
216
218
}
217
219
override def slice (from : Int , until : Int ): ImmutableArray [Short ] = {
218
220
val lo = scala.math.max(from, 0 )
219
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
221
+ val hi = scala.math.min(until, length)
222
+ new ofShort(Arrays .copyOfRange(unsafeArray, lo, hi))
220
223
}
221
224
}
222
225
@@ -231,7 +234,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
231
234
}
232
235
override def slice (from : Int , until : Int ): ImmutableArray [Char ] = {
233
236
val lo = scala.math.max(from, 0 )
234
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
237
+ val hi = scala.math.min(until, length)
238
+ new ofChar(Arrays .copyOfRange(unsafeArray, lo, hi))
235
239
}
236
240
}
237
241
@@ -246,7 +250,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
246
250
}
247
251
override def slice (from : Int , until : Int ): ImmutableArray [Int ] = {
248
252
val lo = scala.math.max(from, 0 )
249
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
253
+ val hi = scala.math.min(until, length)
254
+ new ofInt(Arrays .copyOfRange(unsafeArray, lo, hi))
250
255
}
251
256
}
252
257
@@ -261,7 +266,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
261
266
}
262
267
override def slice (from : Int , until : Int ): ImmutableArray [Long ] = {
263
268
val lo = scala.math.max(from, 0 )
264
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
269
+ val hi = scala.math.min(until, length)
270
+ new ofLong(Arrays .copyOfRange(unsafeArray, lo, hi))
265
271
}
266
272
}
267
273
@@ -276,7 +282,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
276
282
}
277
283
override def slice (from : Int , until : Int ): ImmutableArray [Float ] = {
278
284
val lo = scala.math.max(from, 0 )
279
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
285
+ val hi = scala.math.min(until, length)
286
+ new ofFloat(Arrays .copyOfRange(unsafeArray, lo, hi))
280
287
}
281
288
}
282
289
@@ -291,7 +298,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
291
298
}
292
299
override def slice (from : Int , until : Int ): ImmutableArray [Double ] = {
293
300
val lo = scala.math.max(from, 0 )
294
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
301
+ val hi = scala.math.min(until, length)
302
+ new ofDouble(Arrays .copyOfRange(unsafeArray, lo, hi))
295
303
}
296
304
}
297
305
@@ -306,7 +314,8 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
306
314
}
307
315
override def slice (from : Int , until : Int ): ImmutableArray [Boolean ] = {
308
316
val lo = scala.math.max(from, 0 )
309
- ImmutableArray .unsafeWrapArray(Arrays .copyOfRange(unsafeArray, lo, until))
317
+ val hi = scala.math.min(until, length)
318
+ new ofBoolean(Arrays .copyOfRange(unsafeArray, lo, hi))
310
319
}
311
320
}
312
321
@@ -324,8 +333,9 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
324
333
// new ofUnit(util.Arrays.copyOfRange[Unit](array, from, until)) - Unit is special and doesnt compile
325
334
// cant use util.Arrays.copyOfRange[Unit](repr, from, until) - Unit is special and doesnt compile
326
335
val lo = scala.math.max(from, 0 )
327
- val res = new Array [Unit ](until- lo)
328
- System .arraycopy(unsafeArray, lo, res, 0 , until- lo)
336
+ val hi = scala.math.min(until, length)
337
+ val slicedLenght = hi - lo
338
+ val res = new Array [Unit ](slicedLenght)
329
339
new ofUnit(res)
330
340
}
331
341
}
0 commit comments