diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala | 13 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Erasure.scala | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala index b5fa98f91e..b08ee849e6 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala @@ -57,6 +57,13 @@ abstract class GenJVM extends SubComponent { } } + /** Return the suffix of a class name */ + def moduleSuffix(sym: Symbol) = + if (sym.hasFlag(Flags.MODULE) && !sym.isMethod && + !sym.isImplClass && !sym.hasFlag(Flags.JAVA)) "$" + else ""; + + var pickledBytes = 0 // statistics /** @@ -497,7 +504,7 @@ abstract class GenJVM extends SubComponent { for (innerSym <- innerClasses.toList.sort(_.name.length < _.name.length)) { var outerName = javaName(innerSym.rawowner) // remove the trailing '$' - if (outerName.endsWith("$")) + if (outerName.endsWith("$") && isTopLevelModule(clasz.symbol)) outerName = outerName.substring(0, outerName.length - 1) var flags = javaFlags(innerSym) if (innerSym.rawowner.hasFlag(Flags.MODULE)) @@ -1631,9 +1638,7 @@ abstract class GenJVM extends SubComponent { * </p> */ def javaName(sym: Symbol): String = { - val suffix = if (sym.hasFlag(Flags.MODULE) && !sym.isMethod && - !sym.isImplClass && - !sym.hasFlag(Flags.JAVA)) "$" else ""; + val suffix = moduleSuffix(sym) if (sym == definitions.NothingClass) return javaName(definitions.RuntimeNothingClass) diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala index 6618480d58..9bffa01b71 100644 --- a/src/compiler/scala/tools/nsc/transform/Erasure.scala +++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala @@ -189,7 +189,7 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast. } } def classSig: String = - "L"+atPhase(currentRun.icodePhase)(sym.fullNameString).replace('.', '/') + "L"+atPhase(currentRun.icodePhase)(sym.fullNameString + global.genJVM.moduleSuffix(sym)).replace('.', '/') def classSigSuffix: String = "."+sym.name if (sym == ArrayClass) |