Closed
Description
Compiler version
3.6.3
Minimized code
defs.scala
import scala.quoted.*
type Structural = {
type T
def make: T
}
transparent inline def go =
${ goImpl }
private def goImpl(using Quotes): Expr[Any] = {
import quotes.reflect.{*, given}
val t = '{
new AnyRef {
opaque type T = Int
def make: T = 0
} : Structural
}
val tpe = t.asTerm.tpe
println(Printer.TypeReprCode.show(tpe)) // OK
try {
Printer.TypeReprStructure.show(tpe) // StackOverflowError
} catch {
case e: StackOverflowError =>
e.printStackTrace
}
Expr("hello")
}
test.scala
val x = go
Output
% ~/Downloads/scala3-3.6.3-aarch64-apple-darwin/bin/scalac defs.scala test.scala
java.lang.Object {
type T >: scala.Nothing <: scala.Any
def make: this.<none>
}
java.lang.StackOverflowError
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:201)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:207)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:209)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:209)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:231)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:229)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:207)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:221)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:209)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:231)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:229)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:207)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:221)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter$TypeOps.$plus$eq(Extractors.scala:303)
at scala.quoted.runtime.impl.printers.Extractors$ExtractorsPrinter.visitType(Extractors.scala:209)