summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index e8d7b2a6c9..2bdb1eaa43 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -132,7 +132,7 @@ abstract class GenJVM extends SubComponent {
}
if (!(jclass.getName().endsWith("$") && sym.isModuleClass))
addScalaAttr(if (isTopLevelModule(sym)) sym.sourceModule else sym);
- addInnerClasses
+ addInnerClasses(jclass)
val outfile = getFile(jclass, ".class")
val outstream = new DataOutputStream(outfile.output)
@@ -405,7 +405,7 @@ abstract class GenJVM extends SubComponent {
}
def addGenericSignature(jmember: JMember, sym: Symbol) {
- if (!sym.hasFlag(Flags.PRIVATE | Flags.EXPANDEDNAME | Flags.SYNTHETIC) && settings.target.value == "jvm-1.5") {
+ if (settings.target.value == "jvm-1.5") {
erasure.javaSig(sym) match {
case Some(sig) =>
val index = jmember.getConstantPool().addUtf8(sig).toShort
@@ -465,11 +465,14 @@ abstract class GenJVM extends SubComponent {
jmember.addAttribute(attr)
}
- def addInnerClasses {
+ def addInnerClasses(jclass: JClass) {
+ def addOwnInnerClasses(cls: Symbol) {
+ for (sym <- cls.info.decls.elements if sym.isClass)
+ innerClasses = innerClasses + sym;
+ }
// add inner classes which might not have been referenced yet
atPhase(currentRun.erasurePhase) {
- for (sym <- clasz.symbol.info.decls.elements if sym.isClass)
- innerClasses = innerClasses + sym;
+ addOwnInnerClasses(clasz.symbol)
}
if (!innerClasses.isEmpty) {
@@ -479,13 +482,16 @@ 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("$"))
- //outerName = outerName.substring(0, outerName.length - 1)
+ if (outerName.endsWith("$"))
+ outerName = outerName.substring(0, outerName.length - 1)
+ var flags = javaFlags(innerSym)
+ if (innerSym.rawowner.hasFlag(Flags.MODULE))
+ flags |= JAccessFlags.ACC_STATIC
innerClassesAttr.addEntry(javaName(innerSym),
outerName,
innerSym.rawname.toString,
- javaFlags(innerSym));
+ flags);
}
}
}
@@ -811,7 +817,7 @@ abstract class GenJVM extends SubComponent {
start = labels(b).getAnchor()
end = endPC(b)
}
- covered = covered remove b.==
+ covered = covered - b
}
});