summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2009-08-31 16:27:39 +0000
committerIulian Dragos <jaguarul@gmail.com>2009-08-31 16:27:39 +0000
commit6758ca1bfe59a2b273c4e934d1bb34b736d090fa (patch)
tree843423ec3903837553a6bb55b9e9586bd80346e2
parentd227d486fdb94ef3bffcfe048a3069db3d9c14e1 (diff)
downloadscala-6758ca1bfe59a2b273c4e934d1bb34b736d090fa.tar.gz
scala-6758ca1bfe59a2b273c4e934d1bb34b736d090fa.tar.bz2
scala-6758ca1bfe59a2b273c4e934d1bb34b736d090fa.zip
Fixed #1572.
-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)