@@ -4,99 +4,5 @@ package object quoted {
4
4
5
5
implicit object ExprOps {
6
6
def (x : T ) toExpr[T : Liftable ](given QuoteContext ): Expr [T ] = summon[Liftable [T ]].toExpr(x)
7
-
8
- /** Lifts this sequence of expressions into an expression of a sequence
9
- *
10
- * Transforms a sequence of expression
11
- * `Seq(e1, e2, ...)` where `ei: Expr[T]`
12
- * to an expression equivalent to
13
- * `'{ Seq($e1, $e2, ...) }` typed as an `Expr[Seq[T]]`
14
- *
15
- * Usage:
16
- * ```scala
17
- * '{ List(${List(1, 2, 3).toExprOfSeq}: _*) } // equvalent to '{ List(1, 2, 3) }
18
- * ```
19
- */
20
- def (seq : Seq [Expr [T ]]) toExprOfSeq[T ](given tp : Type [T ], qctx : QuoteContext ): Expr [Seq [T ]] = {
21
- import qctx .tasty ._
22
- Repeated (seq.map(_.unseal).toList, tp.unseal).seal.asInstanceOf [Expr [Seq [T ]]]
23
- }
24
-
25
- /** Lifts this list of expressions into an expression of a list
26
- *
27
- * Transforms a list of expression
28
- * `List(e1, e2, ...)` where `ei: Expr[T]`
29
- * to an expression equivalent to
30
- * `'{ List($e1, $e2, ...) }` typed as an `Expr[List[T]]`
31
- */
32
- def (list : List [Expr [T ]]) toExprOfList[T ](given Type [T ], QuoteContext ): Expr [List [T ]] =
33
- if (list.isEmpty) ' { Nil } else ' { List ($ {list.toExprOfSeq}: _* ) }
34
-
35
- /** Lifts this sequence of expressions into an expression of a tuple
36
- *
37
- * Transforms a sequence of expression
38
- * `Seq(e1, e2, ...)` where `ei: Expr[_]`
39
- * to an expression equivalent to
40
- * `'{ ($e1, $e2, ...) }` typed as an `Expr[Tuple]`
41
- */
42
- def (seq : Seq [Expr [_]]) toExprOfTuple(given QuoteContext ): Expr [Tuple ] = {
43
- seq match {
44
- case Seq () =>
45
- Expr .unitExpr
46
- case Seq (' { $x1 : $t1 }) =>
47
- ' { Tuple1 ($x1) }
48
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }) =>
49
- ' { Tuple2 ($x1, $x2) }
50
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }) =>
51
- ' { Tuple3 ($x1, $x2, $x3) }
52
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }) =>
53
- ' { Tuple4 ($x1, $x2, $x3, $x4) }
54
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }) =>
55
- ' { Tuple5 ($x1, $x2, $x3, $x4, $x5) }
56
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }) =>
57
- ' { Tuple6 ($x1, $x2, $x3, $x4, $x5, $x6) }
58
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }) =>
59
- ' { Tuple7 ($x1, $x2, $x3, $x4, $x5, $x6, $x7) }
60
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }) =>
61
- ' { Tuple8 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8) }
62
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }) =>
63
- ' { Tuple9 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9) }
64
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }) =>
65
- ' { Tuple10 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10) }
66
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }) =>
67
- ' { Tuple11 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11) }
68
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }) =>
69
- ' { Tuple12 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12) }
70
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }) =>
71
- ' { Tuple13 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13) }
72
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }) =>
73
- ' { Tuple14 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14) }
74
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }) =>
75
- ' { Tuple15 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15) }
76
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }, ' { $x16 : $t16 }) =>
77
- ' { Tuple16 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16) }
78
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }, ' { $x16 : $t16 }, ' { $x17 : $t17 }) =>
79
- ' { Tuple17 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17) }
80
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }, ' { $x16 : $t16 }, ' { $x17 : $t17 }, ' { $x18 : $t18 }) =>
81
- ' { Tuple18 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $x18) }
82
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }, ' { $x16 : $t16 }, ' { $x17 : $t17 }, ' { $x18 : $t18 }, ' { $x19 : $t19 }) =>
83
- ' { Tuple19 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $x18, $x19) }
84
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }, ' { $x16 : $t16 }, ' { $x17 : $t17 }, ' { $x18 : $t18 }, ' { $x19 : $t19 }, ' { $x20 : $t20 }) =>
85
- ' { Tuple20 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $x18, $x19, $x20) }
86
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }, ' { $x16 : $t16 }, ' { $x17 : $t17 }, ' { $x18 : $t18 }, ' { $x19 : $t19 }, ' { $x20 : $t20 }, ' { $x21 : $t21 }) =>
87
- ' { Tuple21 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $x18, $x19, $x20, $x21) }
88
- case Seq (' { $x1 : $t1 }, ' { $x2 : $t2 }, ' { $x3 : $t3 }, ' { $x4 : $t4 }, ' { $x5 : $t5 }, ' { $x6 : $t6 }, ' { $x7 : $t7 }, ' { $x8 : $t8 }, ' { $x9 : $t9 }, ' { $x10 : $t10 }, ' { $x11 : $t11 }, ' { $x12 : $t12 }, ' { $x13 : $t13 }, ' { $x14 : $t14 }, ' { $x15 : $t15 }, ' { $x16 : $t16 }, ' { $x17 : $t17 }, ' { $x18 : $t18 }, ' { $x19 : $t19 }, ' { $x20 : $t20 }, ' { $x21 : $t21 }, ' { $x22 : $t22 }) =>
89
- ' { Tuple22 ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $x18, $x19, $x20, $x21, $x22) }
90
- case _ =>
91
- ' { Tuple .fromIArray(IArray ($ {seq.toExprOfSeq}: _* )) }
92
- }
93
- }
94
-
95
- /** Given a tuple of the form `(Expr[A1], ..., Expr[An])`, outputs a tuple `Expr[(A1, ..., An)]`. */
96
- def (tup : T ) toExprOfTuple[T <: Tuple : Tuple .IsMappedBy [Expr ]: Type ](given ctx : QuoteContext ): Expr [Tuple .InverseMap [T , Expr ]] = {
97
- import ctx .tasty ._
98
- tup.asInstanceOf [Product ].productIterator.toSeq.asInstanceOf [Seq [Expr [_]]].toExprOfTuple
99
- .cast[Tuple .InverseMap [T , Expr ]]
100
- }
101
7
}
102
8
}
0 commit comments