summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McDirmid <sean.mcdirmid@gmail.com>2007-09-13 13:53:11 +0000
committerSean McDirmid <sean.mcdirmid@gmail.com>2007-09-13 13:53:11 +0000
commitd2c1b74f0f4e51245af91b50c72b1ef1d7d2adae (patch)
tree14c2bb161575c658cc4b548087e4c3a38d218329
parent6900f59041b0077620a09f71f4378a1cf96b3066 (diff)
downloadscala-d2c1b74f0f4e51245af91b50c72b1ef1d7d2adae.tar.gz
scala-d2c1b74f0f4e51245af91b50c72b1ef1d7d2adae.tar.bz2
scala-d2c1b74f0f4e51245af91b50c72b1ef1d7d2adae.zip
Re-adding serialization code that was I think a...
Re-adding serialization code that was I think accidentally nuked in last merge.
-rw-r--r--src/library/scala/List.scala29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/library/scala/List.scala b/src/library/scala/List.scala
index 8cc9e4e419..6e06b8e93f 100644
--- a/src/library/scala/List.scala
+++ b/src/library/scala/List.scala
@@ -1219,8 +1219,31 @@ case object Nil extends List[Nothing] {
* @version 1.0, 15/07/2003
*/
@SerialVersionUID(0L - 8476791151983527571L)
-final case class ::[B](hd: B, private[scala] var tl: List[B]) extends List[B] {
- def head = hd
- def tail = tl
+final case class ::[B](private var hd: B, private[scala] var tl: List[B]) extends List[B] {
+ def head : B = hd
+ def tail : List[B] = tl
override def isEmpty: Boolean = false
+
+ import java.io._
+
+ private def writeObject(out : ObjectOutputStream) = {
+ val i = elements
+ while (i.hasNext) out.writeObject(i.next)
+ out.writeObject(ListSerializeEnd)
+ }
+ private def readObject(in : ObjectInputStream) : Unit = {
+ hd = in.readObject.asInstanceOf[B]
+ assert(hd != ListSerializeEnd)
+ var current : ::[B] = this
+ while (true) in.readObject match {
+ case ListSerializeEnd => current.tl = Nil; return
+ case a : Any =>
+ val list : ::[B] = new ::(a.asInstanceOf[B], Nil)
+ current.tl = list
+ current = list
+ }
+ }
}
+/** Only used for list serialization */
+@SerialVersionUID(0L - 8476791151975527571L)
+private[scala] case object ListSerializeEnd