aboutsummaryrefslogtreecommitdiff
path: root/tests/pending/run/t8047.scala
blob: 9139ce01c4cc58637b7b7dbf885de5a9d6fccbf2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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)")
}