@@ -54,7 +54,7 @@ package object quoted {
54
54
55
55
/** Lifts this sequence of expressions into an expression of a sequence
56
56
*
57
- * Transforms a list of expression
57
+ * Transforms a sequence of expression
58
58
* `Seq(e1, e2, ...)` where `ei: Expr[T]`
59
59
* to an expression equivalent to
60
60
* `'{ Seq($e1, $e2, ...) }` typed as an `Expr[Seq[T]]`
@@ -79,7 +79,42 @@ package object quoted {
79
79
def (list : List [Expr [T ]]) toExprOfList[T ] given Type [T ], QuoteContext : Expr [List [T ]] =
80
80
if (list.isEmpty) ' { Nil } else ' { List ($ {list.toExprOfSeq}: _* ) }
81
81
82
+ /** Lifts this sequence of expressions into an expression of a tuple
83
+ *
84
+ * Transforms a sequence of expression
85
+ * `Seq(e1, e2, ...)` where `ei: Expr[_]`
86
+ * to an expression equivalent to
87
+ * `'{ ($e1, $e2, ...) }` typed as an `Expr[Tuple]`
88
+ */
89
+ def (seq : Seq [Expr [_]]) toExprOfTuple given QuoteContext : Expr [Tuple ] = {
90
+ seq.size match {
91
+ case 0 => Expr .unitExpr
92
+ case 1 => ' { Tuple1 ( $ {seq(0 )}) }
93
+ case 2 => ' { Tuple2 ( $ {seq(0 )}, $ {seq(1 )}) }
94
+ case 3 => ' { Tuple3 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}) }
95
+ case 4 => ' { Tuple4 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}) }
96
+ case 5 => ' { Tuple5 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}) }
97
+ case 6 => ' { Tuple6 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}) }
98
+ case 7 => ' { Tuple7 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}) }
99
+ case 8 => ' { Tuple8 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}, $ {seq(7 )}) }
100
+ case 9 => ' { Tuple9 ( $ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}, $ {seq(7 )}, $ {seq(8 )}) }
101
+ case 10 => ' { Tuple10 ($ {seq(0 )}, $ {seq(1 )}, $ {seq(2 )}, $ {seq(3 )}, $ {seq(4 )}, $ {seq(5 )}, $ {seq(6 )}, $ {seq(7 )}, $ {seq(8 )}, $ {seq(9 )}) }
102
+ 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 )}) }
103
+ 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 )}) }
104
+ 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 )}) }
105
+ 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 )}) }
106
+ 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 )}) }
107
+ 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 )}) }
108
+ 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 )}) }
109
+ 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 )}) }
110
+ 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 )}) }
111
+ 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 )}) }
112
+ 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 )}) }
113
+ 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 )}) }
114
+ case _ => ' { Tuple .fromIArray(IArray ($ {seq.toExprOfSeq}: _* )) }
115
+ }
82
116
117
+ }
83
118
}
84
119
85
120
}
0 commit comments