File: t8047.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (31 lines) | stat: -rw-r--r-- 999 bytes parent folder | download | duplicates (4)
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)")
}