1
import scala.reflect.runtime.universe._
4
trait ToS { final override def toString = getClass.getName }
6
def f1 = { case class Bar() extends ToS; Bar }
7
def f2 = { case class Bar() extends ToS; Bar() }
8
def f3 = { class Bar() extends ToS; object Bar extends ToS; Bar }
9
def f4 = { class Bar() extends ToS; new Bar() }
10
def f5 = { object Bar extends ToS; Bar }
11
def f6 = { () => { object Bar extends ToS ; Bar } }
12
def f7 = { val f = { () => { object Bar extends ToS ; Bar } } ; f }
14
def f8 = { trait A ; trait B extends A ; class C extends B with ToS; new C { } }
15
def f9 = { trait A ; trait B ; class C extends B with A with ToS; new C { } }
17
def f10 = { class A { type T1 } ; List[A#T1]() }
18
def f11 = { abstract class A extends Seq[Int] ; List[A]() }
19
def f12 = { abstract class A extends Seq[U forSome { type U <: Int }] ; List[A]() }
21
val g1 = { case class Bar() extends ToS; Bar }
22
val g2 = { case class Bar() extends ToS; Bar() }
23
val g3 = { class Bar() extends ToS; object Bar extends ToS; Bar }
24
val g4 = { class Bar() extends ToS; new Bar() }
25
val g5 = { object Bar extends ToS; Bar }
26
val g6 = { () => { object Bar extends ToS ; Bar } }
27
val g7 = { val f = { () => { object Bar extends ToS ; Bar } } ; f }
29
val g8 = { trait A ; trait B extends A ; class C extends B with ToS; new C { } }
30
val g9 = { trait A ; trait B ; class C extends B with A with ToS; new C { } }
32
val g10 = { class A { type T1 } ; List[A#T1]() }
33
val g11 = { abstract class A extends Seq[Int] ; List[A]() }
34
val g12 = { abstract class A extends Seq[U forSome { type U <: Int }] ; List[A]() }
36
def printTpe(t: Type) = {
37
val s = if (t.typeSymbol.isFreeType) t.typeSymbol.typeSignature.toString else t.typeSymbol.toString
38
println("%s, t=%s, s=%s".format(t, t.asInstanceOf[Product].productPrefix, s))
40
def m[T: TypeTag](x: T) = printTpe(typeOf[T])
41
def m2[T: WeakTypeTag](x: T) = printTpe(implicitly[WeakTypeTag[T]].tpe)
43
// tags do work for f10/g10
44
def main(args: Array[String]): Unit = {
73
trait Bippy { def bippy = "I'm Bippy!" }
75
def f1 = { trait A extends Seq[U forSome { type U <: Bippy }] ; abstract class B extends A ; trait C extends B ; (null: C) }
76
def f2 = f1.head.bippy
b'\\ No newline at end of file'