diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2016-06-06 14:24:38 +1000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2016-06-28 09:18:34 -0700 |
commit | 7d51b3fd1569917cb804363bd418466a306f5c89 (patch) | |
tree | ede84e6a0dda8750276d7c0986ffc6d15c9fb1dc /test/files/run/t7700.scala | |
parent | 91b066aac5edf53ca18603f8486eb255514b3118 (diff) | |
download | scala-7d51b3fd1569917cb804363bd418466a306f5c89.tar.gz scala-7d51b3fd1569917cb804363bd418466a306f5c89.tar.bz2 scala-7d51b3fd1569917cb804363bd418466a306f5c89.zip |
Emit trait method bodies in statics
And use this as the target of the default methods or
statically resolved super or $init calls.
The call-site change is predicated on `-Yuse-trait-statics`
as a stepping stone for experimentation / bootstrapping.
I have performed this transformation in the backend,
rather than trying to reflect this in the view from
Scala symbols + ASTs.
We also need to add an restriction related to invokespecial to Java
parents: to support a super call to one of these to implement a
super accessor, the interface must be listed as a direct parent
of the class.
The static method names has a trailing $ added to avoid duplicate
name and signature errors in classfiles.
Diffstat (limited to 'test/files/run/t7700.scala')
-rw-r--r-- | test/files/run/t7700.scala | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/test/files/run/t7700.scala b/test/files/run/t7700.scala index 76d16b808c..fd13666467 100644 --- a/test/files/run/t7700.scala +++ b/test/files/run/t7700.scala @@ -7,11 +7,13 @@ trait C[@specialized U] { def bar[A](u: U) = u } -object Test extends App { - val declared = classOf[C[_]].getDeclaredMethods.sortBy(_.getName) - println(declared.mkString("\n")) - object CInt extends C[Int] { def foo(i: Int) = i } - object CAny extends C[Any] { def foo(a: Any) = a } - assert(CInt.foo(1) == 1) - assert(CAny.foo("") == "") +object Test { + def main(args: Array[String]) { + val declared = classOf[C[_]].getDeclaredMethods.sortBy(_.getName) + println(declared.mkString("\n")) + object CInt extends C[Int] { def foo(i: Int) = i } + object CAny extends C[Any] { def foo(a: Any) = a } + assert(CInt.foo(1) == 1) + assert(CAny.foo("") == "") + } } |