From 4794374af4d7c84ed6e06ac9c4e4f9f9d09cb102 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Fri, 25 May 2012 08:07:28 +0200 Subject: 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. --- test/files/run/t5652b/t5652b_1.scala | 3 +++ test/files/run/t5652b/t5652b_2.scala | 9 +++++++++ 2 files changed, 12 insertions(+) create mode 100644 test/files/run/t5652b/t5652b_1.scala create mode 100644 test/files/run/t5652b/t5652b_2.scala (limited to 'test/files/run/t5652b') 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")) + } +} -- cgit v1.2.3