-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Labels
area:metaprogramming:reflectionIssues related to the quotes reflection APIIssues related to the quotes reflection APIitype:bug
Description
Compiler version
broken in 3.1.{0,1,2} work in 3.0.2
Minimized code
import scala.quoted.*
inline def myTreeTraverse[T](inline expr: T): T = ${ treeTraverseImpl('expr) }
def treeTraverseImpl[T: Type](value: Expr[T])(using quotes: Quotes): Expr[T] = {
import quotes.reflect.*
(new TreeTraverser {}).traverseTree(value.asTerm)(Symbol.spliceOwner)
value
}
// another file
def test() =
myTreeTraverse {
Option.empty[Int] match
case Some(n) => 1
case None => 5
}
Output
[error] ./Test.scala:5:3: Exception occurred while executing macro expansion.
[error] scala.MatchError: Typed(UnApply(TypeApply(Select(Ident(Some),unapply),List(TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int)])),List(),List(Bind(n,Ident(_)))),TypeTree[AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Some),List(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int)))]) (of class dotty.tools.dotc.ast.Trees$Typed)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4454)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4367)
[error] at TreeTraverse$package$$anon$1.foldOverTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4476)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTreeChildren(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4472)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4474)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4450)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4367)
[error] at TreeTraverse$package$$anon$1.foldOverTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4476)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTreeChildren(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4472)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4474)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4372)
[error] at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
[error] at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
[error] at scala.collection.immutable.List.foldLeft(List.scala:79)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees(Quotes.scala:4372)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4367)
[error] at TreeTraverse$package$$anon$1.foldTrees(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4407)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4367)
[error] at TreeTraverse$package$$anon$1.foldOverTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4476)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTreeChildren(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4472)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4474)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4399)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4367)
[error] at TreeTraverse$package$$anon$1.foldOverTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4476)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTreeChildren(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4472)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4474)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at TreeTraverse$package$$anon$1.foldTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4415)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4367)
[error] at TreeTraverse$package$$anon$1.foldOverTree(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4476)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTreeChildren(TreeTraverse.scala:7)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4472)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4470)
[error] at TreeTraverse$package$$anon$1.traverseTree(TreeTraverse.scala:7)
[error] at TreeTraverse$package$.treeTraverseImpl(TreeTraverse.scala:7)
[error]
Expectation
Compiles just fine (like 3.0.2)
Metadata
Metadata
Assignees
Labels
area:metaprogramming:reflectionIssues related to the quotes reflection APIIssues related to the quotes reflection APIitype:bug