summaryrefslogtreecommitdiff
path: root/test/pending/pos/bug573.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-04-25 14:01:59 +0000
committerMartin Odersky <odersky@gmail.com>2006-04-25 14:01:59 +0000
commit88cd71a283f25b20414b1a22b9fded83692ffc14 (patch)
tree921d9a72ae56ac70d11ba1a58ee274cb8808a60d /test/pending/pos/bug573.scala
parent8e1da29a68f7d494a89a1922e3b30e39b245da63 (diff)
downloadscala-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.scala43
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);
+ }
+ }
+}