blob: 9139ce01c4cc58637b7b7dbf885de5a9d6fccbf2 (
plain) (
tree)
|
|
object Test extends dotty.runtime.LegacyApp {
import scala.reflect.runtime.universe._
//
// x's owner is outer Test scope. Previosly the quasiquote expansion
// looked like:
//
// object Test {
// build.withFreshTermName("doWhile")(n =>
// LabelDef(n, List(),
// Block(
// List({ val x = 1; x }),
// If(Literal(Constant(true)), Apply(Ident(n), List()), Literal(Constant(())))))
// }
//
// Here the proper owner is anonymous function, not the Test. Hence
// symbol corruption. In new encoding this is represented as:
//
// object Test {
// {
// val n = build.freshTermName("doWhile")
// LabelDef(n, List(),
// Block(
// List({ val x = 1; x }),
// If(Literal(Constant(true)), Apply(Ident(n), List()), Literal(Constant(()))))
// }
// }
//
// Owner stays the same and life is good again.
//
println(q"do ${ val x = 1; x } while(true)")
}
|