summaryrefslogtreecommitdiff
path: root/test/files/run/t8047.scala
blob: 9ec8c1dc565e3020c058ede2f849c7502b66c6e5 (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 App {
  import scala.reflect.runtime.universe._
  //
  // x's owner is outer Test scope. Previously 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)")
}