summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala13
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala2
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)