@@ -269,16 +269,21 @@ object DynamicTuple {
269269 val actualN = Math .min(n, self.size)
270270
271271 type Result = Take [This , N ]
272+
272273 val arr = (self : Any ) match {
273- case () => Array .empty[Object ]
274274 case xxl : TupleXXL =>
275275 xxl.elems.asInstanceOf [Array [Object ]].take(actualN)
276276 case _ =>
277- val arr = new Array [Object ](actualN)
278- self.asInstanceOf [Product ].productIterator.asInstanceOf [Iterator [Object ]]
279- .copyToArray(arr, 0 , actualN)
280- arr
277+ if (actualN == 0 )
278+ Array .emptyObjectArray
279+ else {
280+ val arr = new Array [Object ](actualN)
281+ self.asInstanceOf [Product ].productIterator.asInstanceOf [Iterator [Object ]]
282+ .copyToArray(arr, 0 , actualN)
283+ arr
284+ }
281285 }
286+
282287 dynamicFromIArray(arr.asInstanceOf [IArray [Object ]]).asInstanceOf [Result ]
283288 }
284289
@@ -288,17 +293,23 @@ object DynamicTuple {
288293 val actualN = Math .min(n, size)
289294
290295 type Result = Drop [This , N ]
296+
291297 val arr = (self : Any ) match {
292- case () => Array .empty[Object ]
293298 case xxl : TupleXXL =>
294299 xxl.elems.asInstanceOf [Array [Object ]].drop(actualN)
295300 case _ =>
296301 val rem = size - actualN
297- val arr = new Array [Object ](rem)
298- self.asInstanceOf [Product ].productIterator.asInstanceOf [Iterator [Object ]]
299- .drop(actualN).copyToArray(arr, 0 , rem)
300- arr
302+
303+ if (rem == 0 )
304+ Array .emptyObjectArray
305+ else {
306+ val arr = new Array [Object ](rem)
307+ self.asInstanceOf [Product ].productIterator.asInstanceOf [Iterator [Object ]]
308+ .drop(actualN).copyToArray(arr, 0 , rem)
309+ arr
310+ }
301311 }
312+
302313 dynamicFromIArray(arr.asInstanceOf [IArray [Object ]]).asInstanceOf [Result ]
303314 }
304315
@@ -308,6 +319,7 @@ object DynamicTuple {
308319 val actualN = Math .min(n, size)
309320
310321 type Result = Split [This , N ]
322+
311323 val (arr1, arr2) = (self : Any ) match {
312324 case () => (Array .empty[Object ], Array .empty[Object ])
313325 case xxl : TupleXXL =>
@@ -320,6 +332,7 @@ object DynamicTuple {
320332 it.copyToArray(arr2, 0 , size - actualN)
321333 (arr1, arr2)
322334 }
335+
323336 (
324337 dynamicFromIArray(arr1.asInstanceOf [IArray [Object ]]),
325338 dynamicFromIArray(arr2.asInstanceOf [IArray [Object ]])
0 commit comments