From 1d4fbeece9236ac84a7f77e36cf558567a4c3509 Mon Sep 17 00:00:00 2001 From: michelou Date: Fri, 2 May 2008 12:28:13 +0000 Subject: made manifests serializable --- test/files/jvm/manifests.check | 25 +++++++++++++++++ test/files/jvm/manifests.scala | 61 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 test/files/jvm/manifests.check create mode 100644 test/files/jvm/manifests.scala (limited to 'test') diff --git a/test/files/jvm/manifests.check b/test/files/jvm/manifests.check new file mode 100644 index 0000000000..a2419d2b0b --- /dev/null +++ b/test/files/jvm/manifests.check @@ -0,0 +1,25 @@ +x=(), m=java.lang.Void +x=true, m=boolean +x=a, m=char +x=1, m=int +x=abc, m=java.lang.String +x=List(()), m=scala.List[java.lang.Void] +x=List(true), m=scala.List[boolean] +x=List(1), m=scala.List[int] +x=List(abc), m=scala.List[java.lang.String] +x=[Z, m=[Z[boolean] +x=[C, m=[C[char] +x=[I, m=[I[int] +x=Array(abc), m=[Ljava.lang.String;[java.lang.String] +x=((),()), m=scala.Tuple2[java.lang.Void, java.lang.Void] +x=(true,false), m=scala.Tuple2[boolean, boolean] +x=(1,2), m=scala.Tuple2[int, int] +x=(abc,xyz), m=scala.Tuple2[java.lang.String, java.lang.String] +x=Serialize$, m=Serialize$ +x=Test$, m=Test$ +x=scala.List$, m=scala.List$ +x=Test$Foo, m=Test$Foo[int] +x=Test$Foo, m=Test$Foo[scala.List[int]] +x=Test$Foo, m=Test$Foo[Test$Foo[int]] +x=Test$Foo, m=Test$Foo[scala.List[Test$Foo[int]]] +x=Test$$anon$1, m=Test$$anon$1 diff --git a/test/files/jvm/manifests.scala b/test/files/jvm/manifests.scala new file mode 100644 index 0000000000..61c5152283 --- /dev/null +++ b/test/files/jvm/manifests.scala @@ -0,0 +1,61 @@ +object Test extends Application { + import scala.reflect._ + + def manifestOf[T](implicit m: Manifest[T]): Manifest[T] = m + + def print[T](x: T)(implicit m: Manifest[T]) { + val m1: Manifest[T] = Serialize.read(Serialize.write(m)) + val x1 = x.toString.replaceAll("@[0-9a-z]+$", "") + println("x="+x1+", m="+m1) + } + print(()) + print(true) + print('a') + print(1) + print("abc") + + print(List(())) + print(List(true)) + print(List(1)) + print(List("abc")) + + //print(Array(())) //Illegal class name "[V" in class file Test$ + print(Array(true)) + print(Array('a')) + print(Array(1)) + print(Array("abc")) + + print(((), ())) + print((true, false)) + print((1, 2)) + print(("abc", "xyz")) + + print(Serialize) + print(Test) + print(List) + + class Foo[T](x: T) + print(new Foo(2)) + print(new Foo(List(2))) + print(new Foo(new Foo(2))) + print(new Foo(List(new Foo(2)))) + + trait Bar[T] { def f: T } + print(new Bar[String] { def f = "abc" }) +} + +object Serialize { + import java.io._ + def write[A](o: A): Array[Byte] = { + val ba = new ByteArrayOutputStream(512) + val out = new ObjectOutputStream(ba) + out.writeObject(o) + out.close() + ba.toByteArray() + } + def read[A](buffer: Array[Byte]): A = { + val in = new ObjectInputStream(new ByteArrayInputStream(buffer)) + in.readObject().asInstanceOf[A] + } +} + -- cgit v1.2.3