@@ -187,7 +187,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
187
187
override def slice (from : Int , until : Int ): ImmutableArray [T ] = {
188
188
val lo = scala.math.max(from, 0 )
189
189
val hi = scala.math.min(until, length)
190
- new ofRef(Arrays .copyOfRange[T ](unsafeArray, lo, hi))
190
+ if (lo >= hi)
191
+ emptyImpl
192
+ else
193
+ new ofRef(Arrays .copyOfRange[T ](unsafeArray, lo, hi))
191
194
}
192
195
}
193
196
@@ -203,7 +206,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
203
206
override def slice (from : Int , until : Int ): ImmutableArray [Byte ] = {
204
207
val lo = scala.math.max(from, 0 )
205
208
val hi = scala.math.min(until, length)
206
- new ofByte(Arrays .copyOfRange(unsafeArray, lo, hi))
209
+ if (lo >= hi)
210
+ emptyImpl
211
+ else
212
+ new ofByte(Arrays .copyOfRange(unsafeArray, lo, hi))
207
213
}
208
214
}
209
215
@@ -219,7 +225,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
219
225
override def slice (from : Int , until : Int ): ImmutableArray [Short ] = {
220
226
val lo = scala.math.max(from, 0 )
221
227
val hi = scala.math.min(until, length)
222
- new ofShort(Arrays .copyOfRange(unsafeArray, lo, hi))
228
+ if (lo > hi)
229
+ emptyImpl
230
+ else
231
+ new ofShort(Arrays .copyOfRange(unsafeArray, lo, hi))
223
232
}
224
233
}
225
234
@@ -235,7 +244,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
235
244
override def slice (from : Int , until : Int ): ImmutableArray [Char ] = {
236
245
val lo = scala.math.max(from, 0 )
237
246
val hi = scala.math.min(until, length)
238
- new ofChar(Arrays .copyOfRange(unsafeArray, lo, hi))
247
+ if (lo >= hi)
248
+ emptyImpl
249
+ else
250
+ new ofChar(Arrays .copyOfRange(unsafeArray, lo, hi))
239
251
}
240
252
}
241
253
@@ -251,7 +263,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
251
263
override def slice (from : Int , until : Int ): ImmutableArray [Int ] = {
252
264
val lo = scala.math.max(from, 0 )
253
265
val hi = scala.math.min(until, length)
254
- new ofInt(Arrays .copyOfRange(unsafeArray, lo, hi))
266
+ if (lo >= hi)
267
+ emptyImpl
268
+ else
269
+ new ofInt(Arrays .copyOfRange(unsafeArray, lo, hi))
255
270
}
256
271
}
257
272
@@ -267,7 +282,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
267
282
override def slice (from : Int , until : Int ): ImmutableArray [Long ] = {
268
283
val lo = scala.math.max(from, 0 )
269
284
val hi = scala.math.min(until, length)
270
- new ofLong(Arrays .copyOfRange(unsafeArray, lo, hi))
285
+ if (lo >= hi)
286
+ emptyImpl
287
+ else
288
+ new ofLong(Arrays .copyOfRange(unsafeArray, lo, hi))
271
289
}
272
290
}
273
291
@@ -283,7 +301,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
283
301
override def slice (from : Int , until : Int ): ImmutableArray [Float ] = {
284
302
val lo = scala.math.max(from, 0 )
285
303
val hi = scala.math.min(until, length)
286
- new ofFloat(Arrays .copyOfRange(unsafeArray, lo, hi))
304
+ if (lo >= hi)
305
+ emptyImpl
306
+ else
307
+ new ofFloat(Arrays .copyOfRange(unsafeArray, lo, hi))
287
308
}
288
309
}
289
310
@@ -299,7 +320,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
299
320
override def slice (from : Int , until : Int ): ImmutableArray [Double ] = {
300
321
val lo = scala.math.max(from, 0 )
301
322
val hi = scala.math.min(until, length)
302
- new ofDouble(Arrays .copyOfRange(unsafeArray, lo, hi))
323
+ if (lo >= hi)
324
+ emptyImpl
325
+ else
326
+ new ofDouble(Arrays .copyOfRange(unsafeArray, lo, hi))
303
327
}
304
328
}
305
329
@@ -315,7 +339,10 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
315
339
override def slice (from : Int , until : Int ): ImmutableArray [Boolean ] = {
316
340
val lo = scala.math.max(from, 0 )
317
341
val hi = scala.math.min(until, length)
318
- new ofBoolean(Arrays .copyOfRange(unsafeArray, lo, hi))
342
+ if (lo >= hi)
343
+ emptyImpl
344
+ else
345
+ new ofBoolean(Arrays .copyOfRange(unsafeArray, lo, hi))
319
346
}
320
347
}
321
348
@@ -334,9 +361,13 @@ object ImmutableArray extends StrictOptimizedSeqFactory[ImmutableArray] {
334
361
// cant use util.Arrays.copyOfRange[Unit](repr, from, until) - Unit is special and doesnt compile
335
362
val lo = scala.math.max(from, 0 )
336
363
val hi = scala.math.min(until, length)
337
- val slicedLenght = hi - lo
338
- val res = new Array [Unit ](slicedLenght)
339
- new ofUnit(res)
364
+ val slicedLength = hi - lo
365
+ if (slicedLength <= 0 )
366
+ emptyImpl
367
+ else {
368
+ val res = new Array [Unit ](slicedLength)
369
+ new ofUnit(res)
370
+ }
340
371
}
341
372
}
342
373
}
0 commit comments