summaryrefslogtreecommitdiff
path: root/test/files/run/typetags_serialize.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-07-31 14:14:01 +0200
committerEugene Burmako <xeno.by@gmail.com>2012-08-02 15:51:30 +0200
commita354ec2a77f83f57680c576758ddfa9234083b9e (patch)
treec0090d6f6ab663b8c3845838f3a9e96f25168f29 /test/files/run/typetags_serialize.scala
parenta19f0e83bf18a435bac9c984781f66ac3d94822c (diff)
downloadscala-a354ec2a77f83f57680c576758ddfa9234083b9e.tar.gz
scala-a354ec2a77f83f57680c576758ddfa9234083b9e.tar.bz2
scala-a354ec2a77f83f57680c576758ddfa9234083b9e.zip
first stab at serialization of exprs and tags
Instead of trying to serialize the entire universe and failing miserably (which happens now), exprs and type tags will now serialize their creators and deserialize into scala.reflect.basis. Since creators produced by reification are not serializable right now, serialization will crash. That's a small improvement over state of the art functionality-wise, but it's a step forward robustness-wise. Next step in this direction is generation of serialization code for creators. Related issues: SI-5919 and SI-5908. Also see the discussion at scala-internals http://groups.google.com/group/scala-internals/browse_thread/thread/ef63f8b5bd194c7c
Diffstat (limited to 'test/files/run/typetags_serialize.scala')
-rw-r--r--test/files/run/typetags_serialize.scala28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/files/run/typetags_serialize.scala b/test/files/run/typetags_serialize.scala
new file mode 100644
index 0000000000..3917b69a93
--- /dev/null
+++ b/test/files/run/typetags_serialize.scala
@@ -0,0 +1,28 @@
+import java.io._
+import scala.reflect.runtime.universe._
+import scala.reflect.runtime.{currentMirror => cm}
+
+object Test extends App {
+ def test(tag: TypeTag[_]) =
+ try {
+ val fout = new ByteArrayOutputStream()
+ val out = new ObjectOutputStream(fout)
+ out.writeObject(tag)
+ out.close()
+ fout.close()
+
+ val fin = new ByteArrayInputStream(fout.toByteArray)
+ val in = new ObjectInputStream(fin)
+ val retag = in.readObject().asInstanceOf[scala.reflect.basis.TypeTag[_]].in(cm)
+ in.close()
+ fin.close()
+
+ println(retag)
+ } catch {
+ case ex: Exception =>
+ println(ex)
+ }
+
+ test(implicitly[TypeTag[Int]])
+ test(implicitly[TypeTag[String]])
+} \ No newline at end of file