aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/scala/async/run/hygiene/Hygiene.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-25 22:44:08 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-26 16:21:40 +0100
commit4da04eee1893ead433a624f6b146d56aca46cb7e (patch)
tree73e6e1bff827d2ae38ebfd2b0badc6012c928df3 /src/test/scala/scala/async/run/hygiene/Hygiene.scala
parentb9bd441662f1235ecd2f80e13030bfcd4f3c4c39 (diff)
downloadscala-async-4da04eee1893ead433a624f6b146d56aca46cb7e.tar.gz
scala-async-4da04eee1893ead433a624f6b146d56aca46cb7e.tar.bz2
scala-async-4da04eee1893ead433a624f6b146d56aca46cb7e.zip
Preserve outer This() refs through resetAttrs.
Adapt the compiler's standard ResetAttrs to keep This() nodes don't refer to a symbol defined in the current async block.
Diffstat (limited to 'src/test/scala/scala/async/run/hygiene/Hygiene.scala')
-rw-r--r--src/test/scala/scala/async/run/hygiene/Hygiene.scala47
1 files changed, 35 insertions, 12 deletions
diff --git a/src/test/scala/scala/async/run/hygiene/Hygiene.scala b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
index 2aaf515..bb28d5b 100644
--- a/src/test/scala/scala/async/run/hygiene/Hygiene.scala
+++ b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
@@ -88,16 +88,39 @@ class HygieneSpec {
ext mustBe (14)
}
-// @Test def `this reference is maintained`() {
-// object Test {
-// def blerg = 1
-// def check() {
-// AsyncId.async {
-// assert(this.blerg == 1)
-// assert(this == Test, this.getClass)
-// }
-// }
-// }
-// Test.check()
-// }
+ trait T1 {
+ def blerg = 0
+ }
+
+ object O1 extends T1 {
+ override def blerg = 1
+
+ def check() {
+ val blerg = 3
+ AsyncId.async {
+ assert(this == O1, this.getClass)
+ assert(this.blerg == 1)
+ assert(super.blerg == 0)
+ assert(super[T1].blerg == 0)
+ }
+ }
+ }
+
+ @Test def `this reference is maintained`() {
+ O1.check()
+ }
+
+ @Test def `this reference is maintained to local class`() {
+ object O2 {
+ def blerg = 2
+
+ def check() {
+ AsyncId.async {
+ assert(this.blerg == 2)
+ assert(this == O2, this.getClass)
+ }
+ }
+ }
+ O2.check()
+ }
}