summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-09-23 15:11:01 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-09-23 15:12:29 +0200
commitb0b5b09f90b84696695538a42e7b7ff36555c0f9 (patch)
tree54bf3c3c75a1911f7a570ab16831d71c3fbd4ef4 /test
parentf9dbade4dbc3a888f927983c164b83ef5d500af9 (diff)
downloadscala-b0b5b09f90b84696695538a42e7b7ff36555c0f9.tar.gz
scala-b0b5b09f90b84696695538a42e7b7ff36555c0f9.tar.bz2
scala-b0b5b09f90b84696695538a42e7b7ff36555c0f9.zip
Add $deserializeLambda$ when inlining an indyLambda into a class
Fixes https://github.com/scala/scala-dev/issues/39 When inlining an indyLambda closure instantiation into a class, and the closure type is serializable, make sure that the target class has the synthetic `$deserializeLambda$` method.
Diffstat (limited to 'test')
-rw-r--r--test/files/run/inlineAddDeserializeLambda.scala20
1 files changed, 20 insertions, 0 deletions
diff --git a/test/files/run/inlineAddDeserializeLambda.scala b/test/files/run/inlineAddDeserializeLambda.scala
new file mode 100644
index 0000000000..a6bafd0f49
--- /dev/null
+++ b/test/files/run/inlineAddDeserializeLambda.scala
@@ -0,0 +1,20 @@
+class C { @inline final def f: Int => Int = (x: Int) => x + 1 }
+
+object Test extends App {
+ import java.io._
+
+ def serialize(obj: AnyRef): Array[Byte] = {
+ val buffer = new ByteArrayOutputStream
+ val out = new ObjectOutputStream(buffer)
+ out.writeObject(obj)
+ buffer.toByteArray
+ }
+ def deserialize(a: Array[Byte]): AnyRef = {
+ val in = new ObjectInputStream(new ByteArrayInputStream(a))
+ in.readObject
+ }
+
+ def serializeDeserialize[T <: AnyRef](obj: T) = deserialize(serialize(obj)).asInstanceOf[T]
+
+ assert(serializeDeserialize((new C).f).isInstanceOf[Function1[_, _]])
+}