diff options
author | Martin Odersky <odersky@gmail.com> | 2006-04-03 09:18:19 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-04-03 09:18:19 +0000 |
commit | d1007862edf2f20a46a5395354991c63ede4abfa (patch) | |
tree | f5f2453236cc476f1bb65111ad97e9c52ac679cd /test | |
parent | 2b8d5f6485faec89410678834d25cce9656a7232 (diff) | |
download | scala-d1007862edf2f20a46a5395354991c63ede4abfa.tar.gz scala-d1007862edf2f20a46a5395354991c63ede4abfa.tar.bz2 scala-d1007862edf2f20a46a5395354991c63ede4abfa.zip |
Fixed abstract override problem detected by Moez
Diffstat (limited to 'test')
-rw-r--r-- | test/files/run/absoverride.check | 15 | ||||
-rwxr-xr-x | test/files/run/absoverride.scala | 37 |
2 files changed, 52 insertions, 0 deletions
diff --git a/test/files/run/absoverride.check b/test/files/run/absoverride.check new file mode 100644 index 0000000000..0f4a2b9d5f --- /dev/null +++ b/test/files/run/absoverride.check @@ -0,0 +1,15 @@ +<sync> +next: j +</sync> +log: j +j +<sync> +next: v +</sync> +log: v +v +<sync> +next: m +</sync> +log: m +m diff --git a/test/files/run/absoverride.scala b/test/files/run/absoverride.scala new file mode 100755 index 0000000000..cf14ff475b --- /dev/null +++ b/test/files/run/absoverride.scala @@ -0,0 +1,37 @@ +abstract class AbsIterator { + type T + def hasNext: boolean + def next: T +} +trait RichIterator extends AbsIterator { + def foreach(f: T => unit): unit = + while (hasNext) f(next) +} +class StringIterator(s: String) extends AbsIterator { + type T = char + private var i = 0 + def hasNext = i < s.length() + def next = { val x = s.charAt(i); i = i + 1; Console.println("next: " + x); x } +} +trait SyncIterator extends AbsIterator { + abstract override def hasNext: boolean = + synchronized(super.hasNext) + abstract override def next: T = + synchronized { + Console.println("<sync>"); val x = super.next; Console.println("</sync>"); x + } +} +trait LoggedIterator extends AbsIterator { + abstract override def next: T = { + val x = super.next; Console.println("log: " + x); x + } +} +class Iter2(s: String) extends StringIterator(s) + with SyncIterator with LoggedIterator; +object Test { + def main(args: Array[String]): unit = { + class Iter extends StringIterator(args(0)) with RichIterator with SyncIterator with LoggedIterator + val iter = new Iter + iter foreach Console.println + } +} |