summaryrefslogtreecommitdiff
path: root/test/files/run/t1300.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-07-17 15:52:48 +1000
committerJason Zaugg <jzaugg@gmail.com>2013-07-28 07:38:16 +0200
commit050b4c951c838699c2fe30cbf01b63942c63a299 (patch)
treeb74d134cbfc14b3dad08162cf6126296ca285df6 /test/files/run/t1300.scala
parent54cb6af7dbcf630a4f57e98f0099d77dd3b36693 (diff)
downloadscala-050b4c951c838699c2fe30cbf01b63942c63a299.tar.gz
scala-050b4c951c838699c2fe30cbf01b63942c63a299.tar.bz2
scala-050b4c951c838699c2fe30cbf01b63942c63a299.zip
SI-7455 Drop dummy param for synthetic access constructor
Java synthesizes public constructors in private classes to allow access from inner classes. The signature of that synthetic constructor (known as a "access constructor") has a dummy parameter appended to avoid overloading clashes. javac chooses the type "Enclosing$1" for the dummy parameter (called the "access constructor tag") which is either an existing anonymous class or a synthesized class for this purpose. In OpenJDK, this transformation is performed in: langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java (Incidentally, scalac would just emits a byte-code public constructor in this situation, rather than a private constructor / access constructor pair.) Scala parses the signature of the access contructor, and drops the $outer parameter, but retains the dummy parameter. This causes havoc when it tries to parse the bytecode for that anonymous class; the class file parser doesn't have the enclosing type parameters of Vector in scope and crash ensues. In any case, we shouldn't allow user code to see that constructor; it should only be called from within its own compilation unit. This commit drops the dummy parameter from access constructor signatures in class file parsing.
Diffstat (limited to 'test/files/run/t1300.scala')
0 files changed, 0 insertions, 0 deletions