diff options
author | Miguel Garcia <miguelalfredo.garcia@epfl.ch> | 2012-06-01 20:17:42 +0200 |
---|---|---|
committer | Miguel Garcia <miguelalfredo.garcia@epfl.ch> | 2012-06-01 20:17:42 +0200 |
commit | fb249b044d2679936c969b16fce9e19646a0b310 (patch) | |
tree | 44f0d7c3c2d09194dd47e307436e1284883b3659 /src | |
parent | 71006c07440af3d597e4f645af8af5df61472b09 (diff) | |
download | scala-fb249b044d2679936c969b16fce9e19646a0b310.tar.gz scala-fb249b044d2679936c969b16fce9e19646a0b310.tar.bz2 scala-fb249b044d2679936c969b16fce9e19646a0b310.zip |
GenASM-based fix for SI-4804. Fix of the same for GenJVM pending.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala index 99832d1327..97b2426646 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala @@ -1395,7 +1395,7 @@ abstract class GenASM extends SubComponent with BytecodeWriters { // typestate: entering mode with valid call sequences:
// ( visitInnerClass | visitField | visitMethod )* visitEnd
- if (isStaticModule(c.symbol) || serialVUID != None || isParcelableClass) {
+ if (isStaticModule(c.symbol) || isParcelableClass) {
if (isStaticModule(c.symbol)) { addModuleInstanceField() }
addStaticInit(c.lookupStaticCtor)
@@ -1423,6 +1423,18 @@ abstract class GenASM extends SubComponent with BytecodeWriters { }
+ // add static serialVersionUID field if `clasz` annotated with `@SerialVersionUID(uid: Long)`
+ serialVUID foreach { value =>
+ val fieldName = "serialVersionUID"
+ jclass.visitField(
+ PublicStaticFinal,
+ fieldName,
+ tdesc_long,
+ null, // no java-generic-signature
+ value
+ ).visitEnd()
+ }
+
clasz.fields foreach genField
clasz.methods foreach { im => genMethod(im, c.symbol.isInterface) }
@@ -1645,15 +1657,6 @@ abstract class GenASM extends SubComponent with BytecodeWriters { lastBlock emit CALL_METHOD(m.symbol.enclClass.primaryConstructor, Static(true))
}
- // add serialVUID code
- serialVUID foreach { value =>
- val fieldName = "serialVersionUID"
- val fieldSymbol = clasz.symbol.newValue(newTermName(fieldName), NoPosition, Flags.STATIC | Flags.FINAL) setInfo LongClass.tpe
- clasz addField new IField(fieldSymbol)
- lastBlock emit CONSTANT(Constant(value))
- lastBlock emit STORE_FIELD(fieldSymbol, true)
- }
-
if (isParcelableClass) { addCreatorCode(lastBlock) }
lastBlock emit RETURN(UNIT)
@@ -1684,17 +1687,6 @@ abstract class GenASM extends SubComponent with BytecodeWriters { thisName, INSTANCE_CONSTRUCTOR_NAME, mdesc_arglessvoid)
}
- serialVUID foreach { value =>
- val fieldName = "serialVersionUID"
- jclass.visitField(
- PublicStaticFinal,
- fieldName,
- tdesc_long,
- null, // no java-generic-signature
- value // TODO confirm whether initial value here is behaviorally equiv to fjbg's emitPUSH emitPUTSTATIC
- ).visitEnd()
- }
-
if (isParcelableClass) { legacyAddCreatorCode(clinit) }
clinit.visitInsn(asm.Opcodes.RETURN)
|