summaryrefslogtreecommitdiff
path: root/test/files/run/exprs_serialize.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2014-07-09 14:43:12 +0200
committerPhilipp Haller <hallerp@gmail.com>2014-07-15 14:03:49 +0200
commit5762110d0dc2cb492e34d5595c473aa0f9ca786a (patch)
tree974c218830fcab44f386c11be28a82b0ec3acc71 /test/files/run/exprs_serialize.scala
parent87bba9418ca891c436f386207b3b9e70b4a64c71 (diff)
downloadscala-5762110d0dc2cb492e34d5595c473aa0f9ca786a.tar.gz
scala-5762110d0dc2cb492e34d5595c473aa0f9ca786a.tar.bz2
scala-5762110d0dc2cb492e34d5595c473aa0f9ca786a.zip
SI-5919 TypeTags and Exprs should be serializable
- Make TypeCreator and TreeCreator extend Serializable. - When replacing a SerializedTypeTag with a TypeTag or WeakTypeTag, do not use scala.reflect.runtime.universe.rootMirror, since it is unlikely to find user classes; instead, create a runtime mirror using the context ClassLoader of the current thread. Use the same logic for SerializedExpr. - Remove writeObject/readObject methods from SerializedTypeTag and SerializedExpr since they are unused. - Add @throws annotation on writeReplace and readResolve methods. - Handle SecurityException if the current thread cannot access the context ClassLoader. - To make type tags of primitive value classes serializable, make PredefTypeCreator a top-level class. Otherwise, it would retain a reference to the enclosing Universe, rendering the TypeCreator non-serializable. Binary compatibility: - Keep nested PredefTypeCreator class to avoid backward binary incompatible change. - Keep `var` modifiers on the class parameters of SerializedTypeTag for backward binary compatibility. - Adds filter rules to forward binary compatibility whitelist: - `TypeCreator`, `PredefTypeCreator`, and `TreeCreator` must now extend from `Serializable`. - Must have new class `scala.reflect.api.PredefTypeCreator` to avoid problematic outer reference.
Diffstat (limited to 'test/files/run/exprs_serialize.scala')
-rw-r--r--test/files/run/exprs_serialize.scala12
1 files changed, 11 insertions, 1 deletions
diff --git a/test/files/run/exprs_serialize.scala b/test/files/run/exprs_serialize.scala
index c4310b0fe1..91027803b4 100644
--- a/test/files/run/exprs_serialize.scala
+++ b/test/files/run/exprs_serialize.scala
@@ -26,4 +26,14 @@ object Test extends App {
test(reify(2))
test(reify{def foo = "hello"; foo + "world!"})
-} \ No newline at end of file
+ test(reify {
+ def foo(x: Int) = {
+ class Local {
+ val f = 2
+ }
+ val obj = new Local
+ x % obj.f == 0
+ }
+ foo(5)
+ })
+}