@@ -56,7 +56,7 @@ package object quoted {
56
56
57
57
/** Lifts this sequence of expressions into an expression of a sequence
58
58
*
59
- * Transforms a list of expression
59
+ * Transforms a sequence of expression
60
60
* `Seq(e1, e2, ...)` where `ei: Expr[T]`
61
61
* to an expression equivalent to
62
62
* `'{ Seq($e1, $e2, ...) }` typed as an `Expr[Seq[T]]`
@@ -81,7 +81,42 @@ package object quoted {
81
81
def (list : List [Expr [T ]]) toExprOfList[T ] given Type [T ], QuoteContext : Expr [List [T ]] =
82
82
if (list.isEmpty) ' { Nil } else ' { List ($ {list.toExprOfSeq}: _* ) }
83
83
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
+ }
84
118
119
+ }
85
120
}
86
121
87
122
}
0 commit comments