diff options
author | Martin Odersky <odersky@gmail.com> | 2006-04-25 14:01:59 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-04-25 14:01:59 +0000 |
commit | 88cd71a283f25b20414b1a22b9fded83692ffc14 (patch) | |
tree | 921d9a72ae56ac70d11ba1a58ee274cb8808a60d /test/pending/pos/bug573.scala | |
parent | 8e1da29a68f7d494a89a1922e3b30e39b245da63 (diff) | |
download | scala-88cd71a283f25b20414b1a22b9fded83692ffc14.tar.gz scala-88cd71a283f25b20414b1a22b9fded83692ffc14.tar.bz2 scala-88cd71a283f25b20414b1a22b9fded83692ffc14.zip |
Diffstat (limited to 'test/pending/pos/bug573.scala')
-rw-r--r-- | test/pending/pos/bug573.scala | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/pending/pos/bug573.scala b/test/pending/pos/bug573.scala new file mode 100644 index 0000000000..b1b4f75098 --- /dev/null +++ b/test/pending/pos/bug573.scala @@ -0,0 +1,43 @@ +package lampion.collections; + +object DirX { + abstract class Dir { + def reverse : Dir; + } + object BEFORE extends Dir { + def reverse = AFTER; + } + object AFTER extends Dir { + def reverse = BEFORE; + } +} + +import DirX._; + +abstract class Linked { + type Node <: Node0; + + abstract class Node0 { + var next : Node = _; + var prev : Node = _; + + def self : Node; + + def get(dir : Dir) = if (dir == BEFORE) prev; else next; + private def set(dir : Dir, node : Node) = + if (dir == BEFORE) prev = node; else next = node; + + def link(dir : Dir, node : Node) = { + assert(get(dir) == null); + assert(node.get(dir.reverse) == null); + set(dir, node); + node.set(dir.reverse, self); + } + + + def end(dir : Dir) : Node = { + if (get(dir) == null) this; + else get(dir).end(dir); + } + } +} |