summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2012-06-08 06:18:37 -0700
committerAdriaan Moors <adriaan.moors@epfl.ch>2012-06-08 06:18:37 -0700
commit5cd82554069508af769d59f9e41af36f6524b4cc (patch)
tree342e91530aeb1d90938d0e57187bfc7bb934cff0 /src
parent0243fa99b238e1abdf11de8769c832e51ee33099 (diff)
parentfb249b044d2679936c969b16fce9e19646a0b310 (diff)
downloadscala-5cd82554069508af769d59f9e41af36f6524b4cc.tar.gz
scala-5cd82554069508af769d59f9e41af36f6524b4cc.tar.bz2
scala-5cd82554069508af769d59f9e41af36f6524b4cc.zip
Merge pull request #654 from magarciaEPFL/ticket-SI-4804
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.scala34
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 4b903cf556..3f193672ec 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala
@@ -1400,7 +1400,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)
@@ -1428,6 +1428,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) }
@@ -1650,15 +1662,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)
@@ -1689,17 +1692,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)