Skip to content

Commit 06da51f

Browse files
committed
Preextend TreeAccumulator, TreeTraverser and TreeMap in Reflection
1 parent dfba877 commit 06da51f

File tree

10 files changed

+36
-35
lines changed

10 files changed

+36
-35
lines changed

library/src/scala/internal/quoted/Matcher.scala

+2-6
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,7 @@ private[quoted] object Matcher {
156156
if patternHole.symbol == internal.Definitions_InternalQuoted_patternHole =>
157157
def bodyFn(lambdaArgs: List[Tree]): Tree = {
158158
val argsMap = args.map(_.symbol).zip(lambdaArgs.asInstanceOf[List[Term]]).toMap
159-
new scala.tasty.reflect.TreeMap {
160-
val reflect: qctx.tasty.type = qctx.tasty
161-
import reflect.{given, _}
159+
new TreeMap {
162160
override def transformTerm(tree: Term)(given ctx: Context): Term =
163161
tree match
164162
case tree: Ident => summon[Env].get(tree.symbol).flatMap(argsMap.get).getOrElse(tree)
@@ -320,9 +318,7 @@ private[quoted] object Matcher {
320318

321319
/** Return all free variables of the term defined in the pattern (i.e. defined in `Env`) */
322320
def freePatternVars(term: Term)(given ctx: Context, env: Env): Set[Symbol] =
323-
val accumulator = new scala.tasty.reflect.TreeAccumulator[Set[Symbol]] {
324-
val reflect: qctx.tasty.type = qctx.tasty
325-
import reflect.{given, _}
321+
val accumulator = new TreeAccumulator[Set[Symbol]] {
326322
def foldTree(x: Set[Symbol], tree: Tree)(given ctx: Context): Set[Symbol] =
327323
tree match
328324
case tree: Ident if env.contains(tree.symbol) => foldOverTree(x + tree.symbol, tree)

library/src/scala/quoted/unsafe/UnsafeExpr.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ object UnsafeExpr {
6565
private def bodyFn[t](given qctx: QuoteContext)(e: qctx.tasty.Term, params: List[qctx.tasty.ValDef], args: List[qctx.tasty.Term]): qctx.tasty.Term = {
6666
import qctx.tasty.{given, _}
6767
val map = params.map(_.symbol).zip(args).toMap
68-
new scala.tasty.reflect.TreeMap {
69-
val reflect: qctx.tasty.type = qctx.tasty
68+
new TreeMap {
7069
override def transformTerm(tree: Term)(given ctx: Context): Term =
7170
super.transformTerm(tree) match
7271
case tree: Ident => map.getOrElse(tree.symbol, tree)

library/src/scala/tasty/Reflection.scala

+15
Original file line numberDiff line numberDiff line change
@@ -2731,6 +2731,21 @@ class Reflection(private[scala] val internal: CompilerInterface) { self =>
27312731
// UTILS //
27322732
///////////////
27332733

2734+
/** TASTy Reflect tree accumulator */
2735+
trait TreeAccumulator[X] extends reflect.TreeAccumulator[X] {
2736+
val reflect: self.type = self
2737+
}
2738+
2739+
/** TASTy Reflect tree traverser */
2740+
trait TreeTraverser extends reflect.TreeTraverser {
2741+
val reflect: self.type = self
2742+
}
2743+
2744+
/** TASTy Reflect tree map */
2745+
trait TreeMap extends reflect.TreeMap {
2746+
val reflect: self.type = self
2747+
}
2748+
27342749
// TODO extract from Reflection
27352750

27362751
/** Bind the `rhs` to a `val` and use it in `body` */
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import scala.quoted.{ given _, _ }
22

33
inline def mcr(x: => Unit): Unit = ${mcrImpl('x)}
4-
def mcrImpl(x: Expr[Unit])(using qctx: QuoteContext) : Expr[Unit] =
5-
import qctx.tasty.{ given _, _ }
4+
def mcrImpl(x: Expr[Unit])(using ctx: QuoteContext) : Expr[Unit] =
5+
import ctx.tasty.{ given _, _ }
66
val tr: Term = x.unseal
7-
object m extends scala.tasty.reflect.TreeMap {
8-
val reflect: qctx.tasty.type = qctx.tasty
9-
}
7+
object m extends TreeMap
108
m.transformTerm(tr).seal.cast[Unit]

tests/run-custom-args/tasty-inspector/tasty-comment-inspector/Test.scala

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import scala.tasty.Reflection
2-
import scala.tasty.reflect.TreeTraverser
32
import scala.tasty.inspector._
43

54
object Test {
@@ -10,10 +9,10 @@ object Test {
109

1110
class CommentInspector extends TastyInspector {
1211

13-
def processCompilationUnit(reflect0: Reflection)(root: reflect0.Tree): Unit = {
14-
import reflect0.{_, given _}
12+
def processCompilationUnit(reflect: Reflection)(root: reflect.Tree): Unit = {
13+
import reflect.{_, given _}
1514
object Traverser extends TreeTraverser {
16-
val reflect: reflect0.type = reflect0
15+
1716
override def traverseTree(tree: Tree)(implicit ctx: Context): Unit = tree match {
1817
case tree: Definition =>
1918
tree.symbol.comment match {
@@ -26,7 +25,7 @@ class CommentInspector extends TastyInspector {
2625
}
2726

2827
}
29-
Traverser.traverseTree(root)(reflect0.rootContext)
28+
Traverser.traverseTree(root)(reflect.rootContext)
3029
}
3130

3231
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import scala.tasty.Reflection
2-
import scala.tasty.reflect.TreeTraverser
32
import scala.tasty.inspector._
43

54
object Test {
@@ -10,10 +9,10 @@ object Test {
109

1110
class DBInspector extends TastyInspector {
1211

13-
protected def processCompilationUnit(reflect0: Reflection)(root: reflect0.Tree): Unit = {
14-
import reflect0.{_, given _}
12+
protected def processCompilationUnit(reflect: Reflection)(root: reflect.Tree): Unit = {
13+
import reflect.{_, given _}
1514
object Traverser extends TreeTraverser {
16-
val reflect: reflect0.type = reflect0
15+
1716
override def traverseTree(tree: Tree)(implicit ctx: Context): Unit = tree match {
1817
case tree: Definition =>
1918
println(tree.showExtractors)
@@ -23,7 +22,7 @@ class DBInspector extends TastyInspector {
2322
}
2423

2524
}
26-
Traverser.traverseTree(root)(reflect0.rootContext)
25+
Traverser.traverseTree(root)(reflect.rootContext)
2726
}
2827

2928
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package scala.tasty.interpreter
22

33
import scala.tasty.Reflection
4-
import scala.tasty.reflect.TreeTraverser
54
import scala.tasty.inspector.TastyInspector
65

76
class TastyInterpreter extends TastyInspector {
87

9-
protected def processCompilationUnit(reflect0: Reflection)(root: reflect0.Tree): Unit = {
10-
import reflect0.{_, given _}
8+
protected def processCompilationUnit(reflect: Reflection)(root: reflect.Tree): Unit = {
9+
import reflect.{_, given _}
1110
object Traverser extends TreeTraverser {
12-
val reflect: reflect0.type = reflect0
11+
1312
override def traverseTree(tree: Tree)(implicit ctx: Context): Unit = tree match {
1413
// TODO: check the correct sig and object enclosement for main
1514
case DefDef("main", _, _, _, Some(rhs)) =>
@@ -21,6 +20,6 @@ class TastyInterpreter extends TastyInspector {
2120
super.traverseTree(tree)
2221
}
2322
}
24-
Traverser.traverseTree(root)(reflect0.rootContext)
23+
Traverser.traverseTree(root)(reflect.rootContext)
2524
}
2625
}

tests/run-macros/tasty-custom-show/quoted_1.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ object Macros {
1212

1313
val buff = new StringBuilder
1414

15-
val output = new scala.tasty.reflect.TreeTraverser {
16-
val reflect: qctx.tasty.type = qctx.tasty
15+
val output = new TreeTraverser {
1716
override def traverseTree(tree: Tree)(implicit ctx: Context): Unit = {
1817
// Use custom Show[_] here
1918
val printer = dummyShow

tests/run-macros/tasty-extractors-3/quoted_1.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ object Macros {
1111
import qctx.tasty.{_, given _}
1212

1313
val buff = new StringBuilder
14-
val traverser = new scala.tasty.reflect.TreeTraverser {
15-
val reflect: qctx.tasty.type = qctx.tasty
14+
val traverser = new TreeTraverser {
1615
override def traverseTree(tree: Tree)(implicit ctx: Context): Unit = tree match {
1716
case tree: TypeBoundsTree =>
1817
buff.append(tree.tpe.showExtractors)

tests/run-macros/tasty-tree-map/quoted_1.scala

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ object Macros {
66

77
def impl[T: Type](x: Expr[T])(using qctx: QuoteContext) : Expr[T] = {
88
import qctx.tasty.{_, given _}
9-
val identityMap = new scala.tasty.reflect.TreeMap {
10-
val reflect: qctx.tasty.type = qctx.tasty
11-
}
9+
val identityMap = new TreeMap { }
1210
val transformed = identityMap.transformTerm(x.unseal).seal.cast[T]
1311
transformed
1412
}

0 commit comments

Comments
 (0)