@@ -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,42 @@ 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 0 => Expr .unitExpr
94+ case 1 => ' { Tuple1 ( $ {seq(0 )}) }
95+ case 2 => ' { Tuple2 ( $ {seq(0 )}, $ {seq(1 )}) }
96+ case 3 => ' { Tuple3 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}) }
97+ case 4 => ' { Tuple4 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}) }
98+ case 5 => ' { Tuple5 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}) }
99+ case 6 => ' { Tuple6 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}) }
100+ case 7 => ' { Tuple7 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}) }
101+ case 8 => ' { Tuple8 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}, $ {seq(7 )}) }
102+ case 9 => ' { Tuple9 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}, $ {seq(7 )}, $ {seq(8 )}) }
103+ case 10 => ' { Tuple10 ($ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}, $ {seq(7 )}, $ {seq(8 )}, $ {seq(9 )}) }
104+ 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 )}) }
105+ 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 )}) }
106+ 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 )}) }
107+ 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 )}) }
108+ 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 )}) }
109+ 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 )}) }
110+ 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 )}) }
111+ 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 )}) }
112+ 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 )}) }
113+ 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 )}) }
114+ 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 )}) }
115+ 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 )}) }
116+ case _ => ' { Tuple .fromIArray(IArray ($ {seq.toExprOfSeq}: _* )) }
117+ }
84118
119+ }
85120 }
86121
87122}
0 commit comments