Closed
Description
minimized code
package a
import scala.quoted._
import scala.quoted.matching._
object A:
inline def transform[A](inline expr: A): A = ${
transformImplExpr('expr)
}
def pure[A](a:A):A = ???
def transformImplExpr[A:Type](using qctx: QuoteContext)(expr: Expr[A]): Expr[A] = {
import qctx.tasty.{given _, _}
expr.unseal match {
case Inlined(x,y,z) => transformImplExpr(z.seal.asInstanceOf[Expr[A]])
case Apply(fun,args) => '{ A.pure(${Apply(fun,args).seal.asInstanceOf[Expr[A]]}) }
case other => expr
}
}
and let try to process next macro:
package a
class Test1 {
def t1(): Unit = {
A.transform(
s"a ${1} ${2}")
}
}
Crash output (click arrow to expand)
java.lang.AssertionError: assertion failed: position not set for "a ".+(1).+(" ").+(2) # 8321 of class dotty.tools.dotc.ast.Trees$Apply in /Users/rssh/tests/scala-misc/dotty/repeat-break/repeat-break/src/main/scala/a/RepeatTransform.scala while compiling /Users/rssh/tests/scala-misc/dotty/repeat-break/repeat-break/src/test/scala/Test1.scala
[error] ## Exception when compiling 1 sources to /Users/rssh/tests/scala-misc/dotty/repeat-break/repeat-break/target/scala-0.23/test-classes5s
[error] java.lang.AssertionError: assertion failed: position not set for "a ".+(1).+(" ").+(2) # 8321 of class dotty.tools.dotc.ast.Trees$Apply in /Users/rssh/tests/scala-misc/dotty/repeat-break/repeat-break/src/main/scala/a/RepeatTransform.scala
[error] dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
[error] dotty.tools.dotc.typer.Typer$.assertPositioned(Typer.scala:60)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2241)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1361)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:595)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2172)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2367)
[error] dotty.tools.dotc.transform.Erasure$Typer.$anonfun$5(Erasure.scala:564)
[error] dotty.tools.dotc.core.Decorators$ListDecorator$.zipWithConserve$extension(Decorators.scala:110)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedApply(Erasure.scala:564)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2151)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1361)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:595)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2172)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedTyped(Erasure.scala:393)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2156)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2243)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1361)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:595)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2172)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2303)
[error] dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2325)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:747)
[error] dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:796)
[error] dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:800)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2159)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2367)
[error] dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:801)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2159)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2367)
[error] dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1685)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedDefDef(Erasure.scala:635)
[error] dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2138)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2208)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2281)
[error] dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2325)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:747)
[error] dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:1818)
[error] dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2141)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2208)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2281)
[error] dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2325)
[error] dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:747)
[error] dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:1944)
[error] dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2182)
[error] dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2209)
[error] dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error] dotty.tools.dotc.typer.Typer.op$1(Typer.scala:2247)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2256)
[error] dotty.tools.dotc.typer.Typer.typed(Typer.scala:2259)
[error] dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2367)
[error] dotty.tools.dotc.transform.Erasure.run(Erasure.scala:100)
[error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
[error] scala.collection.immutable.List.map(List.scala:219)
[error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
[error] dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:167)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
[error] dotty.tools.dotc.Run.runPhases$5(Run.scala:177)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:185)
[error] dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:192)
[error] dotty.tools.dotc.Run.compileSources(Run.scala:129)
[error] dotty.tools.dotc.Run.compile(Run.scala:112)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:36)
[error] dotty.tools.dotc.Driver.process(Driver.scala:189)
[error] dotty.tools.dotc.Main.process(Main.scala)
(looks like we need an API to set pos in such cases ?)