Closed
Description
Compiler version
3.1.1
Minimized code
file M.scala
package x
import scala.quoted.*
object M {
inline def useFoldTree[X](inline x:X):X = ${
useFoldTreeImpl('x)
}
def useFoldTreeImpl[X:Type](x:Expr[X])(using Quotes):Expr[X] = {
import quotes.reflect.*
val search = new TreeAccumulator[Int] {
def foldTree(s:Int, tree: Tree)(owner: Symbol): Int =
foldOverTree(s,tree)(owner)
}
search.foldTree(0,x.asTerm)(Symbol.spliceOwner)
x
}
}
File X.scala
package x
def thing() =
M.useFoldTree {
Option("") match
case None =>
case Some(_) =>
???
}
Output
[info] compiling 2 Scala sources to /Users/rssh/tests/dotty/cantiBot1/target/scala-3.1.1/classes ...
[error] -- Error: /Users/rssh/tests/dotty/cantiBot1/src/main/scala/x/X.scala:5:20 ------
[error] 5 | M.useFoldTree {
[error] | ^
[error] |Exception occurred while executing macro expansion.
[error] |scala.MatchError: Typed(UnApply(TypeApply(Select(Ident(Some),unapply),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class String)])),List(),List(Ident(_))),TypeTree[AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Some),List(TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class String)))]) (of class dotty.tools.dotc.ast.Trees$Typed)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4421)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4334)
[error] | at x.M$$anon$1.foldOverTree(M.scala:12)
[error] | at x.M$$anon$1.foldTree(M.scala:14)
[error] | at x.M$$anon$1.foldTree(M.scala:13)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4417)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4334)
[error] | at x.M$$anon$1.foldOverTree(M.scala:12)
[error] | at x.M$$anon$1.foldTree(M.scala:14)
[error] | at x.M$$anon$1.foldTree(M.scala:13)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4339)
[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:4339)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4334)
[error] | at x.M$$anon$1.foldTrees(M.scala:12)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4374)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4334)
[error] | at x.M$$anon$1.foldOverTree(M.scala:12)
[error] | at x.M$$anon$1.foldTree(M.scala:14)
[error] | at x.M$$anon$1.foldTree(M.scala:13)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4366)
[error] | at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4334)
[error] | at x.M$$anon$1.foldOverTree(M.scala:12)
[error] | at x.M$$anon$1.foldTree(M.scala:14)
Expectation
Should be compiled