summaryrefslogtreecommitdiff
path: root/test/files/run/t3038d.scala
diff options
context:
space:
mode:
authorHubert Plociniczak <hubert.plociniczak@epfl.ch>2010-11-02 00:15:16 +0000
committerHubert Plociniczak <hubert.plociniczak@epfl.ch>2010-11-02 00:15:16 +0000
commitbcfe76ee680852c66781882d70ac02bd76e09ac9 (patch)
tree72d8a56d40bec04f0290a9909a6cff384d1ff4fb /test/files/run/t3038d.scala
parentb80f27780458da880d47392e4ac747d196af355e (diff)
downloadscala-bcfe76ee680852c66781882d70ac02bd76e09ac9.tar.gz
scala-bcfe76ee680852c66781882d70ac02bd76e09ac9.tar.bz2
scala-bcfe76ee680852c66781882d70ac02bd76e09ac9.zip
Added separate bitmaps for private and transien...
Added separate bitmaps for private and transient lazy vals. Closes #3038, #1573. Review by dragos. I had to fix a couple of initialization issues that checkinit forced me to do and that weren't a problem before because the bitmap was serialized even for @transitive. For that I needed to change the setters in checkinit so that they also update the bitmap.
Diffstat (limited to 'test/files/run/t3038d.scala')
-rw-r--r--test/files/run/t3038d.scala60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/files/run/t3038d.scala b/test/files/run/t3038d.scala
new file mode 100644
index 0000000000..a92e3532a8
--- /dev/null
+++ b/test/files/run/t3038d.scala
@@ -0,0 +1,60 @@
+trait Foo {
+ @transient protected var load = 1
+ @transient protected var a = 12
+
+ protected def init[B](in: java.io.ObjectInputStream) {
+ in.defaultReadObject
+ load = in.readInt
+ val sizea = in.readInt
+ a = 12
+ }
+
+ protected def serializeTo(out: java.io.ObjectOutputStream) {
+ out.defaultWriteObject
+ out.writeInt(load)
+ out.writeInt(a)
+ }
+}
+
+
+@serializable
+class Bar extends Foo {
+ @transient protected var first: Any = null
+ def size = a
+ @transient var second: Any = null
+
+ def checkMember { first }
+
+ private def writeObject(out: java.io.ObjectOutputStream) {
+ serializeTo(out)
+ }
+
+ private def readObject(in: java.io.ObjectInputStream) {
+ first = null
+ init(in)
+ }
+}
+
+object Test {
+ private def toObject[A](bytes: Array[Byte]): A = {
+ val in = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bytes))
+ in.readObject.asInstanceOf[A]
+ }
+
+ private def toBytes(o: AnyRef): Array[Byte] = {
+ val bos = new java.io.ByteArrayOutputStream
+ val out = new java.io.ObjectOutputStream(bos)
+ out.writeObject(o)
+ out.close
+ bos.toByteArray
+ }
+
+
+ def main(args: Array[String]) {
+ val a1 = new Bar()
+ val serialized:Array[Byte] = toBytes(a1)
+ val deserialized: Bar = toObject(serialized)
+ deserialized.size
+ deserialized.checkMember
+ }
+}