Skip to content

Commit 865ad29

Browse files
committed
Fix #8007: Add test file
1 parent 83ab6c7 commit 865ad29

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

tests/run-macros/i8007/Macro_1.scala

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import scala.deriving._
2+
import scala.quoted._
3+
import scala.quoted.matching._
4+
import scala.compiletime.{erasedValue, summonFrom, constValue}
5+
6+
object Macro {
7+
case class Person(name: String, age: Int)
8+
9+
// Summon a mirror for a particular type
10+
inline def summonMirror[T]: Option[Mirror.Of[T]] =
11+
summonFrom {
12+
case given m: Mirror.Of[T] => Some(m)
13+
case _ => None
14+
}
15+
16+
// Get fields from a mirror:
17+
inline def mirrorFields[Fields <: Tuple]: List[String] =
18+
inline erasedValue[Fields] match {
19+
case _: (field *: fields) => constValue[field].toString :: mirrorFields[fields]
20+
case _ => Nil
21+
}
22+
23+
inline def usingSummonFrom[T](value: =>T): String =
24+
${ usingSummonFromImpl('value, summonMirror[T]) }
25+
26+
def usingSummonFromImpl[T: Type](value: Expr[T], m: Option[Mirror.Of[T]])(given qctx: QuoteContext): Expr[String] = {
27+
import qctx.tasty.{_, given}
28+
val theMirror = m match { case Some(mirror) => mirror }
29+
30+
theMirror match {
31+
case m: Mirror.ProductOf[T] => println("it's a product: " + mirrorFields[m.MirroredElemLabels])
32+
}
33+
34+
'{ "Doesn't matter" }
35+
}
36+
}

tests/run-macros/i8007/Test_2.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import Macro._
2+
3+
@main def Test() = {
4+
val list = usingSummonFrom[Person](Person("Test", 23))
5+
println(list)
6+
}

0 commit comments

Comments
 (0)