Skip to content

Commit 8979768

Browse files
committed
Add toExprOfTuple in scala.quoted
1 parent 0ebbcff commit 8979768

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

library/src/scala/quoted/package.scala

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ package object quoted {
5656

5757
/** Lifts this sequence of expressions into an expression of a sequence
5858
*
59-
* Transforms a list of expression
59+
* Transforms a sequence of expression
6060
* `Seq(e1, e2, ...)` where `ei: Expr[T]`
6161
* to an expression equivalent to
6262
* `'{ Seq($e1, $e2, ...) }` typed as an `Expr[Seq[T]]`
@@ -81,7 +81,41 @@ package object quoted {
8181
def (list: List[Expr[T]]) toExprOfList[T] given Type[T], QuoteContext: Expr[List[T]] =
8282
if (list.isEmpty) '{ Nil } else '{ List(${list.toExprOfSeq}: _*) }
8383

84+
/** Lifts this sequence of expressions into an expression of a tuple
85+
*
86+
* Transforms a sequence of expression
87+
* `Seq(e1, e2, ...)` where `ei: Expr[_]`
88+
* to an expression equivalent to
89+
* `'{ ($e1, $e2, ...) }` typed as an `Expr[Tuple]`
90+
*/
91+
def (seq: Seq[Expr[_]]) toExprOfTuple given QuoteContext: Expr[Tuple] = {
92+
seq.size match {
93+
case 1 => '{ Tuple1(${seq(0)}) }
94+
case 2 => '{ Tuple2(${seq(0)}, ${seq(1)}) }
95+
case 3 => '{ Tuple3(${seq(0)}, ${seq(1)}, ${seq(2)}) }
96+
case 4 => '{ Tuple4(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}) }
97+
case 5 => '{ Tuple5(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}) }
98+
case 6 => '{ Tuple6(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}) }
99+
case 7 => '{ Tuple7(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}) }
100+
case 8 => '{ Tuple8(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}) }
101+
case 9 => '{ Tuple9(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}) }
102+
case 10 => '{ Tuple10(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}) }
103+
case 11 => '{ Tuple11(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}) }
104+
case 12 => '{ Tuple12(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}) }
105+
case 13 => '{ Tuple13(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}) }
106+
case 14 => '{ Tuple14(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}) }
107+
case 15 => '{ Tuple15(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}) }
108+
case 16 => '{ Tuple16(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}, ${seq(15)}) }
109+
case 17 => '{ Tuple17(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}, ${seq(15)}, ${seq(16)}) }
110+
case 18 => '{ Tuple18(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}, ${seq(15)}, ${seq(16)}, ${seq(17)}) }
111+
case 19 => '{ Tuple19(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}, ${seq(15)}, ${seq(16)}, ${seq(17)}, ${seq(18)}) }
112+
case 20 => '{ Tuple20(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}, ${seq(15)}, ${seq(16)}, ${seq(17)}, ${seq(18)}, ${seq(19)}) }
113+
case 21 => '{ Tuple21(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}, ${seq(15)}, ${seq(16)}, ${seq(17)}, ${seq(18)}, ${seq(19)}, ${seq(20)}) }
114+
case 22 => '{ Tuple22(${seq(0)}, ${seq(1)}, ${seq(2)}, ${seq(3)}, ${seq(4)}, ${seq(5)}, ${seq(6)}, ${seq(7)}, ${seq(8)}, ${seq(9)}, ${seq(10)}, ${seq(11)}, ${seq(12)}, ${seq(13)}, ${seq(14)}, ${seq(15)}, ${seq(16)}, ${seq(17)}, ${seq(18)}, ${seq(19)}, ${seq(20)}, ${seq(21)}) }
115+
case _ => '{ Tuple.fromIArray(IArray(${seq.toExprOfSeq}: _*)) }
116+
}
84117

118+
}
85119
}
86120

87121
}

0 commit comments

Comments
 (0)