summaryrefslogtreecommitdiff
path: root/test/files/run/t8944b.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2014-11-10 23:48:55 +1000
committerJason Zaugg <jzaugg@gmail.com>2014-11-12 16:25:50 +1000
commitff2cd805111b4fcd39ce7fb1f4bd0268a50faeee (patch)
treeb0bc440231aa8d75f2471a1f4a43174cc0772e71 /test/files/run/t8944b.scala
parent15ae8ddd1cc68bee0b4b38b3830720d422656642 (diff)
downloadscala-ff2cd805111b4fcd39ce7fb1f4bd0268a50faeee.tar.gz
scala-ff2cd805111b4fcd39ce7fb1f4bd0268a50faeee.tar.bz2
scala-ff2cd805111b4fcd39ce7fb1f4bd0268a50faeee.zip
SI-8944 A more resiliant naming scheme for case accessors
Case class parameters that are less that public have an extra accessor method created to ensure universal pattern matchability. See #4081 for more background. Currently, this is given a fresh name based on the parameter name. However, this is fragile and the name can change based on unrelated edits higher up in the source file. This commit switches to a stable naming scheme for these methods. A non-public case field `foo` has a corresponding accessor `foo$access$N`, where `N` is the index of the parameter within the constructor parameter list. The enclosed tests show a case that used to trigger a linkage error under separate compilation that now works; shows that by choosing the `foo$access$1` rather than `foo$1` we don't clash with lambda lifted methods in the class; and shows the names of the accessor methods as seen via Java reflection.
Diffstat (limited to 'test/files/run/t8944b.scala')
-rw-r--r--test/files/run/t8944b.scala9
1 files changed, 9 insertions, 0 deletions
diff --git a/test/files/run/t8944b.scala b/test/files/run/t8944b.scala
new file mode 100644
index 0000000000..f469122ce6
--- /dev/null
+++ b/test/files/run/t8944b.scala
@@ -0,0 +1,9 @@
+case class A(private var foo: Any) {
+ def m = { def foo = 42 /*will be lamba lifted to `A#foo$1`*/ }
+}
+object Test {
+ def main(args: Array[String]): Unit = {
+ val A("") = new A("")
+ new A("").m
+ }
+}