summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2014-06-10 11:00:25 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2014-07-08 13:08:10 +0200
commit57de87e655820df9d016613badc13e3e86059417 (patch)
treee11b6e815e102f49bff55ce733667b902b4ba8ff /src
parent91c7be16288e060aadb8aa7b0315b12e98621f02 (diff)
downloadscala-57de87e655820df9d016613badc13e3e86059417.tar.gz
scala-57de87e655820df9d016613badc13e3e86059417.tar.bz2
scala-57de87e655820df9d016613badc13e3e86059417.zip
Remove unnessecary check when computing InnerClass attribute flags
The final flag is computed correctly by javaFlags.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BCodeTypes.scala15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeTypes.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeTypes.scala
index 22cb189c70..9b131cb123 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeTypes.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeTypes.scala
@@ -755,12 +755,23 @@ abstract class BCodeTypes extends BCodeIdiomatic {
innerSym.rawname + innerSym.moduleSuffix
}
- val flagsWithFinal: Int = mkFlags(
+ // TODO @lry compare with table in spec: for example, deprecated should not be there it seems.
+ // http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.6-300-D.1-D.1
+ // including "deprecated" was added in the initial commit of GenASM, but it was never in GenJVM.
+ val flags: Int = mkFlags(
+ // TODO @lry adding "static" whenever the class is owned by a module seems wrong.
+ // class C { object O { class I } }
+ // here, I is marked static in the InnerClass attribute. But the I constructor takes an outer instance.
+ // was added in 0469d41
+ // what should it be? check what would make sense for java reflection.
+ // member of top-level object should be static? how about anonymous / local class that has
+ // been lifted to a top-level object?
+ // member that is only nested in objects should be static?
+ // verify: will ICodeReader still work after that? the code was introduced because of icode reader.
if (innerSym.rawowner.hasModuleFlag) asm.Opcodes.ACC_STATIC else 0,
javaFlags(innerSym),
if (isDeprecated(innerSym)) asm.Opcodes.ACC_DEPRECATED else 0 // ASM pseudo-access flag
) & (INNER_CLASSES_FLAGS | asm.Opcodes.ACC_DEPRECATED)
- val flags = if (innerSym.isModuleClass) flagsWithFinal & ~asm.Opcodes.ACC_FINAL else flagsWithFinal // For SI-5676, object overriding.
val jname = innerSym.javaBinaryName.toString // never null
val oname = { // null when method-enclosed