11package scala
22import annotation .showAsInfix
33import compiletime ._
4- import scala .StagedTuple
54
65sealed trait Tuple extends Any {
76 import Tuple ._
@@ -10,7 +9,7 @@ sealed trait Tuple extends Any {
109 if (stageIt) toArrayStaged
1110 else inline constValueOpt[BoundedSize [this .type ]] match {
1211 case Some (0 ) =>
13- empty$Array
12+ scala.runtime. DynamicTuple . empty$Array
1413 case Some (1 ) =>
1514 val t = asInstanceOf [Tuple1 [Object ]]
1615 Array (t._1)
@@ -23,12 +22,12 @@ sealed trait Tuple extends Any {
2322 case Some (4 ) =>
2423 val t = asInstanceOf [Tuple4 [Object , Object , Object , Object ]]
2524 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 =>
2726 to$Array (this , n)
2827 case Some (n) =>
2928 asInstanceOf [TupleXXL ].elems
3029 case None =>
31- dynamicToArray(this )
30+ runtime. DynamicTuple . dynamicToArray(this )
3231 }
3332
3433 inline def toArrayStaged : Array [Object ] =
@@ -55,7 +54,7 @@ sealed trait Tuple extends Any {
5554 case Some (n) =>
5655 fromArray[H *: this .type ](cons$Array (x, toArray))
5756 case _ =>
58- dynamic_*: [This , H ](this , x)
57+ runtime. DynamicTuple . dynamic_*: [This , H ](this , x)
5958 }
6059 }
6160
@@ -99,7 +98,7 @@ sealed trait Tuple extends Any {
9998 if (constValue[BoundedSize [that.type ]] == 0 ) this .asInstanceOf [Result ]
10099 else genericConcat[Result ](this , that).asInstanceOf [Result ]
101100 case None =>
102- dynamic_++ [This , that.type ](this , that)
101+ runtime. DynamicTuple . dynamic_++ [This , that.type ](this , that)
103102 }
104103 }
105104
@@ -116,7 +115,7 @@ sealed trait Tuple extends Any {
116115 type Result = Size [This ]
117116 inline constValueOpt[BoundedSize [this .type ]] match {
118117 case Some (n) => n.asInstanceOf [Result ]
119- case _ => dynamicSize(this )
118+ case _ => runtime. DynamicTuple . dynamicSize(this )
120119 }
121120 }
122121
@@ -125,9 +124,6 @@ sealed trait Tuple extends Any {
125124}
126125
127126object Tuple {
128- inline val MaxSpecialized = 22
129- inline private val XXL = MaxSpecialized + 1
130-
131127 final val stageIt = true
132128
133129 type Head [X <: NonEmptyTuple ] = X match {
@@ -167,7 +163,7 @@ object Tuple {
167163
168164 private [scala] type BoundedSize [X ] = BoundedSizeRecur [X , 23 ]
169165
170- val empty$Array = Array [Object ]()
166+ val $emptyArray = Array [Object ]()
171167
172168 def to$Array (xs : Tuple , n : Int ) = {
173169 val arr = new Array [Object ](n)
@@ -217,99 +213,11 @@ object Tuple {
217213 }
218214
219215 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 ]])}
308217}
309218
310219sealed trait NonEmptyTuple extends Tuple {
311220 import Tuple ._
312- import NonEmptyTuple ._
313221
314222 inline def head [This >: this .type <: NonEmptyTuple ]: Head [This ] =
315223 if (stageIt) headStaged.asInstanceOf
@@ -328,13 +236,13 @@ sealed trait NonEmptyTuple extends Tuple {
328236 case Some (4 ) =>
329237 val t = asInstanceOf [Tuple4 [_, _, _, _]]
330238 t._1
331- case Some (n) if n > 4 && n <= MaxSpecialized =>
239+ case Some (n) if n > 4 && n <= scala.runtime. DynamicTuple . MaxSpecialized =>
332240 asInstanceOf [Product ].productElement(0 )
333- case Some (n) if n > MaxSpecialized =>
241+ case Some (n) if n > scala.runtime. DynamicTuple . MaxSpecialized =>
334242 val t = asInstanceOf [TupleXXL ]
335243 t.elems(0 )
336244 case None =>
337- dynamicHead[this .type ](this )
245+ scala.runtime. DynamicTuple . dynamicHead[this .type ](this )
338246 }
339247 resVal.asInstanceOf [Result ]
340248 }
@@ -364,7 +272,7 @@ sealed trait NonEmptyTuple extends Tuple {
364272 case Some (n) if n > 5 =>
365273 fromArray[Result ](toArray.tail)
366274 case None =>
367- dynamicTail[This ](this )
275+ runtime. DynamicTuple . dynamicTail[This ](this )
368276 }
369277 }
370278
@@ -374,7 +282,7 @@ sealed trait NonEmptyTuple extends Tuple {
374282 inline def fallbackApply (n : Int ) =
375283 inline constValueOpt[n.type ] match {
376284 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)
378286 }
379287
380288 inline def apply [This >: this .type <: NonEmptyTuple ](n : Int ): Elem [This , n.type ] =
@@ -412,13 +320,13 @@ sealed trait NonEmptyTuple extends Tuple {
412320 case Some (3 ) => t._4.asInstanceOf [Result ]
413321 case _ => fallbackApply(n).asInstanceOf [Result ]
414322 }
415- case Some (s) if s > 4 && s <= MaxSpecialized =>
323+ case Some (s) if s > 4 && s <= scala.runtime. DynamicTuple . MaxSpecialized =>
416324 val t = asInstanceOf [Product ]
417325 inline constValueOpt[n.type ] match {
418326 case Some (n) if n >= 0 && n < s => t.productElement(n).asInstanceOf [Result ]
419327 case _ => fallbackApply(n).asInstanceOf [Result ]
420328 }
421- case Some (s) if s > MaxSpecialized =>
329+ case Some (s) if s > scala.runtime. DynamicTuple . MaxSpecialized =>
422330 val t = asInstanceOf [TupleXXL ]
423331 inline constValueOpt[n.type ] match {
424332 case Some (n) if n >= 0 && n < s => t.elems(n).asInstanceOf [Result ]
@@ -429,53 +337,14 @@ sealed trait NonEmptyTuple extends Tuple {
429337 }
430338
431339 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 ])}
473342}
474343
475344@ showAsInfix
476345sealed class *: [+ H , + T <: Tuple ] extends NonEmptyTuple
477346
478347object *: {
479348 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))
481350}
0 commit comments