Skip to content

macro crashed with assertion 'position not set' when processing expressions with string interpolation, constructed by tasty API  #8325

Closed
@rssh

Description

@rssh

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 ?)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions