|
| 1 | +import scala.language.experimental.modularity |
| 2 | + |
| 3 | +class Box(tracked val v: Any) |
| 4 | +class C(tracked val x: Int) |
| 5 | +class NC(tracked val c: C) |
| 6 | +class NNC(tracked val c: NC) |
| 7 | +class F[A](tracked val a: Int) |
| 8 | +class G[A](tracked val a: A) |
| 9 | +class NF[A](tracked val f: F[A]) |
| 10 | + |
| 11 | +class Person(val name: String, tracked val age: Int) |
| 12 | +class PersonPrime(val name: String)(tracked val age: Int) |
| 13 | +class PersonBis(tracked val name: String)(val age: Int) |
| 14 | + |
| 15 | +class Generic[A](val a: A) |
| 16 | + |
| 17 | +object O: |
| 18 | + val m: Int = 27 |
| 19 | + |
| 20 | + class InnerClass(tracked val x: Int) |
| 21 | + |
| 22 | +object Test extends App { |
| 23 | + val c: C(42) = C(42) |
| 24 | + val nc: NC(C(42)) = NC(C(42)) |
| 25 | + val nc1: NC(c) = NC(c) |
| 26 | + val nnc: NNC(NC(C(42))) = NNC(NC(C(42))) |
| 27 | + val f: F[Int](42) = F[Int](42) |
| 28 | + val f2: F[Int](42) = F(42) |
| 29 | + val f3: F(42) = F(42) |
| 30 | + val g: G(42) = G(42) |
| 31 | + |
| 32 | + val n: Int = 27 |
| 33 | + val c2: C(n) = C(n) |
| 34 | + val c3: C(O.m) = C(O.m) |
| 35 | + |
| 36 | + val box: Box(O.InnerClass(42)) = Box(O.InnerClass(42)) |
| 37 | + val box2: Box(O.InnerClass(n)) = Box(O.InnerClass(n)) |
| 38 | + val box3: Box(O.InnerClass(O.m)) = Box(O.InnerClass(O.m)) |
| 39 | + |
| 40 | + val person: Person("Kasia", 27) = Person("Kasia", 27) // warn |
| 41 | + val person1: Person("Kasia", n) = Person("Kasia", n) // warn |
| 42 | + val person2: Person("Kasia", O.m) = Person("Kasia", O.m) // warn |
| 43 | + |
| 44 | + val personPrime: PersonPrime("Kasia")(27) = PersonPrime("Kasia")(27) // warn |
| 45 | + val personPrime1: PersonPrime("Kasia")(n) = PersonPrime("Kasia")(n) // warn |
| 46 | + val personPrime2: PersonPrime("Kasia")(O.m) = PersonPrime("Kasia")(O.m) // warn |
| 47 | + |
| 48 | + val personBis: PersonBis("Kasia")(27) = PersonBis("Kasia")(27) // warn |
| 49 | + val personBis1: PersonBis("Kasia")(n) = PersonBis("Kasia")(n) // warn |
| 50 | + val personBis2: PersonBis("Kasia")(O.m) = PersonBis("Kasia")(O.m) // warn |
| 51 | + |
| 52 | + val generic1: Generic(compiletime.erasedValue[Int]) = Generic(42) // warn |
| 53 | + val generic2: Generic(??? : Int) = Generic(42) // warn |
| 54 | + val generic3: Generic(43) = Generic(42) // warn |
| 55 | +} |
0 commit comments