diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-25 22:44:08 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-26 16:21:40 +0100 |
commit | 4da04eee1893ead433a624f6b146d56aca46cb7e (patch) | |
tree | 73e6e1bff827d2ae38ebfd2b0badc6012c928df3 /src/test/scala/scala/async/run/hygiene/Hygiene.scala | |
parent | b9bd441662f1235ecd2f80e13030bfcd4f3c4c39 (diff) | |
download | scala-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.scala | 47 |
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() + } } |