summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiguel Garcia <miguelalfredo.garcia@epfl.ch>2012-06-01 20:17:42 +0200
committerMiguel Garcia <miguelalfredo.garcia@epfl.ch>2012-06-01 20:17:42 +0200
commitfb249b044d2679936c969b16fce9e19646a0b310 (patch)
tree44f0d7c3c2d09194dd47e307436e1284883b3659 /src
parent71006c07440af3d597e4f645af8af5df61472b09 (diff)
downloadscala-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.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 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)