From 88cd71a283f25b20414b1a22b9fded83692ffc14 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 25 Apr 2006 14:01:59 +0000 Subject: --- test/pending/pos/bug572.scala | 33 ++++++++++++++++++++++++++++++++ test/pending/pos/bug573.scala | 43 ++++++++++++++++++++++++++++++++++++++++++ test/pending/pos/foo.scala | 3 +++ test/pending/pos/gosh.scala | 44 +++++++++++++++++++++++++++++++++++++++++++ test/pending/pos/moors.scala | 12 ++++++++++++ 5 files changed, 135 insertions(+) create mode 100644 test/pending/pos/bug572.scala create mode 100644 test/pending/pos/bug573.scala create mode 100755 test/pending/pos/foo.scala create mode 100755 test/pending/pos/gosh.scala create mode 100644 test/pending/pos/moors.scala (limited to 'test/pending/pos') diff --git a/test/pending/pos/bug572.scala b/test/pending/pos/bug572.scala new file mode 100644 index 0000000000..3a69cde4a6 --- /dev/null +++ b/test/pending/pos/bug572.scala @@ -0,0 +1,33 @@ +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 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(), node); + } + } +} 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); + } + } +} diff --git a/test/pending/pos/foo.scala b/test/pending/pos/foo.scala new file mode 100755 index 0000000000..8b45addbd5 --- /dev/null +++ b/test/pending/pos/foo.scala @@ -0,0 +1,3 @@ +object foo { + var x: String +} diff --git a/test/pending/pos/gosh.scala b/test/pending/pos/gosh.scala new file mode 100755 index 0000000000..c4cd3df80b --- /dev/null +++ b/test/pending/pos/gosh.scala @@ -0,0 +1,44 @@ +object ShapeTest extends Application { + + class Point(x : int, y : int) { + override def toString() = "[" + x + "," + y + "]" + } + + abstract class Shape { + def draw() : unit + } + + class Line(s : Point, e : Point) extends Shape { + def draw() : unit = { Console.println("draw line " + s + "," + e) } + } + + abstract class Foo { + type T <: Object + + def show(o : T) : unit + def print() : unit = {Console.println("in Foo")} + } + + abstract class ShapeFoo extends Foo { + type T <: Shape + def show(o : T) : unit = { o.draw() } + override def print() : unit = {Console.println("in ShapeFoo")} + } + + class LineFoo extends ShapeFoo { + type T = Line + override def print() : unit = {Console.println("in LineFoo")} + } + + val p1 = new Point(1,4) + val p2 = new Point(12, 28) + + val l1 = new Line(p1, p2) + + + val l = new ShapeFoo{ // ** // + type T = Line // ** // + override def print() : unit = {Console.println("in LineFoo")} // ** // + } + l.show(l1) // ** // +} diff --git a/test/pending/pos/moors.scala b/test/pending/pos/moors.scala new file mode 100644 index 0000000000..4f7346f57f --- /dev/null +++ b/test/pending/pos/moors.scala @@ -0,0 +1,12 @@ +object Test { + + implicit def foo2bar(foo :Foo) :Bar = foo.bar + + class Foo(val bar :Bar) { + def testCoercion ={ val a: this.type = this; a.baz /* here, foo2bar is inferred by the compiler, as expected */} + def testCoercionThis = baz // --> error: not found: value baz + def testCoercionThis = (this: Foo).baz // --> error: value baz is not a member of Foo + } + + class Bar { def baz = System.out.println("baz")} +} -- cgit v1.2.3