diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-07-27 22:39:44 -0700 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-07-27 22:39:44 -0700 |
commit | f3f1064c90371449949892f30de91cc1f2662c55 (patch) | |
tree | 42aefac9620bbf2f1bc62dcac018a726f5a838e0 /src | |
parent | 0b7dddbf88f582c9e04105407509334fb1ee50ec (diff) | |
parent | 050b4c951c838699c2fe30cbf01b63942c63a299 (diff) | |
download | scala-f3f1064c90371449949892f30de91cc1f2662c55.tar.gz scala-f3f1064c90371449949892f30de91cc1f2662c55.tar.bz2 scala-f3f1064c90371449949892f30de91cc1f2662c55.zip |
Merge pull request #2750 from retronym/ticket/7455-2.10.x
SI-7455 Drop dummy param for synthetic access constructor
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala index da117540b4..4e5204f283 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala @@ -626,7 +626,7 @@ abstract class ClassfileParser { sawPrivateConstructor = true in.skip(2); skipAttributes() } else { - if ((sflags & PRIVATE) != 0L && global.settings.optimise.value) { + if ((sflags & PRIVATE) != 0L && global.settings.optimise.value) { // TODO this should be !optimize, no? See c4181f656d. in.skip(4); skipAttributes() } else { val name = pool.getName(in.nextChar) @@ -636,7 +636,7 @@ abstract class ClassfileParser { info match { case MethodType(params, restpe) => // if this is a non-static inner class, remove the explicit outer parameter - val newParams = innerClasses getEntry currentClass match { + val paramsNoOuter = innerClasses getEntry currentClass match { case Some(entry) if !isScalaRaw && !isStatic(entry.jflags) => /* About `clazz.owner.isPackage` below: SI-5957 * For every nested java class A$B, there are two symbols in the scala compiler. @@ -650,6 +650,15 @@ abstract class ClassfileParser { case _ => params } + val newParams = paramsNoOuter match { + case (init :+ tail) if (jflags & JAVA_ACC_SYNTHETIC) != 0L => + // SI-7455 strip trailing dummy argument ("access constructor tag") from synthetic constructors which + // are added when an inner class needs to access a private constructor. + init + case _ => + paramsNoOuter + } + info = MethodType(newParams, clazz.tpe) } sym.setInfo(info) |