diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2016-06-06 13:34:18 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2016-06-06 13:34:18 +1000 |
commit | 3bb735823f6815002895b1a335c6d105ddbe3e9e (patch) | |
tree | 5136e824612af0aa0a11675845713fd8a5101a70 /test/files/run/t9390b.scala | |
parent | 361f3f1540c755e36aaed22484924bb44eabc83b (diff) | |
parent | f07019ffa56ec2dfab8ab0d9a83133005761a877 (diff) | |
download | scala-3bb735823f6815002895b1a335c6d105ddbe3e9e.tar.gz scala-3bb735823f6815002895b1a335c6d105ddbe3e9e.tar.bz2 scala-3bb735823f6815002895b1a335c6d105ddbe3e9e.zip |
Merge pull request #5099 from retronym/ticket/9390
SI-9390 Emit local defs that don't capture this as static
Diffstat (limited to 'test/files/run/t9390b.scala')
-rw-r--r-- | test/files/run/t9390b.scala | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/files/run/t9390b.scala b/test/files/run/t9390b.scala new file mode 100644 index 0000000000..439e21e0a0 --- /dev/null +++ b/test/files/run/t9390b.scala @@ -0,0 +1,31 @@ +class C { // C is not serializable + def foo = (x: Int) => (y: Int) => x + y + def bar = (x: Int) => (y: Int) => {toString; x + y} +} + +object Test { + def main(args: Array[String]): Unit = { + val c = new C + val f = c.foo + assert(f(1)(2) == 3) + val f1 = serializeDeserialize(f) + assert(f1(1)(2) == 3) + + try { + serializeDeserialize(c.bar) + assert(false) + } catch { + case _: java.io.NotSerializableException => + // expected, lambda transitively refers to this + } + } + + def serializeDeserialize[T <: AnyRef](obj: T): T = { + import java.io._ + val buffer = new ByteArrayOutputStream + val out = new ObjectOutputStream(buffer) + out.writeObject(obj) + val in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray)) + in.readObject.asInstanceOf[T] + } +} |