summaryrefslogtreecommitdiff
path: root/test/files/run/t5652b
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-05-25 08:07:28 +0200
committerJason Zaugg <jzaugg@gmail.com>2012-05-26 18:47:12 +0200
commit4794374af4d7c84ed6e06ac9c4e4f9f9d09cb102 (patch)
treed89f47528c5ed60970b4321aa0d6169a880a240a /test/files/run/t5652b
parent123050cf07229d02789dc42e27a85c93fd9343a4 (diff)
downloadscala-4794374af4d7c84ed6e06ac9c4e4f9f9d09cb102.tar.gz
scala-4794374af4d7c84ed6e06ac9c4e4f9f9d09cb102.tar.bz2
scala-4794374af4d7c84ed6e06ac9c4e4f9f9d09cb102.zip
SI-5652 Mangle names of potentially public lambda lifted methods.
This can happen if they are accessed from an inner class. If a subclass is happens to lift a public method to the same name, a VerifyError ensues. The enclosed tests: - demonstrate the absense of the VerifyError - show the names generated for the lifted methods (which are unchanged if not called from an inner class, or if lifted into a trait implementation class.) - ensure that the callers are rewritten to call the correct method when multiple with the same name are lifted. It's not ideal that this phase needs a priori knowledge of the later phases to perform this mangling. A better fix would defer this until the point when the methods are publicised, and leave the unmangled private method in place and install an public, mangled forwarder.
Diffstat (limited to 'test/files/run/t5652b')
-rw-r--r--test/files/run/t5652b/t5652b_1.scala3
-rw-r--r--test/files/run/t5652b/t5652b_2.scala9
2 files changed, 12 insertions, 0 deletions
diff --git a/test/files/run/t5652b/t5652b_1.scala b/test/files/run/t5652b/t5652b_1.scala
new file mode 100644
index 0000000000..72ba5dcd82
--- /dev/null
+++ b/test/files/run/t5652b/t5652b_1.scala
@@ -0,0 +1,3 @@
+class A1 {
+ def f1 = { def g = 5 ; class A { def a = 0 } ; new A; g }
+}
diff --git a/test/files/run/t5652b/t5652b_2.scala b/test/files/run/t5652b/t5652b_2.scala
new file mode 100644
index 0000000000..113736a24b
--- /dev/null
+++ b/test/files/run/t5652b/t5652b_2.scala
@@ -0,0 +1,9 @@
+class A2 extends A1 {
+ def f2 = { def g = 5 ; class A { def a = 0 } ; new A; g }
+}
+
+object Test extends A2 {
+ def main(args: Array[String]) {
+ println(Seq(classOf[A1], classOf[A2]).flatMap(_.getDeclaredMethods.map(_.toString).sorted).mkString("\n"))
+ }
+}