summaryrefslogtreecommitdiff
path: root/test/files/run/absoverride.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-04-03 09:18:19 +0000
committerMartin Odersky <odersky@gmail.com>2006-04-03 09:18:19 +0000
commitd1007862edf2f20a46a5395354991c63ede4abfa (patch)
treef5f2453236cc476f1bb65111ad97e9c52ac679cd /test/files/run/absoverride.scala
parent2b8d5f6485faec89410678834d25cce9656a7232 (diff)
downloadscala-d1007862edf2f20a46a5395354991c63ede4abfa.tar.gz
scala-d1007862edf2f20a46a5395354991c63ede4abfa.tar.bz2
scala-d1007862edf2f20a46a5395354991c63ede4abfa.zip
Fixed abstract override problem detected by Moez
Diffstat (limited to 'test/files/run/absoverride.scala')
-rwxr-xr-xtest/files/run/absoverride.scala37
1 files changed, 37 insertions, 0 deletions
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
+ }
+}