From bcfe76ee680852c66781882d70ac02bd76e09ac9 Mon Sep 17 00:00:00 2001 From: Hubert Plociniczak Date: Tue, 2 Nov 2010 00:15:16 +0000 Subject: 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. --- test/files/run/t3038.check | 19 ++++++++++ test/files/run/t3038.scala | 68 +++++++++++++++++++++++++++++++++ test/files/run/t3038b.flags | 1 + test/files/run/t3038b.scala | 20 ++++++++++ test/files/run/t3038c.check | 2 + test/files/run/t3038c/A_1.scala | 83 +++++++++++++++++++++++++++++++++++++++++ test/files/run/t3038c/B_2.scala | 24 ++++++++++++ test/files/run/t3038d.flags | 1 + test/files/run/t3038d.scala | 60 +++++++++++++++++++++++++++++ test/files/run/t3895.scala | 6 +++ 10 files changed, 284 insertions(+) create mode 100644 test/files/run/t3038.check create mode 100644 test/files/run/t3038.scala create mode 100644 test/files/run/t3038b.flags create mode 100644 test/files/run/t3038b.scala create mode 100644 test/files/run/t3038c.check create mode 100644 test/files/run/t3038c/A_1.scala create mode 100644 test/files/run/t3038c/B_2.scala create mode 100644 test/files/run/t3038d.flags create mode 100644 test/files/run/t3038d.scala (limited to 'test/files/run') diff --git a/test/files/run/t3038.check b/test/files/run/t3038.check new file mode 100644 index 0000000000..9a325c4c18 --- /dev/null +++ b/test/files/run/t3038.check @@ -0,0 +1,19 @@ +a1 +a2 +a3 +a4 +a5 +a6 +a7 +a8 +a9 +c1 +c2 +c3 +c4 +c5 +c6 +c7 +c8 +c9 +c10 diff --git a/test/files/run/t3038.scala b/test/files/run/t3038.scala new file mode 100644 index 0000000000..cf26001beb --- /dev/null +++ b/test/files/run/t3038.scala @@ -0,0 +1,68 @@ +class A { + private lazy val a1 = "a1" + object B + private lazy val a2 = "a2" + + + @transient lazy val a3 = "a3" + @transient private lazy val a4 = "a4" + @transient lazy val a5 = "a5" + @transient private lazy val a6 = "a6" + + final val a7 = "a7" + private final val a8 = "a8" + @transient final val a9 = "a9" + + + + + def run = { + println(a1) + B + println(a2) + println(a3) + println(a4) + println(a5) + println(a6) + println(a7) + println(a8) + println(a9) + } +} + +class C extends A { + private lazy val c1 = "c1" + lazy val c2 = "c2" + + private lazy val c3 = "c3" + + @transient lazy val c4 = "c4" + @transient private lazy val c5 = "c5" + @transient lazy val c6 = "c6" + @transient private lazy val c7 = "c7" + lazy val c8 = "c8" + + final val c9 = "c9" + private final val c10 = "c10" + + + + override def run = { + super.run + println(c1) + println(c2) + println(c3) + println(c4) + println(c5) + println(c6) + println(c7) + println(c8) + println(c9) + println(c10) + } +} + +object Test extends Application { + (new C).run +} + diff --git a/test/files/run/t3038b.flags b/test/files/run/t3038b.flags new file mode 100644 index 0000000000..ae08446055 --- /dev/null +++ b/test/files/run/t3038b.flags @@ -0,0 +1 @@ +-Xcheckinit \ No newline at end of file diff --git a/test/files/run/t3038b.scala b/test/files/run/t3038b.scala new file mode 100644 index 0000000000..5237ee941e --- /dev/null +++ b/test/files/run/t3038b.scala @@ -0,0 +1,20 @@ +class A { + val a1 = 1 + val a2 = 2 + private val b1 = 3 + private val b2 = 4 + @transient val c1 = 5 + @transient val c2 = 6 + def run = { + a1 + a2 + b1 + b2 + c1 + c2 + } +} + +object Test extends Application { + new A().run +} \ No newline at end of file diff --git a/test/files/run/t3038c.check b/test/files/run/t3038c.check new file mode 100644 index 0000000000..a7e7ae9bda --- /dev/null +++ b/test/files/run/t3038c.check @@ -0,0 +1,2 @@ +List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70) +List(71, 72, 73, 74, 75, 76, 77, 78, 79, 80) diff --git a/test/files/run/t3038c/A_1.scala b/test/files/run/t3038c/A_1.scala new file mode 100644 index 0000000000..91564e3021 --- /dev/null +++ b/test/files/run/t3038c/A_1.scala @@ -0,0 +1,83 @@ +class A { + lazy val a0 = 1 + lazy val a1 = 2 + lazy val a2 = 3 + lazy val a3 = 4 + lazy val a4 = 5 + lazy val a5 = 6 + lazy val a6 = 7 + lazy val a7 = 8 + lazy val a8 = 9 + lazy val a9 = 10 + lazy val a10 = 11 + lazy val a11 = 12 + lazy val a12 = 13 + lazy val a13 = 14 + lazy val a14 = 15 + lazy val a15 = 16 + lazy val a16 = 17 + lazy val a17 = 18 + lazy val a18 = 19 + lazy val a19 = 20 + lazy val a20 = 21 + lazy val a21 = 22 + lazy val a22 = 23 + lazy val a23 = 24 + lazy val a24 = 25 + lazy val a25 = 26 + lazy val a26 = 27 + lazy val a27 = 28 + lazy val a28 = 29 + lazy val a29 = 30 + lazy val a30 = 31 + lazy val a31 = 32 + lazy val a32 = 33 + lazy val a33 = 34 + lazy val a34 = 35 + lazy val a35 = 36 + lazy val a36 = 37 + lazy val a37 = 38 + lazy val a38 = 39 + lazy val a39 = 40 + lazy val a40 = 41 + lazy val a41 = 42 + lazy val a42 = 43 + lazy val a43 = 44 + lazy val a44 = 45 + lazy val a45 = 46 + lazy val a46 = 47 + lazy val a47 = 48 + lazy val a48 = 49 + lazy val a49 = 50 + lazy val a50 = 51 + lazy val a51 = 52 + lazy val a52 = 53 + lazy val a53 = 54 + lazy val a54 = 55 + lazy val a55 = 56 + lazy val a56 = 57 + lazy val a57 = 58 + lazy val a58 = 59 + lazy val a59 = 60 + private lazy val a60 = 61 + private lazy val a61 = 62 + private lazy val a62 = 63 + private lazy val a63 = 64 + private lazy val a64 = 65 + private lazy val a65 = 66 + private lazy val a66 = 67 + private lazy val a67 = 68 + private lazy val a68 = 69 + private lazy val a69 = 70 + + def run = { + println(List(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, + a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, + a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, + a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, + a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, + a60, a61, a62, a63, a64, a65, a66, a67, a68, a69)) + } + +} diff --git a/test/files/run/t3038c/B_2.scala b/test/files/run/t3038c/B_2.scala new file mode 100644 index 0000000000..81f3f8d481 --- /dev/null +++ b/test/files/run/t3038c/B_2.scala @@ -0,0 +1,24 @@ + +class B extends A { + lazy val b0 = 71 + lazy val b1 = 72 + lazy val b2 = 73 + lazy val b3 = 74 + lazy val b4 = 75 + lazy val b5 = 76 + lazy val b6 = 77 + lazy val b7 = 78 + lazy val b8 = 79 + lazy val b9 = 80 + override def run = { + super.run + println(List(b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)) + } + +} + +object Test { + def main(args: Array[String]) { + new B().run + } +} diff --git a/test/files/run/t3038d.flags b/test/files/run/t3038d.flags new file mode 100644 index 0000000000..ae08446055 --- /dev/null +++ b/test/files/run/t3038d.flags @@ -0,0 +1 @@ +-Xcheckinit \ No newline at end of file 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 + } +} diff --git a/test/files/run/t3895.scala b/test/files/run/t3895.scala index dfc4a34a32..9028e0a08a 100644 --- a/test/files/run/t3895.scala +++ b/test/files/run/t3895.scala @@ -20,6 +20,12 @@ class B extends A{ val b = 12 } +trait T { + private final val a = false +} + +class Impl extends T + object Test { def main(args: Array[String]) { -- cgit v1.2.3