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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
object Macros1 {
class C[T] {
def foo[U](x: U): Unit = macro Impls1.foo[U]
}
}
object Macros2 {
class C[T] {
def foo[U](x: U): Unit = macro Impls2.foo[T, U]
}
}
object Macros3 {
class D[T] {
class C[U] {
def foo[V]: Unit = macro Impls345.foo[T, U, V]
}
}
}
// object Macros4 is declared in Impls_1.scala
object Macros5 {
class D[T] {
class C[U] {
def foo[V]: Unit = macro Impls345.foo[T, U, V]
foo[Boolean]
}
}
}
object Test extends App {
println("===Macros1===")
new Macros1.C[Int]().foo(42)
new Macros1.C[Boolean]().foo(42)
new Macros1.C[Int]().foo("42")
new Macros1.C[String]().foo(true)
println("===Macros2===")
object D2 extends Macros2.C[Boolean]
D2.foo(42)
D2.foo("42")
println("===Macros3===")
val outer31 = new Macros3.D[Int]
val outer32 = new outer31.C[String]
outer32.foo[Boolean]
println("===Macros4===")
val outer41 = new Macros4.D[Int]
val outer42 = new outer41.C[String]
outer42.foo[Boolean]
println("===Macros5===")
val outer1 = new Macros5.D[Int]
new outer1.C[String]
}
|