1
1
package scala
2
2
import annotation .showAsInfix
3
3
import compiletime ._
4
- import scala .StagedTuple
5
4
6
5
sealed trait Tuple extends Any {
7
6
import Tuple ._
@@ -10,7 +9,7 @@ sealed trait Tuple extends Any {
10
9
if (stageIt) toArrayStaged
11
10
else inline constValueOpt[BoundedSize [this .type ]] match {
12
11
case Some (0 ) =>
13
- empty$Array
12
+ scala.runtime. DynamicTuple . empty$Array
14
13
case Some (1 ) =>
15
14
val t = asInstanceOf [Tuple1 [Object ]]
16
15
Array (t._1)
@@ -23,12 +22,12 @@ sealed trait Tuple extends Any {
23
22
case Some (4 ) =>
24
23
val t = asInstanceOf [Tuple4 [Object , Object , Object , Object ]]
25
24
Array (t._1, t._2, t._3, t._4)
26
- case Some (n) if n <= MaxSpecialized =>
25
+ case Some (n) if n <= scala.runtime. DynamicTuple . MaxSpecialized =>
27
26
to$Array (this , n)
28
27
case Some (n) =>
29
28
asInstanceOf [TupleXXL ].elems
30
29
case None =>
31
- dynamicToArray(this )
30
+ runtime. DynamicTuple . dynamicToArray(this )
32
31
}
33
32
34
33
inline def toArrayStaged : Array [Object ] =
@@ -55,7 +54,7 @@ sealed trait Tuple extends Any {
55
54
case Some (n) =>
56
55
fromArray[H *: this .type ](cons$Array (x, toArray))
57
56
case _ =>
58
- dynamic_*: [This , H ](this , x)
57
+ runtime. DynamicTuple . dynamic_*: [This , H ](this , x)
59
58
}
60
59
}
61
60
@@ -99,7 +98,7 @@ sealed trait Tuple extends Any {
99
98
if (constValue[BoundedSize [that.type ]] == 0 ) this .asInstanceOf [Result ]
100
99
else genericConcat[Result ](this , that).asInstanceOf [Result ]
101
100
case None =>
102
- dynamic_++ [This , that.type ](this , that)
101
+ runtime. DynamicTuple . dynamic_++ [This , that.type ](this , that)
103
102
}
104
103
}
105
104
@@ -116,7 +115,7 @@ sealed trait Tuple extends Any {
116
115
type Result = Size [This ]
117
116
inline constValueOpt[BoundedSize [this .type ]] match {
118
117
case Some (n) => n.asInstanceOf [Result ]
119
- case _ => dynamicSize(this )
118
+ case _ => runtime. DynamicTuple . dynamicSize(this )
120
119
}
121
120
}
122
121
@@ -125,9 +124,6 @@ sealed trait Tuple extends Any {
125
124
}
126
125
127
126
object Tuple {
128
- inline val MaxSpecialized = 22
129
- inline private val XXL = MaxSpecialized + 1
130
-
131
127
final val stageIt = true
132
128
133
129
type Head [X <: NonEmptyTuple ] = X match {
@@ -167,7 +163,7 @@ object Tuple {
167
163
168
164
private [scala] type BoundedSize [X ] = BoundedSizeRecur [X , 23 ]
169
165
170
- val empty$Array = Array [Object ]()
166
+ val $emptyArray = Array [Object ]()
171
167
172
168
def to$Array (xs : Tuple , n : Int ) = {
173
169
val arr = new Array [Object ](n)
@@ -217,99 +213,11 @@ object Tuple {
217
213
}
218
214
219
215
inline def fromArrayStaged [T <: Tuple ](xs : Array [Object ]): T =
220
- $ { StagedTuple .fromArrayStaged[T ](' xs , constValueOpt[BoundedSize [this .type ]]) }
221
-
222
- def dynamicFromArray [T <: Tuple ](xs : Array [Object ]): T = xs.length match {
223
- case 0 => ().asInstanceOf [T ]
224
- case 1 => Tuple1 (xs(0 )).asInstanceOf [T ]
225
- case 2 => Tuple2 (xs(0 ), xs(1 )).asInstanceOf [T ]
226
- case 3 => Tuple3 (xs(0 ), xs(1 ), xs(2 )).asInstanceOf [T ]
227
- case 4 => Tuple4 (xs(0 ), xs(1 ), xs(2 ), xs(3 )).asInstanceOf [T ]
228
- case 5 => Tuple5 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 )).asInstanceOf [T ]
229
- case 6 => Tuple6 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 )).asInstanceOf [T ]
230
- case 7 => Tuple7 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 )).asInstanceOf [T ]
231
- case 8 => Tuple8 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 )).asInstanceOf [T ]
232
- case 9 => Tuple9 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 )).asInstanceOf [T ]
233
- case 10 => Tuple10 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 )).asInstanceOf [T ]
234
- case 11 => Tuple11 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 )).asInstanceOf [T ]
235
- case 12 => Tuple12 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 )).asInstanceOf [T ]
236
- case 13 => Tuple13 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 )).asInstanceOf [T ]
237
- case 14 => Tuple14 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 )).asInstanceOf [T ]
238
- case 15 => Tuple15 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 )).asInstanceOf [T ]
239
- case 16 => Tuple16 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 ), xs(15 )).asInstanceOf [T ]
240
- case 17 => Tuple17 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 ), xs(15 ), xs(16 )).asInstanceOf [T ]
241
- case 18 => Tuple18 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 ), xs(15 ), xs(16 ), xs(17 )).asInstanceOf [T ]
242
- case 19 => Tuple19 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 ), xs(15 ), xs(16 ), xs(17 ), xs(18 )).asInstanceOf [T ]
243
- case 20 => Tuple20 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 ), xs(15 ), xs(16 ), xs(17 ), xs(18 ), xs(19 )).asInstanceOf [T ]
244
- case 21 => Tuple21 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 ), xs(15 ), xs(16 ), xs(17 ), xs(18 ), xs(19 ), xs(20 )).asInstanceOf [T ]
245
- case 22 => Tuple22 (xs(0 ), xs(1 ), xs(2 ), xs(3 ), xs(4 ), xs(5 ), xs(6 ), xs(7 ), xs(8 ), xs(9 ), xs(10 ), xs(11 ), xs(12 ), xs(13 ), xs(14 ), xs(15 ), xs(16 ), xs(17 ), xs(18 ), xs(19 ), xs(20 ), xs(21 )).asInstanceOf [T ]
246
- case _ => TupleXXL (xs).asInstanceOf [T ]
247
- }
248
-
249
- def dynamicToArray (self : Tuple ): Array [Object ] = (self : Any ) match {
250
- case self : Unit =>
251
- empty$Array
252
- case self : Tuple1 [_] =>
253
- val t = self.asInstanceOf [Tuple1 [Object ]]
254
- Array (t._1)
255
- case self : Tuple2 [_, _] =>
256
- val t = self.asInstanceOf [Tuple2 [Object , Object ]]
257
- Array (t._1, t._2)
258
- case self : Tuple3 [_, _, _] =>
259
- val t = self.asInstanceOf [Tuple3 [Object , Object , Object ]]
260
- Array (t._1, t._2, t._3)
261
- case self : Tuple4 [_, _, _, _] =>
262
- val t = self.asInstanceOf [Tuple4 [Object , Object , Object , Object ]]
263
- Array (t._1, t._2, t._3, t._4)
264
- case self : TupleXXL =>
265
- self.elems
266
- case self : Product =>
267
- val arr = new Array [Object ](self.productArity)
268
- for (i <- 0 until arr.length) arr(i) = self.productElement(i).asInstanceOf [Object ]
269
- arr
270
- }
271
-
272
- def dynamic_*: [This <: Tuple , H ] (self : Tuple , x : H ): H *: This = {
273
- type Result = H *: This
274
- (self : Any ) match {
275
- case Unit =>
276
- Tuple1 (x).asInstanceOf [Result ]
277
- case self : Tuple1 [_] =>
278
- Tuple2 (x, self._1).asInstanceOf [Result ]
279
- case self : Tuple2 [_, _] =>
280
- Tuple3 (x, self._1, self._2).asInstanceOf [Result ]
281
- case self : Tuple3 [_, _, _] =>
282
- Tuple4 (x, self._1, self._2, self._3).asInstanceOf [Result ]
283
- case self : Tuple4 [_, _, _, _] =>
284
- Tuple5 (x, self._1, self._2, self._3, self._4).asInstanceOf [Result ]
285
- case _ =>
286
- dynamicFromArray[Result ](cons$Array (x, dynamicToArray(self)))
287
- }
288
- }
289
-
290
- def dynamic_++ [This <: Tuple , That <: Tuple ](self : This , that : That ): Concat [This , That ] = {
291
- type Result = Concat [This , That ]
292
- (this : Any ) match {
293
- case self : Unit => return self.asInstanceOf [Result ]
294
- case _ =>
295
- }
296
- (that : Any ) match {
297
- case that : Unit => return self.asInstanceOf [Result ]
298
- case _ =>
299
- }
300
- dynamicFromArray[Result ](dynamicToArray(self) ++ dynamicToArray(that))
301
- }
302
-
303
- def dynamicSize [This <: Tuple ](self : This ): Size [This ] = (self : Any ) match {
304
- case self : Unit => 0 .asInstanceOf [Size [This ]]
305
- case self : TupleXXL => self.elems.length.asInstanceOf [Size [This ]]
306
- case self : Product => self.productArity.asInstanceOf [Size [This ]]
307
- }
216
+ $ {StagedTuple .fromArrayStaged[T ](' xs , constValueOpt[BoundedSize [this .type ]])}
308
217
}
309
218
310
219
sealed trait NonEmptyTuple extends Tuple {
311
220
import Tuple ._
312
- import NonEmptyTuple ._
313
221
314
222
inline def head [This >: this .type <: NonEmptyTuple ]: Head [This ] =
315
223
if (stageIt) headStaged.asInstanceOf
@@ -328,13 +236,13 @@ sealed trait NonEmptyTuple extends Tuple {
328
236
case Some (4 ) =>
329
237
val t = asInstanceOf [Tuple4 [_, _, _, _]]
330
238
t._1
331
- case Some (n) if n > 4 && n <= MaxSpecialized =>
239
+ case Some (n) if n > 4 && n <= scala.runtime. DynamicTuple . MaxSpecialized =>
332
240
asInstanceOf [Product ].productElement(0 )
333
- case Some (n) if n > MaxSpecialized =>
241
+ case Some (n) if n > scala.runtime. DynamicTuple . MaxSpecialized =>
334
242
val t = asInstanceOf [TupleXXL ]
335
243
t.elems(0 )
336
244
case None =>
337
- dynamicHead[this .type ](this )
245
+ scala.runtime. DynamicTuple . dynamicHead[this .type ](this )
338
246
}
339
247
resVal.asInstanceOf [Result ]
340
248
}
@@ -364,7 +272,7 @@ sealed trait NonEmptyTuple extends Tuple {
364
272
case Some (n) if n > 5 =>
365
273
fromArray[Result ](toArray.tail)
366
274
case None =>
367
- dynamicTail[This ](this )
275
+ runtime. DynamicTuple . dynamicTail[This ](this )
368
276
}
369
277
}
370
278
@@ -374,7 +282,7 @@ sealed trait NonEmptyTuple extends Tuple {
374
282
inline def fallbackApply (n : Int ) =
375
283
inline constValueOpt[n.type ] match {
376
284
case Some (n : Int ) => error(" index out of bounds: " , n)
377
- case None => dynamicApply[this .type , n.type ](this , n)
285
+ case None => runtime. DynamicTuple . dynamicApply[this .type , n.type ](this , n)
378
286
}
379
287
380
288
inline def apply [This >: this .type <: NonEmptyTuple ](n : Int ): Elem [This , n.type ] =
@@ -412,13 +320,13 @@ sealed trait NonEmptyTuple extends Tuple {
412
320
case Some (3 ) => t._4.asInstanceOf [Result ]
413
321
case _ => fallbackApply(n).asInstanceOf [Result ]
414
322
}
415
- case Some (s) if s > 4 && s <= MaxSpecialized =>
323
+ case Some (s) if s > 4 && s <= scala.runtime. DynamicTuple . MaxSpecialized =>
416
324
val t = asInstanceOf [Product ]
417
325
inline constValueOpt[n.type ] match {
418
326
case Some (n) if n >= 0 && n < s => t.productElement(n).asInstanceOf [Result ]
419
327
case _ => fallbackApply(n).asInstanceOf [Result ]
420
328
}
421
- case Some (s) if s > MaxSpecialized =>
329
+ case Some (s) if s > scala.runtime. DynamicTuple . MaxSpecialized =>
422
330
val t = asInstanceOf [TupleXXL ]
423
331
inline constValueOpt[n.type ] match {
424
332
case Some (n) if n >= 0 && n < s => t.elems(n).asInstanceOf [Result ]
@@ -429,53 +337,14 @@ sealed trait NonEmptyTuple extends Tuple {
429
337
}
430
338
431
339
inline def applyStaged (n : Int ): Elem [this .type , n.type ] =
432
- $ { StagedTuple .applyStaged[this .type , n.type ](
433
- ' this , constValueOpt[Size [this .type ]],
434
- ' n , constValueOpt[n.type ]) }
435
- }
436
-
437
- object NonEmptyTuple {
438
- import Tuple ._
439
-
440
- def dynamicHead [This <: NonEmptyTuple ] (self : This ): Head [This ] = {
441
- type Result = Head [This ]
442
- val res = (self : Any ) match {
443
- case self : Tuple1 [_] => self._1
444
- case self : Tuple2 [_, _] => self._1
445
- case self : Tuple3 [_, _, _] => self._1
446
- case self : Tuple4 [_, _, _, _] => self._1
447
- case self : TupleXXL => self.elems(0 )
448
- case self : Product => self.productElement(0 )
449
- }
450
- res.asInstanceOf [Result ]
451
- }
452
-
453
- def dynamicTail [This <: NonEmptyTuple ] (self : This ): Tail [This ] = {
454
- type Result = Tail [This ]
455
- val res = (self : Any ) match {
456
- case self : Tuple1 [_] => ()
457
- case self : Tuple2 [_, _] => Tuple1 (self._2)
458
- case self : Tuple3 [_, _, _] => Tuple2 (self._2, self._3)
459
- case self : Tuple4 [_, _, _, _] => Tuple3 (self._2, self._3, self._4)
460
- case _ => dynamicFromArray[Result ](dynamicToArray(self).tail)
461
- }
462
- res.asInstanceOf [Result ]
463
- }
464
-
465
- def dynamicApply [This <: NonEmptyTuple , N <: Int ] (self : This , n : N ): Elem [This , N ] = {
466
- type Result = Elem [This , N ]
467
- val res = (self : Any ) match {
468
- case self : TupleXXL => self.elems(n)
469
- case self : Product => self.productElement(n)
470
- }
471
- res.asInstanceOf [Result ]
472
- }
340
+ $ {StagedTuple .applyStaged[this .type , n.type ](
341
+ ' this , constValueOpt[Size [this .type ]], ' n , constValueOpt[n.type ])}
473
342
}
474
343
475
344
@ showAsInfix
476
345
sealed class *: [+ H , + T <: Tuple ] extends NonEmptyTuple
477
346
478
347
object *: {
479
348
inline def unapply [H , T <: Tuple ](x : H *: T ) =
480
- (NonEmptyTuple . dynamicHead(x), NonEmptyTuple .dynamicTail(x))
349
+ (scala.runtime. DynamicTuple . dynamicHead(x), scala.runtime. DynamicTuple .dynamicTail(x))
481
350
}
0 commit comments