From d1007862edf2f20a46a5395354991c63ede4abfa Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Mon, 3 Apr 2006 09:18:19 +0000 Subject: Fixed abstract override problem detected by Moez --- test/files/run/absoverride.scala | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 test/files/run/absoverride.scala (limited to 'test/files/run/absoverride.scala') 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(""); val x = super.next; Console.println(""); 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 + } +} -- cgit v1.2.3