Closed
Description
Compiler version
3.1.3-RC1-bin-20220325-6f3fe05-NIGHTLY
Minimized code
build.sbt
scalaVersion := "3.1.3-RC1-bin-20220325-6f3fe05-NIGHTLY"
libraryDependencies += "org.scala-lang" %% "scala3-tasty-inspector" % scalaVersion.value
Main.scala
package example
import scala.compiletime.erasedValue
import scala.compiletime.summonFrom
import scala.quoted.Quotes
import scala.tasty.inspector.Inspector
import scala.tasty.inspector.Tasty
import scala.tasty.inspector.TastyInspector
object Main {
transparent inline def summonFirst0[T]: Any =
inline erasedValue[T] match
case _: (a *: b) => summonFrom {
case instance: `a` => instance
case _ => summonFirst0[b]
}
def main(args: Array[String]): Unit = {
val inspector = new Inspector {
def inspect(using q: Quotes)(tastys: List[Tasty[q.type]]): Unit = {
import q.reflect.*
val traverser = new TreeTraverser {
override def traverseTree(tree: Tree)(owner: Symbol): Unit = {
try {
super.traverseTree(tree)(owner)
} catch {
case e =>
report.error(s"unexpected error ${e}", tree.pos)
throw e
}
}
}
tastys.foreach{ tasty =>
traverser.traverseTree(tasty.ast)(tasty.ast.symbol)
}
}
}
TastyInspector.inspectAllTastyFiles(
tastyFiles = Nil,
jars = this.getClass.getProtectionDomain.getCodeSource.getLocation.getPath :: Nil,
dependenciesClasspath = Nil,
)(inspector)
}
}
Output
[info] running example.Main
-- Error: Main.scala:13:37 -----------------------------------------------------
13 | case _: (a *: b) => summonFrom {
| ^
|unexpected error scala.MatchError: InlineMatch(EmptyTree, List(CaseDef(Bind(instance,Typed(Ident(_),Ident(a))),EmptyTree,Block(List(),Typed(Ident(instance),TypeTree[TypeRef(NoPrefix,type a)]))), CaseDef(Ident(_),EmptyTree,Block(List(),TypeApply(Ident(summonFirst0),List(Ident(b))))))) (of class dotty.tools.dotc.ast.Trees$InlineMatch)
14 | case instance: `a` => instance
15 | case _ => summonFirst0[b]
16 | }
scala.MatchError: InlineMatch(EmptyTree, List(CaseDef(Bind(instance,Typed(Ident(_),Ident(a))),EmptyTree,Block(List(),Typed(Ident(instance),TypeTree[TypeRef(NoPrefix,type a)]))), CaseDef(Ident(_),EmptyTree,Block(List(),TypeApply(Ident(summonFirst0),List(Ident(b))))))) (of class dotty.tools.dotc.ast.Trees$InlineMatch) while compiling /Users/kenji/InlineMatch-inspector-error/target/bg-jobs/sbt_5fef1186/job-7/target/c303e2d0/1377879e/inlinematch-inspector-error_3-0.1.0-SNAPSHOT.jar
[error] scala.MatchError: InlineMatch(EmptyTree, List(CaseDef(Bind(instance,Typed(Ident(_),Ident(a))),EmptyTree,Block(List(),Typed(Ident(instance),TypeTree[TypeRef(NoPrefix,type a)]))), CaseDef(Ident(_),EmptyTree,Block(List(),TypeApply(Ident(summonFirst0),List(Ident(b))))))) (of class dotty.tools.dotc.ast.Trees$InlineMatch)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4623)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldOverTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4644)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTreeChildren(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4640)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTree(Main.scala:25)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4642)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4568)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldOverTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4644)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTreeChildren(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4640)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTree(Main.scala:25)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4642)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4619)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldOverTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4644)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTreeChildren(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4640)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTree(Main.scala:25)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4642)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4539)
[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:4539)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldTrees(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4576)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldOverTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4644)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTreeChildren(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4640)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTree(Main.scala:25)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4642)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4539)
[error] at scala.collection.IterableOnceOps.foldLeft(IterableOnce.scala:646)
[error] at scala.collection.IterableOnceOps.foldLeft$(IterableOnce.scala:642)
[error] at scala.collection.AbstractIterable.foldLeft(Iterable.scala:926)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees(Quotes.scala:4539)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldTrees(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4590)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldOverTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4644)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTreeChildren(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4640)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTree(Main.scala:25)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4642)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4539)
[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:4539)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldTrees(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4596)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldOverTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4644)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTreeChildren(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4640)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTree(Main.scala:25)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree(Quotes.scala:4642)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.foldTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at example.Main$$anon$2.foldTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4539)
[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:4539)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldTrees(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4602)
[error] at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4534)
[error] at example.Main$$anon$2.foldOverTree(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren(Quotes.scala:4644)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTreeChildren$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTreeChildren(Main.scala:22)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree(Quotes.scala:4640)
[error] at scala.quoted.Quotes$reflectModule$TreeTraverser.traverseTree$(Quotes.scala:4638)
[error] at example.Main$$anon$2.traverseTree(Main.scala:25)
[error] at example.Main$.example$Main$$anon$1$$_$inspect$$anonfun$1(Main.scala:34)
[error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] at scala.collection.immutable.List.foreach(List.scala:333)
[error] at example.Main$$anon$1.inspect(Main.scala:34)
[error] at scala.tasty.inspector.TastyInspector$TastyInspectorPhase$1.runOnImpl(TastyInspector.scala:78)
[error] at scala.tasty.inspector.TastyInspector$TastyInspectorPhase$1.runOn(TastyInspector.scala:70)
[error] at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:225)
[error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1328)
[error] at dotty.tools.dotc.Run.runPhases$1(Run.scala:236)
[error] at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:244)
[error] at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:253)
[error] at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:68)
[error] at dotty.tools.dotc.Run.compileUnits(Run.scala:253)
[error] at dotty.tools.dotc.Run.compileUnits(Run.scala:192)
[error] at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:14)
[error] at dotty.tools.dotc.Driver.doCompile(Driver.scala:35)
[error] at dotty.tools.dotc.Driver.process(Driver.scala:195)
[error] at dotty.tools.dotc.Driver.process(Driver.scala:163)
[error] at dotty.tools.dotc.Driver.process(Driver.scala:175)
[error] at scala.tasty.inspector.TastyInspector$.inspectFiles(TastyInspector.scala:117)
[error] at scala.tasty.inspector.TastyInspector$.inspectAllTastyFiles(TastyInspector.scala:59)
[error] at example.Main$.main(Main.scala:42)
[error] at example.Main.main(Main.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] at java.lang.reflect.Method.invoke(Method.java:498)
[error] stack trace is suppressed; run last Compile / run for the full output
[error] (Compile / run) scala.MatchError: InlineMatch(EmptyTree, List(CaseDef(Bind(instance,Typed(Ident(_),Ident(a))),EmptyTree,Block(List(),Typed(Ident(instance),TypeTree[TypeRef(NoPrefix,type a)]))), CaseDef(Ident(_),EmptyTree,Block(List(),TypeApply(Ident(summonFirst0),List(Ident(b))))))) (of class dotty.tools.dotc.ast.Trees$InlineMatch)
Expectation
Don't throw MatchError