From 25a98964b5109aa55b71a8a26886c59903193548 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 6 Oct 2005 13:14:33 +0000 Subject: *** empty log message *** --- test-nsc/files/pos/304.scala | 5 + test-nsc/files/pos/A.scala | 8 ++ test-nsc/files/pos/List1.scala | 45 ++++++++ test-nsc/files/pos/MailBox.scala | 83 +++++++++++++++ test-nsc/files/pos/S1.scala | 13 +++ test-nsc/files/pos/S3.scala | 14 +++ test-nsc/files/pos/S5.scala | 30 ++++++ test-nsc/files/pos/S8.scala | 19 ++++ test-nsc/files/pos/X.scala | 14 +++ test-nsc/files/pos/Z.scala | 10 ++ test-nsc/files/pos/abstract.scala | 9 ++ test-nsc/files/pos/aliases.scala | 25 +++++ test-nsc/files/pos/all.lst | 143 +++++++++++++++++++++++++ test-nsc/files/pos/arrays2.scala | 11 ++ test-nsc/files/pos/attributes.scala | 74 +++++++++++++ test-nsc/files/pos/bug082.scala | 18 ++++ test-nsc/files/pos/bug1.scala | 8 ++ test-nsc/files/pos/bug115.scala | 9 ++ test-nsc/files/pos/bug116.scala | 8 ++ test-nsc/files/pos/bug119.scala | 7 ++ test-nsc/files/pos/bug121.scala | 3 + test-nsc/files/pos/bug123.scala | 3 + test-nsc/files/pos/bug124.scala | 5 + test-nsc/files/pos/bug151.scala | 6 ++ test-nsc/files/pos/bug159.scala | 22 ++++ test-nsc/files/pos/bug160.scala | 5 + test-nsc/files/pos/bug17.scala | 21 ++++ test-nsc/files/pos/bug175.scala | 5 + test-nsc/files/pos/bug177.scala | 10 ++ test-nsc/files/pos/bug183.scala | 6 ++ test-nsc/files/pos/bug193.scala | 74 +++++++++++++ test-nsc/files/pos/bug2.scala | 6 ++ test-nsc/files/pos/bug20.scala | 8 ++ test-nsc/files/pos/bug201.scala | 7 ++ test-nsc/files/pos/bug204.scala | 7 ++ test-nsc/files/pos/bug210.scala | 17 +++ test-nsc/files/pos/bug211.scala | 8 ++ test-nsc/files/pos/bug229.scala | 3 + test-nsc/files/pos/bug245.scala | 18 ++++ test-nsc/files/pos/bug267.scala | 55 ++++++++++ test-nsc/files/pos/bug287.scala | 12 +++ test-nsc/files/pos/bug289.scala | 7 ++ test-nsc/files/pos/bug29.scala | 3 + test-nsc/files/pos/bug295.scala | 2 + test-nsc/files/pos/bug30.scala | 9 ++ test-nsc/files/pos/bug304.scala | 5 + test-nsc/files/pos/bug31.scala | 29 ++++++ test-nsc/files/pos/bug318.scala | 11 ++ test-nsc/files/pos/bug32.scala | 17 +++ test-nsc/files/pos/bug342.scala | 9 ++ test-nsc/files/pos/bug348plus.scala | 24 +++++ test-nsc/files/pos/bug359.scala | 30 ++++++ test-nsc/files/pos/bug36.scala | 8 ++ test-nsc/files/pos/bug360.scala | 11 ++ test-nsc/files/pos/bug361.scala | 18 ++++ test-nsc/files/pos/bug372.scala | 4 + test-nsc/files/pos/bug39.scala | 6 ++ test-nsc/files/pos/bug49.scala | 3 + test-nsc/files/pos/bug53.scala | 7 ++ test-nsc/files/pos/bug54.scala | 4 + test-nsc/files/pos/bug61.scala | 10 ++ test-nsc/files/pos/bug64.scala | 6 ++ test-nsc/files/pos/bug66.scala | 7 ++ test-nsc/files/pos/bug68.scala | 6 ++ test-nsc/files/pos/bug69.scala | 11 ++ test-nsc/files/pos/bug76.scala | 9 ++ test-nsc/files/pos/bug81.scala | 4 + test-nsc/files/pos/bug85.scala | 8 ++ test-nsc/files/pos/bug91.scala | 6 ++ test-nsc/files/pos/bug93.scala | 4 + test-nsc/files/pos/cls.scala | 17 +++ test-nsc/files/pos/cls1.scala | 9 ++ test-nsc/files/pos/clsrefine.scala | 40 +++++++ test-nsc/files/pos/compile.scala | 150 +++++++++++++++++++++++++++ test-nsc/files/pos/compile1.scala | 35 +++++++ test-nsc/files/pos/compound.scala | 9 ++ test-nsc/files/pos/constfold.scala | 14 +++ test-nsc/files/pos/context.scala | 34 ++++++ test-nsc/files/pos/eta.scala | 5 + test-nsc/files/pos/exceptions.scala | 20 ++++ test-nsc/files/pos/expressions-current.scala | 63 +++++++++++ test-nsc/files/pos/failed.lst | 3 + test-nsc/files/pos/gui.scala | 99 ++++++++++++++++++ test-nsc/files/pos/imports.scala | 16 +++ test-nsc/files/pos/infer.scala | 11 ++ test-nsc/files/pos/infer2.scala | 10 ++ test-nsc/files/pos/lambda.scala | 8 ++ test-nsc/files/pos/lambdalift.scala | 15 +++ test-nsc/files/pos/lambdalift1.scala | 17 +++ test-nsc/files/pos/localmodules.scala | 22 ++++ test-nsc/files/pos/matthias1.scala | 15 +++ test-nsc/files/pos/matthias3.scala | 13 +++ test-nsc/files/pos/matthias4.scala | 84 +++++++++++++++ test-nsc/files/pos/matthias5.scala | 12 +++ test-nsc/files/pos/maxim1.scala | 5 + test-nsc/files/pos/michel1.scala | 9 ++ test-nsc/files/pos/michel2.scala | 16 +++ test-nsc/files/pos/michel3.scala | 3 + test-nsc/files/pos/michel4.scala | 7 ++ test-nsc/files/pos/michel5.scala | 5 + test-nsc/files/pos/michel6.scala | 6 ++ test-nsc/files/pos/mixins.scala | 22 ++++ test-nsc/files/pos/modules.scala | 14 +++ test-nsc/files/pos/modules1.scala | 14 +++ test-nsc/files/pos/moduletrans.scala | 8 ++ test-nsc/files/pos/nested.scala | 29 ++++++ test-nsc/files/pos/null.scala | 3 + test-nsc/files/pos/ok.lst | 138 ++++++++++++++++++++++++ test-nsc/files/pos/orderedpoints.scala | 30 ++++++ test-nsc/files/pos/override.scala | 14 +++ test-nsc/files/pos/partialfun.scala | 10 ++ test-nsc/files/pos/patterns.scala | 27 +++++ test-nsc/files/pos/patterns1.scala | 13 +++ test-nsc/files/pos/patterns2.scala | 16 +++ test-nsc/files/pos/patterns3.scala | 5 + test-nsc/files/pos/philippe1.scala | 8 ++ test-nsc/files/pos/philippe2.scala | 7 ++ test-nsc/files/pos/philippe3.scala | 40 +++++++ test-nsc/files/pos/philippe4.scala | 3 + test-nsc/files/pos/pmbug.scala | 8 ++ test-nsc/files/pos/propagate.scala | 17 +++ test-nsc/files/pos/rebind.scala | 13 +++ test-nsc/files/pos/refine.scala | 6 ++ test-nsc/files/pos/reftest.scala | 4 + test-nsc/files/pos/scall.bat | 50 +++++++++ test-nsc/files/pos/scoping1.scala | 12 +++ test-nsc/files/pos/scoping2.scala | 14 +++ test-nsc/files/pos/scoping3.scala | 20 ++++ test-nsc/files/pos/seqtest2.scala | 13 +++ test-nsc/files/pos/simplelists.scala | 17 +++ test-nsc/files/pos/stable.scala | 11 ++ test-nsc/files/pos/strings.scala | 6 ++ test-nsc/files/pos/test1.scala | 5 + test-nsc/files/pos/test2.scala | 5 + test-nsc/files/pos/test4.scala | 47 +++++++++ test-nsc/files/pos/test4a.scala | 16 +++ test-nsc/files/pos/test4refine.scala | 49 +++++++++ test-nsc/files/pos/test5.scala | 68 ++++++++++++ test-nsc/files/pos/test5refine.scala | 75 ++++++++++++++ test-nsc/files/pos/testcast.scala | 26 +++++ test-nsc/files/pos/thistype.scala | 14 +++ test-nsc/files/pos/thistypes.scala | 8 ++ test-nsc/files/pos/traits.scala | 42 ++++++++ test-nsc/files/pos/valdefs.scala | 16 +++ test-nsc/files/pos/viewtest1.scala | 41 ++++++++ test-nsc/files/pos/viewtest2.scala | 117 +++++++++++++++++++++ test-nsc/files/pos/viewtest3.scala | 59 +++++++++++ test-nsc/files/run/arrays.scala | 2 +- test-nsc/files/run/bugs.scala | 25 +---- test-nsc/files/run/mixins.scala | 13 +-- test-nsc/files/run/runtime.scala | 10 -- 151 files changed, 3088 insertions(+), 46 deletions(-) create mode 100755 test-nsc/files/pos/304.scala create mode 100755 test-nsc/files/pos/A.scala create mode 100755 test-nsc/files/pos/List1.scala create mode 100755 test-nsc/files/pos/MailBox.scala create mode 100755 test-nsc/files/pos/S1.scala create mode 100755 test-nsc/files/pos/S3.scala create mode 100755 test-nsc/files/pos/S5.scala create mode 100755 test-nsc/files/pos/S8.scala create mode 100755 test-nsc/files/pos/X.scala create mode 100755 test-nsc/files/pos/Z.scala create mode 100755 test-nsc/files/pos/abstract.scala create mode 100755 test-nsc/files/pos/aliases.scala create mode 100755 test-nsc/files/pos/all.lst create mode 100755 test-nsc/files/pos/arrays2.scala create mode 100755 test-nsc/files/pos/attributes.scala create mode 100755 test-nsc/files/pos/bug082.scala create mode 100755 test-nsc/files/pos/bug1.scala create mode 100755 test-nsc/files/pos/bug115.scala create mode 100755 test-nsc/files/pos/bug116.scala create mode 100755 test-nsc/files/pos/bug119.scala create mode 100755 test-nsc/files/pos/bug121.scala create mode 100755 test-nsc/files/pos/bug123.scala create mode 100755 test-nsc/files/pos/bug124.scala create mode 100755 test-nsc/files/pos/bug151.scala create mode 100755 test-nsc/files/pos/bug159.scala create mode 100755 test-nsc/files/pos/bug160.scala create mode 100755 test-nsc/files/pos/bug17.scala create mode 100755 test-nsc/files/pos/bug175.scala create mode 100755 test-nsc/files/pos/bug177.scala create mode 100755 test-nsc/files/pos/bug183.scala create mode 100755 test-nsc/files/pos/bug193.scala create mode 100755 test-nsc/files/pos/bug2.scala create mode 100755 test-nsc/files/pos/bug20.scala create mode 100755 test-nsc/files/pos/bug201.scala create mode 100755 test-nsc/files/pos/bug204.scala create mode 100755 test-nsc/files/pos/bug210.scala create mode 100755 test-nsc/files/pos/bug211.scala create mode 100755 test-nsc/files/pos/bug229.scala create mode 100755 test-nsc/files/pos/bug245.scala create mode 100755 test-nsc/files/pos/bug267.scala create mode 100755 test-nsc/files/pos/bug287.scala create mode 100644 test-nsc/files/pos/bug289.scala create mode 100755 test-nsc/files/pos/bug29.scala create mode 100755 test-nsc/files/pos/bug295.scala create mode 100755 test-nsc/files/pos/bug30.scala create mode 100755 test-nsc/files/pos/bug304.scala create mode 100755 test-nsc/files/pos/bug31.scala create mode 100755 test-nsc/files/pos/bug318.scala create mode 100755 test-nsc/files/pos/bug32.scala create mode 100755 test-nsc/files/pos/bug342.scala create mode 100755 test-nsc/files/pos/bug348plus.scala create mode 100755 test-nsc/files/pos/bug359.scala create mode 100755 test-nsc/files/pos/bug36.scala create mode 100644 test-nsc/files/pos/bug360.scala create mode 100644 test-nsc/files/pos/bug361.scala create mode 100755 test-nsc/files/pos/bug372.scala create mode 100755 test-nsc/files/pos/bug39.scala create mode 100755 test-nsc/files/pos/bug49.scala create mode 100755 test-nsc/files/pos/bug53.scala create mode 100755 test-nsc/files/pos/bug54.scala create mode 100755 test-nsc/files/pos/bug61.scala create mode 100755 test-nsc/files/pos/bug64.scala create mode 100755 test-nsc/files/pos/bug66.scala create mode 100755 test-nsc/files/pos/bug68.scala create mode 100755 test-nsc/files/pos/bug69.scala create mode 100755 test-nsc/files/pos/bug76.scala create mode 100755 test-nsc/files/pos/bug81.scala create mode 100644 test-nsc/files/pos/bug85.scala create mode 100755 test-nsc/files/pos/bug91.scala create mode 100755 test-nsc/files/pos/bug93.scala create mode 100755 test-nsc/files/pos/cls.scala create mode 100755 test-nsc/files/pos/cls1.scala create mode 100755 test-nsc/files/pos/clsrefine.scala create mode 100644 test-nsc/files/pos/compile.scala create mode 100644 test-nsc/files/pos/compile1.scala create mode 100755 test-nsc/files/pos/compound.scala create mode 100755 test-nsc/files/pos/constfold.scala create mode 100755 test-nsc/files/pos/context.scala create mode 100755 test-nsc/files/pos/eta.scala create mode 100755 test-nsc/files/pos/exceptions.scala create mode 100755 test-nsc/files/pos/expressions-current.scala create mode 100755 test-nsc/files/pos/failed.lst create mode 100755 test-nsc/files/pos/gui.scala create mode 100755 test-nsc/files/pos/imports.scala create mode 100755 test-nsc/files/pos/infer.scala create mode 100755 test-nsc/files/pos/infer2.scala create mode 100755 test-nsc/files/pos/lambda.scala create mode 100755 test-nsc/files/pos/lambdalift.scala create mode 100755 test-nsc/files/pos/lambdalift1.scala create mode 100755 test-nsc/files/pos/localmodules.scala create mode 100755 test-nsc/files/pos/matthias1.scala create mode 100755 test-nsc/files/pos/matthias3.scala create mode 100755 test-nsc/files/pos/matthias4.scala create mode 100755 test-nsc/files/pos/matthias5.scala create mode 100755 test-nsc/files/pos/maxim1.scala create mode 100755 test-nsc/files/pos/michel1.scala create mode 100755 test-nsc/files/pos/michel2.scala create mode 100755 test-nsc/files/pos/michel3.scala create mode 100755 test-nsc/files/pos/michel4.scala create mode 100755 test-nsc/files/pos/michel5.scala create mode 100755 test-nsc/files/pos/michel6.scala create mode 100755 test-nsc/files/pos/mixins.scala create mode 100755 test-nsc/files/pos/modules.scala create mode 100755 test-nsc/files/pos/modules1.scala create mode 100755 test-nsc/files/pos/moduletrans.scala create mode 100755 test-nsc/files/pos/nested.scala create mode 100755 test-nsc/files/pos/null.scala create mode 100755 test-nsc/files/pos/ok.lst create mode 100755 test-nsc/files/pos/orderedpoints.scala create mode 100755 test-nsc/files/pos/override.scala create mode 100755 test-nsc/files/pos/partialfun.scala create mode 100755 test-nsc/files/pos/patterns.scala create mode 100755 test-nsc/files/pos/patterns1.scala create mode 100755 test-nsc/files/pos/patterns2.scala create mode 100755 test-nsc/files/pos/patterns3.scala create mode 100755 test-nsc/files/pos/philippe1.scala create mode 100755 test-nsc/files/pos/philippe2.scala create mode 100755 test-nsc/files/pos/philippe3.scala create mode 100755 test-nsc/files/pos/philippe4.scala create mode 100755 test-nsc/files/pos/pmbug.scala create mode 100755 test-nsc/files/pos/propagate.scala create mode 100755 test-nsc/files/pos/rebind.scala create mode 100755 test-nsc/files/pos/refine.scala create mode 100755 test-nsc/files/pos/reftest.scala create mode 100755 test-nsc/files/pos/scall.bat create mode 100755 test-nsc/files/pos/scoping1.scala create mode 100755 test-nsc/files/pos/scoping2.scala create mode 100755 test-nsc/files/pos/scoping3.scala create mode 100755 test-nsc/files/pos/seqtest2.scala create mode 100755 test-nsc/files/pos/simplelists.scala create mode 100755 test-nsc/files/pos/stable.scala create mode 100755 test-nsc/files/pos/strings.scala create mode 100755 test-nsc/files/pos/test1.scala create mode 100755 test-nsc/files/pos/test2.scala create mode 100755 test-nsc/files/pos/test4.scala create mode 100755 test-nsc/files/pos/test4a.scala create mode 100755 test-nsc/files/pos/test4refine.scala create mode 100755 test-nsc/files/pos/test5.scala create mode 100755 test-nsc/files/pos/test5refine.scala create mode 100755 test-nsc/files/pos/testcast.scala create mode 100755 test-nsc/files/pos/thistype.scala create mode 100755 test-nsc/files/pos/thistypes.scala create mode 100755 test-nsc/files/pos/traits.scala create mode 100755 test-nsc/files/pos/valdefs.scala create mode 100755 test-nsc/files/pos/viewtest1.scala create mode 100755 test-nsc/files/pos/viewtest2.scala create mode 100755 test-nsc/files/pos/viewtest3.scala (limited to 'test-nsc') diff --git a/test-nsc/files/pos/304.scala b/test-nsc/files/pos/304.scala new file mode 100755 index 0000000000..607a115db2 --- /dev/null +++ b/test-nsc/files/pos/304.scala @@ -0,0 +1,5 @@ +object O { + def f1 = -1; + def f2 = 0-1; + def f3 = f1 + f2; +} diff --git a/test-nsc/files/pos/A.scala b/test-nsc/files/pos/A.scala new file mode 100755 index 0000000000..fc50379d88 --- /dev/null +++ b/test-nsc/files/pos/A.scala @@ -0,0 +1,8 @@ +trait A extends java.lang.Object {} + +object test { + + def x: A = x; + +} + diff --git a/test-nsc/files/pos/List1.scala b/test-nsc/files/pos/List1.scala new file mode 100755 index 0000000000..1321d95c20 --- /dev/null +++ b/test-nsc/files/pos/List1.scala @@ -0,0 +1,45 @@ +object lists { + + abstract class List[a] { + def isEmpty: Boolean; + def head: a; + def tail: List[a]; + def prepend(x: a) = Cons[a](x, this); + } + + def Nil[b] = new List[b] { + def isEmpty: Boolean = true; + def head = error("head of Nil"); + def tail = error("tail of Nil"); + } + + def Cons[c](x: c, xs: List[c]): List[c] = new List[c] { + def isEmpty = false; + def head = x; + def tail = xs; + } + + def foo = { + val intnil = Nil[Int]; + val intlist = intnil.prepend(1).prepend(1+1); + val x: Int = intlist.head; + val strnil = Nil[String]; + val strlist = strnil.prepend("A").prepend("AA"); + val y: String = strlist.head; + () + } + + class IntList() extends List[Int] { + def isEmpty: Boolean = false; + def head: Int = 1; + def foo: List[Int] { def isEmpty: Boolean; def head: Int; def tail: List[Int] } = Nil[Int]; + def tail0: List[Int] = foo.prepend(1).prepend(1+1); + def tail: List[Int] = Nil[Int].prepend(1).prepend(1+1); + } + + def foo2 = { + val il1 = new IntList(); + val il2 = il1.prepend(1).prepend(2); + () + } +} diff --git a/test-nsc/files/pos/MailBox.scala b/test-nsc/files/pos/MailBox.scala new file mode 100755 index 0000000000..b1ea818f60 --- /dev/null +++ b/test-nsc/files/pos/MailBox.scala @@ -0,0 +1,83 @@ +package test; + +import scala.concurrent._; + +class MailBox { + private class LinkedList[a] { + var elem: a = _; + var next: LinkedList[a] = null; + } + + private def insert[a](l: LinkedList[a], x: a): LinkedList[a] = { + l.next = new LinkedList[a]; + l.next.elem = x; + l.next.next = l.next; + l + } + + private abstract class Receiver { + def isDefined(msg: Any): boolean; + var msg: Any = null; + } + + private val sent = new LinkedList[Any]; + private var lastSent = sent; + private val receivers = new LinkedList[Receiver]; + private var lastReceiver = receivers; + + def send(msg: Any): unit = synchronized { + var r = receivers; + var r1 = r.next; + while (r1 != null && !r1.elem.isDefined(msg)) { + r = r1; r1 = r1.next; + } + if (r1 != null) { + r.next = r1.next; r1.elem.msg = msg; r1.elem.notify(); + } else { + lastSent = insert(lastSent, msg); + } + } + + def receive[a](f: PartialFunction[Any, a]): a = { + val msg: Any = synchronized { + var s = sent; + var s1 = s.next; + while (s1 != null && !f.isDefinedAt(s1.elem)) { + s = s1; s1 = s1.next + } + if (s1 != null) { + s.next = s1.next; s1.elem + } else { + val r = insert(lastReceiver, new Receiver { + def isDefined(msg: Any) = f.isDefinedAt(msg); + }); + lastReceiver = r; + r.elem.wait(); + r.elem.msg + } + } + f(msg) + } + + def receiveWithin[a](msec: long)(f: PartialFunction[Any, a]): a = { + val msg: Any = synchronized { + var s = sent; + var s1 = s.next; + while (s1 != null && !f.isDefinedAt(s1.elem)) { + s = s1; s1 = s1.next ; + } + if (s1 != null) { + s.next = s1.next; s1.elem + } else { + val r = insert(lastReceiver, new Receiver { + def isDefined(msg: Any) = f.isDefinedAt(msg); + }); + lastReceiver = r; + r.elem.wait(msec); + if (r.elem.msg == null) r.elem.msg = TIMEOUT; + r.elem.msg + } + } + f(msg) + } +} diff --git a/test-nsc/files/pos/S1.scala b/test-nsc/files/pos/S1.scala new file mode 100755 index 0000000000..68706e3dd3 --- /dev/null +++ b/test-nsc/files/pos/S1.scala @@ -0,0 +1,13 @@ +/* This is probably no bug, I just don't understand why +** type inference does not find the right instantiation of foo. +** Currently it reports: +** +** S1.scala:12: inferred type arguments [S1] do not conform to +** method foo's type parameter bounds [T <: S1.this.type] +** foo(this); +** ^ +*/ +class S1() { + def foo[T <: this.type](x: T) = x; + foo[this.type](this); +} diff --git a/test-nsc/files/pos/S3.scala b/test-nsc/files/pos/S3.scala new file mode 100755 index 0000000000..1e0f0288b1 --- /dev/null +++ b/test-nsc/files/pos/S3.scala @@ -0,0 +1,14 @@ +/* Why does this code fail? b has type a.type, so the third +** declaration in S3 should be okay... The compiler writes instead: +** +** found : S3.this.b.type (with underlying type S3) +** required: S3.this.a.type +** val c: a.type = b; +** ^ +** Without declaration 3, everything is fine. +*/ +class S3() { + val a = new S3(); + val b: a.type = a; + val c: a.type = b; +} diff --git a/test-nsc/files/pos/S5.scala b/test-nsc/files/pos/S5.scala new file mode 100755 index 0000000000..f0b66a6e68 --- /dev/null +++ b/test-nsc/files/pos/S5.scala @@ -0,0 +1,30 @@ +/* Here's a fragment of a Scala encoding for the Keris module system; +** the compiler claims: +** +** S5.scala:28: value n in class N of type N.this._N.n +** cannot override value n in class M of type M.this._N.n +** val system = new M() with N() {} +** ^ +** To me it seems like the code is perfectly fine... +*/ +abstract class M() { + val _N: N; + val n: _N.n; + val _M: M = this; + val m: _M.m = new _M.m(); + class m() { + // module body of M + } +} +trait N { + val _N: N = this; + val n: _N.n = new _N.n(); + val _M: M; + val m: _M.m; + class n() { + // module body of N + } +} +object O { + val system = new M() with N {} +} diff --git a/test-nsc/files/pos/S8.scala b/test-nsc/files/pos/S8.scala new file mode 100755 index 0000000000..50f1df27a2 --- /dev/null +++ b/test-nsc/files/pos/S8.scala @@ -0,0 +1,19 @@ +/* I believe this code is correct, but the compiler rejects it: +** +** S8.scala:18: type mismatch; +** found : M.x.A +** required: M.x.a.B +** val y: x.a.B = new x.A(); //correct? +** ^ +** For a given value x of type S8, type x.A should be +** a subtype of x.a.B. +*/ +class S8() { + val a: S8 = this; + class A() extends a.B() {} + class B() {} +} +object M { + val x = new S8(); + val y: x.a.B = new x.A(); //correct? +} diff --git a/test-nsc/files/pos/X.scala b/test-nsc/files/pos/X.scala new file mode 100755 index 0000000000..2edf010efd --- /dev/null +++ b/test-nsc/files/pos/X.scala @@ -0,0 +1,14 @@ +abstract class A() { + + var x: Int + +} + +abstract class B() extends A() { + + var xx: Int = 0; + + def x = xx; + def x_=(y: Int) = xx = y; +} + diff --git a/test-nsc/files/pos/Z.scala b/test-nsc/files/pos/Z.scala new file mode 100755 index 0000000000..c1367e46b9 --- /dev/null +++ b/test-nsc/files/pos/Z.scala @@ -0,0 +1,10 @@ +trait X { + val elem: Int = 1 +} + +object test { + + def g(x: X) = x.elem; + def f(x: Object) = x.toString(); + +} diff --git a/test-nsc/files/pos/abstract.scala b/test-nsc/files/pos/abstract.scala new file mode 100755 index 0000000000..533f996931 --- /dev/null +++ b/test-nsc/files/pos/abstract.scala @@ -0,0 +1,9 @@ +abstract class C() { + type t; + def copy(x: t): t = x; +} + +class D() extends C() { + type t = Int; + System.out.println(copy(1)); +} diff --git a/test-nsc/files/pos/aliases.scala b/test-nsc/files/pos/aliases.scala new file mode 100755 index 0000000000..b746a35861 --- /dev/null +++ b/test-nsc/files/pos/aliases.scala @@ -0,0 +1,25 @@ +abstract class C() { + + type t <: C; + + val x: t; + val y: x.type; + val z: x.type; + val u: z.type; + + val xt: x.t; + val yt: y.t; + val zt: z.t; + val ut: z.t; + + def fx(a: x.t): Unit; + def fy(a: y.t): Unit; + def fz(a: z.t): Unit; + def fu(a: u.t): Unit; + + fx(xt); fx(yt); fx(zt); fx(ut); + fy(xt); fy(yt); fy(zt); fy(ut); + fz(xt); fz(yt); fz(zt); fz(ut); + fu(xt); fu(yt); fu(zt); fu(ut); + +} diff --git a/test-nsc/files/pos/all.lst b/test-nsc/files/pos/all.lst new file mode 100755 index 0000000000..f5f9089522 --- /dev/null +++ b/test-nsc/files/pos/all.lst @@ -0,0 +1,143 @@ +304.scala +A.scala +List1.scala +MailBox.scala +S1.scala +S3.scala +S5.scala +S8.scala +X.scala +Z.scala +abstract.scala +aliases.scala +arrays2.scala +attributes.scala +bug082.scala +bug1.scala +bug115.scala +bug116.scala +bug119.scala +bug121.scala +bug123.scala +bug124.scala +bug151.scala +bug159.scala +bug160.scala +bug17.scala +bug175.scala +bug177.scala +bug183.scala +bug193.scala +bug2.scala +bug20.scala +bug201.scala +bug204.scala +bug210.scala +bug211.scala +bug229.scala +bug245.scala +bug267.scala +bug287.scala +bug289.scala +bug29.scala +bug295.scala +bug30.scala +bug304.scala +bug31.scala +bug318.scala +bug32.scala +bug342.scala +bug348plus.scala +bug359.scala +bug36.scala +bug360.scala +bug361.scala +bug372.scala +bug39.scala +bug49.scala +bug53.scala +bug54.scala +bug61.scala +bug64.scala +bug66.scala +bug68.scala +bug69.scala +bug76.scala +bug81.scala +bug85.scala +bug91.scala +bug93.scala +cls.scala +cls1.scala +clsrefine.scala +compile.scala +compound.scala +constfold.scala +context.scala +eta.scala +exceptions.scala +expressions-current.scala +gui.scala +imports.scala +infer.scala +infer2.scala +lambda.scala +lambdalift.scala +lambdalift1.scala +localmodules.scala +matthias1.scala +matthias3.scala +matthias4.scala +matthias5.scala +maxim1.scala +michel1.scala +michel2.scala +michel3.scala +michel4.scala +michel5.scala +michel6.scala +mixins.scala +modules.scala +modules1.scala +moduletrans.scala +nested.scala +null.scala +orderedpoints.scala +override.scala +partialfun.scala +patterns.scala +patterns1.scala +patterns2.scala +patterns3.scala +philippe1.scala +philippe2.scala +philippe3.scala +philippe4.scala +pmbug.scala +propagate.scala +rebind.scala +refine.scala +reftest.scala +scall.bat +scoping1.scala +scoping2.scala +scoping3.scala +seqtest2.scala +simplelists.scala +stable.scala +strings.scala +test1.scala +test2.scala +test4.scala +test4a.scala +test4refine.scala +test5.scala +test5refine.scala +testcast.scala +thistype.scala +thistypes.scala +traits.scala +valdefs.scala +viewtest1.scala +viewtest2.scala +viewtest3.scala diff --git a/test-nsc/files/pos/arrays2.scala b/test-nsc/files/pos/arrays2.scala new file mode 100755 index 0000000000..6f4a09a401 --- /dev/null +++ b/test-nsc/files/pos/arrays2.scala @@ -0,0 +1,11 @@ +case class C(); + +object arrays2 { + + def main(args: Array[String]): Unit = { + val a: Array[Array[C]] = new Array[Array[C]](2); + a(0) = new Array[C](2); + a(0)(0) = new C(); + } +} + diff --git a/test-nsc/files/pos/attributes.scala b/test-nsc/files/pos/attributes.scala new file mode 100755 index 0000000000..ab30e2cdeb --- /dev/null +++ b/test-nsc/files/pos/attributes.scala @@ -0,0 +1,74 @@ +/* $Id$ */ + +[serializable] class C1; +[serializable,volatile] class C2; +[serializable][volatile] class C3; +[serializable][volatile,serializable] class C4; + +[serializable] trait T1; +[serializable,volatile] trait T2; +[serializable][volatile] trait T3; +[serializable][volatile,serializable] trait T4; + +[serializable] object O1 extends C1; +[serializable,volatile] object O2 extends C2; +[serializable][volatile] object O3 extends C3; +[serializable][volatile,serializable] object O4 extends C4; + +object O5 { + final val n = 2; + [SerialVersionUID(0)] class C1; + [SerialVersionUID(n)] class C2; + [SerialVersionUID(0),SerialVersionUID(n)] class C3; + [SerialVersionUID(0)][SerialVersionUID(n)] class C4; +} + +abstract class A1 { + [serializable] var y1: C1; + [serializable,volatile] var y2: C2; + [serializable][volatile] var y3: C3; + [serializable][volatile,serializable] var y4: C4; + + [serializable] def foo1: C1; + [serializable,volatile] def foo2: C2; + [serializable][volatile] def foo3: C3; + [serializable][volatile,serializable] def foo4: C4; +} + +object O6 { + [serializable] val x1 = new C1; + [serializable,volatile] val x2 = new C2; + [serializable][volatile] val x3 = new C3; + [serializable][volatile,serializable] val x4 = new C4; + + [serializable] var y1: C1 = _; + [serializable,volatile] var y2: C2 = _; + [serializable][volatile] var y3: C3 = _; + [serializable][volatile,serializable] var y4: C4 = _; + + [serializable] private def foo1 = x1; + [serializable,volatile] private def foo2 = x2; + [serializable][volatile] protected def foo3 = x3; + [serializable][volatile,serializable] protected def foo4 = x4; +} + +object myAttrs { + class a1 extends scala.Attribute; + class a2(x: Int) extends scala.Attribute; + class a3(x: a1) extends scala.Attribute; +} +object O7 { + class a1 extends scala.Attribute; + class a2(x: Int) extends scala.Attribute; + class a3(x: a1) extends scala.Attribute; + final val x = new a1; + [a1] class C1; + [a1,a2(77)] class C2; + [a1][a2(88)] class C3; + [a1][a2(88),a3(null)] class C4; + + [myAttrs.a1] class A1; + [myAttrs.a1,myAttrs.a2(99)] class A2; + [myAttrs.a1][myAttrs.a2(99)] class A3; + [myAttrs.a1][myAttrs.a2(99),myAttrs.a3(null)] class A4; +} diff --git a/test-nsc/files/pos/bug082.scala b/test-nsc/files/pos/bug082.scala new file mode 100755 index 0000000000..594c9fdc86 --- /dev/null +++ b/test-nsc/files/pos/bug082.scala @@ -0,0 +1,18 @@ + +object Main { + + def min0[A](less: (A, A) => Boolean, xs: List[A]): Option[A] = xs match { + case List() => None + case List(x) => Some(x) +// case x :: Nil => Some(x) + case y :: ys => min0(less, ys) match { + case Some(m) => if (less(y, m)) Some(y) else Some(m) + } + } + + def min(xs: List[Int]) = min0((x: Int, y: Int) => x < y, xs); + + def main(args: Array[String]) = + System.out.println(min(List())); + +} diff --git a/test-nsc/files/pos/bug1.scala b/test-nsc/files/pos/bug1.scala new file mode 100755 index 0000000000..bdf33ef20d --- /dev/null +++ b/test-nsc/files/pos/bug1.scala @@ -0,0 +1,8 @@ +object Exceptions { + + class CubeException(s: String) extends java.lang.RuntimeException(s); + + def main(args: Array[String]) = + System.out.println(new CubeException("test")); + +} diff --git a/test-nsc/files/pos/bug115.scala b/test-nsc/files/pos/bug115.scala new file mode 100755 index 0000000000..a250e3c090 --- /dev/null +++ b/test-nsc/files/pos/bug115.scala @@ -0,0 +1,9 @@ +class S[A](f: A => A, x: A) { + System.out.println(f(x)); +} +class T[B](f: B => B, y: B) extends S(x: B => f(x), y) { +} +object Test extends Application { + new T[Int](x => x * 2, 1); + val f = new S(x: Int => x, 1); +} diff --git a/test-nsc/files/pos/bug116.scala b/test-nsc/files/pos/bug116.scala new file mode 100755 index 0000000000..b02c81f0b7 --- /dev/null +++ b/test-nsc/files/pos/bug116.scala @@ -0,0 +1,8 @@ +// $Id$ + +class C { + def this(x: Int) = { + this(); + class D extends C; + } +} diff --git a/test-nsc/files/pos/bug119.scala b/test-nsc/files/pos/bug119.scala new file mode 100755 index 0000000000..e3f0993862 --- /dev/null +++ b/test-nsc/files/pos/bug119.scala @@ -0,0 +1,7 @@ +class K[E] { + case class A(v:E){}; +} + +class K2 extends K[int] { + val A(v) = A(42); +} diff --git a/test-nsc/files/pos/bug121.scala b/test-nsc/files/pos/bug121.scala new file mode 100755 index 0000000000..78ddc41ee5 --- /dev/null +++ b/test-nsc/files/pos/bug121.scala @@ -0,0 +1,3 @@ +class Bug121_B(b: Array[Byte]) { + def get(x: Int): Byte = return b(x); +} diff --git a/test-nsc/files/pos/bug123.scala b/test-nsc/files/pos/bug123.scala new file mode 100755 index 0000000000..79f0c907a3 --- /dev/null +++ b/test-nsc/files/pos/bug123.scala @@ -0,0 +1,3 @@ +class M{ + val 1 = 1; +} diff --git a/test-nsc/files/pos/bug124.scala b/test-nsc/files/pos/bug124.scala new file mode 100755 index 0000000000..9aed6786f6 --- /dev/null +++ b/test-nsc/files/pos/bug124.scala @@ -0,0 +1,5 @@ +class N{ + val F: Any => Any = (x:Any) => F(x); + val f:(Any => Any) = (x:Any) => f(x); + val g: Any => Any = (x:Any) => g(x); +} diff --git a/test-nsc/files/pos/bug151.scala b/test-nsc/files/pos/bug151.scala new file mode 100755 index 0000000000..86667b49f7 --- /dev/null +++ b/test-nsc/files/pos/bug151.scala @@ -0,0 +1,6 @@ +abstract class Foo { + type T; + def foo(a: T): Int = 0; + val foo: Foo = null; + def a: foo.T = a; +} diff --git a/test-nsc/files/pos/bug159.scala b/test-nsc/files/pos/bug159.scala new file mode 100755 index 0000000000..ef6eba5255 --- /dev/null +++ b/test-nsc/files/pos/bug159.scala @@ -0,0 +1,22 @@ +object foo { + + // the problem seems to appear only + // if "val _" is in the body of a case + def cooked( ckd:StringBuffer ):Unit = + 'a' match { + case '-' => + val _ = ckd.append( '_' ); + case 'v' => + val _ = ckd.append( '_' ); + } + +} +object foo1 { + def f():Unit = { + 1 match { + case 2 => val _ = 1; + case 3 => val _ = 2; + case 4 => val _ = 2; + } + } +} diff --git a/test-nsc/files/pos/bug160.scala b/test-nsc/files/pos/bug160.scala new file mode 100755 index 0000000000..f1c36ebeae --- /dev/null +++ b/test-nsc/files/pos/bug160.scala @@ -0,0 +1,5 @@ +// $Id$ + +class Foo(s:String) { + def this() = { this("DEFAULT") } +} diff --git a/test-nsc/files/pos/bug17.scala b/test-nsc/files/pos/bug17.scala new file mode 100755 index 0000000000..a83eefe972 --- /dev/null +++ b/test-nsc/files/pos/bug17.scala @@ -0,0 +1,21 @@ +class Quantity { + def getValue = 0; + def connect(c: Constraint) = c.newValue; +} + +abstract class Constraint(q: Quantity) { + def newValue: Unit; + q connect this +} + +class Adder(q: Quantity) extends Constraint(q) { + def newValue = System.out.println(q.getValue); +} + +object Main { + def main(args: Array[String]): Unit = { + val x = new Quantity; + new Adder(x); + () + } +} diff --git a/test-nsc/files/pos/bug175.scala b/test-nsc/files/pos/bug175.scala new file mode 100755 index 0000000000..2ef26589c2 --- /dev/null +++ b/test-nsc/files/pos/bug175.scala @@ -0,0 +1,5 @@ +// $Id$ + +abstract class C { + def this(x: Unit) = { this() } +} diff --git a/test-nsc/files/pos/bug177.scala b/test-nsc/files/pos/bug177.scala new file mode 100755 index 0000000000..9bd913f179 --- /dev/null +++ b/test-nsc/files/pos/bug177.scala @@ -0,0 +1,10 @@ +// $Id$ + +class A { + def foo = { + object Y { + def bar = 1; + } + Y.bar + } +} diff --git a/test-nsc/files/pos/bug183.scala b/test-nsc/files/pos/bug183.scala new file mode 100755 index 0000000000..4804eb3828 --- /dev/null +++ b/test-nsc/files/pos/bug183.scala @@ -0,0 +1,6 @@ +// $Id$ + +object Test { + new Foo(0); + class Foo(x: Int); +} diff --git a/test-nsc/files/pos/bug193.scala b/test-nsc/files/pos/bug193.scala new file mode 100755 index 0000000000..9b1c82f45f --- /dev/null +++ b/test-nsc/files/pos/bug193.scala @@ -0,0 +1,74 @@ +// $Id$ + +trait Test { + + def fun_00(x: Int): Unit = { + (0: Any) == 0; + (0 ) == 0; + (0: Any) != 0; + (0 ) != 0; + () + } + + def fun_i0(x: Int): Unit = { + (x: Any) == 0; + (x ) == 0; + (x: Any) != 0; + (x ) != 0; + () + } + + def fun_o0(x: Object): Unit = { + (x: Any) == 0; + (x ) == 0; + (x: Any) != 0; + (x ) != 0; + () + } + + def fun_0i(y: Int): Unit = { + (0: Any) == y; + (0 ) == y; + (0: Any) != y; + (0 ) != y; + () + } + + def fun_0o(y: Object): Unit = { + (0: Any) == y; + (0 ) == y; + (0: Any) != y; + (0 ) != y; + () + } + + def fun_ii(x: Int, y: Int): Unit = { + (x: Any) == y; + (x ) == y; + (x: Any) != y; + (x ) != y; + () + } + def fun_io(x: Int, y: Object): Unit = { + (x: Any) == y; + (x ) == y; + (x: Any) != y; + (x ) != y; + () + } + def fun_oi(x: Object, y: Int): Unit = { + (x: Any) == y; + (x ) == y; + (x: Any) != y; + (x ) != y; + () + } + def fun_oo(x: Object, y: Object): Unit = { + (x: Any) == y; + (x ) == y; + (x: Any) != y; + (x ) != y; + () + } + +} diff --git a/test-nsc/files/pos/bug2.scala b/test-nsc/files/pos/bug2.scala new file mode 100755 index 0000000000..4c58ed3f4f --- /dev/null +++ b/test-nsc/files/pos/bug2.scala @@ -0,0 +1,6 @@ +object main { + def main(args: Array[String]) = { + val b = true; + while (b == true) { } + } +} diff --git a/test-nsc/files/pos/bug20.scala b/test-nsc/files/pos/bug20.scala new file mode 100755 index 0000000000..bdf33ef20d --- /dev/null +++ b/test-nsc/files/pos/bug20.scala @@ -0,0 +1,8 @@ +object Exceptions { + + class CubeException(s: String) extends java.lang.RuntimeException(s); + + def main(args: Array[String]) = + System.out.println(new CubeException("test")); + +} diff --git a/test-nsc/files/pos/bug201.scala b/test-nsc/files/pos/bug201.scala new file mode 100755 index 0000000000..53dac21ef0 --- /dev/null +++ b/test-nsc/files/pos/bug201.scala @@ -0,0 +1,7 @@ +class C[a] { def f: a = f; } +class D[b] { class E extends C[b]; } +object Test { + val d = new D[int]; + def e = new d.E; + e.f; +} diff --git a/test-nsc/files/pos/bug204.scala b/test-nsc/files/pos/bug204.scala new file mode 100755 index 0000000000..23d36523e9 --- /dev/null +++ b/test-nsc/files/pos/bug204.scala @@ -0,0 +1,7 @@ +class A { + object B { + def f() = { + class C extends A {}; new C : A + } + } +} diff --git a/test-nsc/files/pos/bug210.scala b/test-nsc/files/pos/bug210.scala new file mode 100755 index 0000000000..20450335f4 --- /dev/null +++ b/test-nsc/files/pos/bug210.scala @@ -0,0 +1,17 @@ +trait Lang1 { + trait Exp; + trait Visitor { def f(left: Exp): unit; } + class Eval1: Visitor extends Visitor { + def f(left: Exp) = (); + } +} + +trait Lang2 extends Lang1 { + class Eval2: Visitor extends Eval1; +} +/* +object Main with Application { + val lang2 = new Lang2 {}; + val eval = new lang2.Eval2; +} +*/ diff --git a/test-nsc/files/pos/bug211.scala b/test-nsc/files/pos/bug211.scala new file mode 100755 index 0000000000..8c5cf1dc1e --- /dev/null +++ b/test-nsc/files/pos/bug211.scala @@ -0,0 +1,8 @@ +trait A; +trait B; +class Foo: (A with B) extends A with B; +object Test extends Application { + new Foo(); + System.out.println("bug211 completed"); +} + diff --git a/test-nsc/files/pos/bug229.scala b/test-nsc/files/pos/bug229.scala new file mode 100755 index 0000000000..2bceea0782 --- /dev/null +++ b/test-nsc/files/pos/bug229.scala @@ -0,0 +1,3 @@ +class Test extends java.util.ArrayList { + override def add(index: int, element: java.lang.Object): unit = {} +} diff --git a/test-nsc/files/pos/bug245.scala b/test-nsc/files/pos/bug245.scala new file mode 100755 index 0000000000..b33dd9914f --- /dev/null +++ b/test-nsc/files/pos/bug245.scala @@ -0,0 +1,18 @@ +class Value {} + +object Test { + + implicit def view(v: Value): int = 0; + + def foo(i: Int): Int = 0; + + def fun0 : Value = null; + def fun0(i: Int ): Value = null; + + def fun1(i: Int ): Value = null; + def fun1(l: Long): Value = null; + + foo(fun0 ); + foo(fun1(new Value)); + +} diff --git a/test-nsc/files/pos/bug267.scala b/test-nsc/files/pos/bug267.scala new file mode 100755 index 0000000000..d99b1fa1fc --- /dev/null +++ b/test-nsc/files/pos/bug267.scala @@ -0,0 +1,55 @@ +package expAbstractData; + +/** A base class consisting of + * - a root trait (i.e. abstract class) `Exp' with an `eval' function + * - an abstract type `exp' bounded by `Exp' + * - a concrete instance class `Num' of `Exp' for numeric literals + */ +trait Base { + type exp <: Exp; + + trait Exp { + def eval: int + } + class Num(v: int): exp extends Exp { + val value = v; + def eval = value + } +} + +object testBase extends Application with Base { + type exp = Exp; + val term = new Num(2); + System.out.println(term.eval); +} + +/** Data extension: An extension of `Base' with `Plus' expressions + */ +trait BasePlus extends Base { + class Plus(l: exp, r: exp): exp extends Exp { + val left = l; + val right = r; + def eval = left.eval + right.eval + } +} + +/** Operation extension: An extension of `Base' with 'show' methods. + */ +trait Show extends Base { + type exp <: Exp1; + + trait Exp1 extends Exp { + def show: String; + } + class Num1(v: int): (exp with Num1) extends Num(v) with Exp1 { + def show = value.toString(); + } +} + +/** Operation extension: An extension of `BasePlus' with 'show' methods. + */ +trait ShowPlus extends BasePlus with Show { + class Plus1(l: exp, r: exp): (exp with Plus1) extends Plus(l, r) with Exp1 { + def show = left.show + " + " + right.show + } +} diff --git a/test-nsc/files/pos/bug287.scala b/test-nsc/files/pos/bug287.scala new file mode 100755 index 0000000000..81a01951b2 --- /dev/null +++ b/test-nsc/files/pos/bug287.scala @@ -0,0 +1,12 @@ +object testBuf { + class mystream extends java.io.BufferedOutputStream(new java.io.FileOutputStream("/dev/null")) { + def w( x:String ):Unit = { + val foo = new Array[byte](2); + + // write( byte[] ) is defined in FilterOutputStream, the superclass of BufferedOutputStream + super.write( foo ); // error + + super.write( foo, 0, foo.length ); // this works however + } + } +} diff --git a/test-nsc/files/pos/bug289.scala b/test-nsc/files/pos/bug289.scala new file mode 100644 index 0000000000..2fb91510d2 --- /dev/null +++ b/test-nsc/files/pos/bug289.scala @@ -0,0 +1,7 @@ +// $Id$ + +class A { + object B; +} + +object C extends A; diff --git a/test-nsc/files/pos/bug29.scala b/test-nsc/files/pos/bug29.scala new file mode 100755 index 0000000000..1b33c6cffd --- /dev/null +++ b/test-nsc/files/pos/bug29.scala @@ -0,0 +1,3 @@ +object Main { + def f[a]: List[List[a]] = for (val l1 <- Nil; val l2 <- Nil) yield l1; +} diff --git a/test-nsc/files/pos/bug295.scala b/test-nsc/files/pos/bug295.scala new file mode 100755 index 0000000000..22c7beff4d --- /dev/null +++ b/test-nsc/files/pos/bug295.scala @@ -0,0 +1,2 @@ +object Test extends java.rmi.server.UnicastRemoteObject { +} diff --git a/test-nsc/files/pos/bug30.scala b/test-nsc/files/pos/bug30.scala new file mode 100755 index 0000000000..6d28e18c0d --- /dev/null +++ b/test-nsc/files/pos/bug30.scala @@ -0,0 +1,9 @@ +trait A { + def f(x: int): unit; + def f(x: String): unit; +} + +class B extends A { + def f(x: int): unit = (); + def f(x: String): unit = (); +} diff --git a/test-nsc/files/pos/bug304.scala b/test-nsc/files/pos/bug304.scala new file mode 100755 index 0000000000..76da44157d --- /dev/null +++ b/test-nsc/files/pos/bug304.scala @@ -0,0 +1,5 @@ +object O { + def f1 = -1; + def f2 = 0-1; + def f3 = -f1; +} diff --git a/test-nsc/files/pos/bug31.scala b/test-nsc/files/pos/bug31.scala new file mode 100755 index 0000000000..92f33bfd02 --- /dev/null +++ b/test-nsc/files/pos/bug31.scala @@ -0,0 +1,29 @@ +object Main { + + trait Ensure[a] { + def ensure(postcondition: a => Boolean): a + } + + def require[a](precondition: => Boolean)(command: => a): Ensure[a] = + if (precondition) + new Ensure[a] { + def ensure(postcondition: a => Boolean): a = { + val result = command; + if (postcondition(result)) result + else error("Assertion error") + } + } + else + error("Assertion error"); + + def arb[a](s: List[a]) = + require (! s.isEmpty) { + s.head + } ensure (result => s contains result); + + def main(args: Array[String]) = { + val s = List(1, 2); + System.out.println(arb(s)) + } + +} diff --git a/test-nsc/files/pos/bug318.scala b/test-nsc/files/pos/bug318.scala new file mode 100755 index 0000000000..1b9fa4a4b3 --- /dev/null +++ b/test-nsc/files/pos/bug318.scala @@ -0,0 +1,11 @@ +// $Id$ + +object Test { + def fun: Int = { + object o { + def a: Int = 1; + class C { def b: Int = a; } + } + 0 + } +} diff --git a/test-nsc/files/pos/bug32.scala b/test-nsc/files/pos/bug32.scala new file mode 100755 index 0000000000..4354727d1a --- /dev/null +++ b/test-nsc/files/pos/bug32.scala @@ -0,0 +1,17 @@ +import java.io._; + +class PromptStream(s: OutputStream) extends PrintStream(s) { + override def println() = super.println(); +} + +object Main { + + val out = new PromptStream(System.out); + + System.setOut(out); + + def main(args: Array[String]) = + //out.println("hello world"); + () + +} diff --git a/test-nsc/files/pos/bug342.scala b/test-nsc/files/pos/bug342.scala new file mode 100755 index 0000000000..2e72ef220b --- /dev/null +++ b/test-nsc/files/pos/bug342.scala @@ -0,0 +1,9 @@ +object Main extends Application { + +//object Foo extends Enumeration { // 1: OK ! + object Foo extends Enumeration(0, "Bar") { // 2 + val Bar = Value + } + import Foo._; + Console.println(Bar) +} diff --git a/test-nsc/files/pos/bug348plus.scala b/test-nsc/files/pos/bug348plus.scala new file mode 100755 index 0000000000..30fa1576af --- /dev/null +++ b/test-nsc/files/pos/bug348plus.scala @@ -0,0 +1,24 @@ +// bug #348 + +trait Foo { + type bar <: Bar; + abstract class Bar; + case class Baz(r:bar) extends Bar; + case object NoBar extends Bar; +} +object Test extends Application { + object ConcreteFooBar extends Foo { // if moved to toplevel, it works + type bar = Bar; + } + def foo = { + import ConcreteFooBar._ ; + Baz( NoBar ) + } +} + +// bug #367 + +object Bla { + def foo(): Unit = (return null).equals(null); +} + diff --git a/test-nsc/files/pos/bug359.scala b/test-nsc/files/pos/bug359.scala new file mode 100755 index 0000000000..6ce4640998 --- /dev/null +++ b/test-nsc/files/pos/bug359.scala @@ -0,0 +1,30 @@ +// $Id$ + +object Bug359 { + class C; + def f1(xs: List[C]): C = { + g { + xs => + if (false) { + f1(xs) + } else { + val a: C = null; + val b: C = null; + if (xs.isEmpty) a else b + } + } + } + def f2(xs: List[C]): C = { + g { + xs => + if (false) { + val a: C = null; + val b: C = null; + if (xs.isEmpty) a else b + } else { + f2(xs); + } + } + } + private def g(op: List[C] => C): C = null; +} diff --git a/test-nsc/files/pos/bug36.scala b/test-nsc/files/pos/bug36.scala new file mode 100755 index 0000000000..1d923b0017 --- /dev/null +++ b/test-nsc/files/pos/bug36.scala @@ -0,0 +1,8 @@ +object m { + + val xs: List[int] = Nil; + def f(i: int) = 0; + val v = xs map f; + + def m() = {} +} diff --git a/test-nsc/files/pos/bug360.scala b/test-nsc/files/pos/bug360.scala new file mode 100644 index 0000000000..0fcb5cb161 --- /dev/null +++ b/test-nsc/files/pos/bug360.scala @@ -0,0 +1,11 @@ +// $Id$ + +abstract class Bug360A: Bug360C { + def f: String = "hello"; +} +trait Bug360B: Bug360C { + object d { + System.out.println(f); + } +} +abstract class Bug360C extends Bug360A with Bug360B; diff --git a/test-nsc/files/pos/bug361.scala b/test-nsc/files/pos/bug361.scala new file mode 100644 index 0000000000..f48c906246 --- /dev/null +++ b/test-nsc/files/pos/bug361.scala @@ -0,0 +1,18 @@ +// $Id$ + +class Bug361Global extends Bug361Trees; + +abstract class Bug361Trees: Bug361Global { + + abstract class Tree { + var pos: int = 0; + } + + object posAssigner { + def atPos[T <: Tree](pos: int, tree: T): T = { + tree.pos = pos; tree + } + } + + def atPos[T <: Tree](pos: int)(tree: T): T = posAssigner.atPos(pos, tree); +} diff --git a/test-nsc/files/pos/bug372.scala b/test-nsc/files/pos/bug372.scala new file mode 100755 index 0000000000..d16585abbe --- /dev/null +++ b/test-nsc/files/pos/bug372.scala @@ -0,0 +1,4 @@ +// $Id$ + +class Bug372Names; +class Bug372Symbols: (Bug372Symbols with Bug372Names); diff --git a/test-nsc/files/pos/bug39.scala b/test-nsc/files/pos/bug39.scala new file mode 100755 index 0000000000..a131bc0450 --- /dev/null +++ b/test-nsc/files/pos/bug39.scala @@ -0,0 +1,6 @@ +abstract class Extensible[A, This <: Extensible[A, This]](x: A, xs: This): This { + def mkObj(x: A, xs: This): This; +} +class Fixed[A](x: A, xs: Fixed[A]) extends Extensible[A, Fixed[A]](x, xs) { + def mkObj(x: A, xs: Fixed[A]) = new Fixed(x, xs); +} diff --git a/test-nsc/files/pos/bug49.scala b/test-nsc/files/pos/bug49.scala new file mode 100755 index 0000000000..913ce06e00 --- /dev/null +++ b/test-nsc/files/pos/bug49.scala @@ -0,0 +1,3 @@ +class C1(x: Object) {}; + +class C2 extends C1({ class A extends Object {}; (new A) : Object }) {}; diff --git a/test-nsc/files/pos/bug53.scala b/test-nsc/files/pos/bug53.scala new file mode 100755 index 0000000000..44763ef144 --- /dev/null +++ b/test-nsc/files/pos/bug53.scala @@ -0,0 +1,7 @@ +object bug { + def foobar[c]: Int = { + class Foo { def foo: Bar = new Bar(); } + class Bar { def bar: c = bar; } + 0 + } +} diff --git a/test-nsc/files/pos/bug54.scala b/test-nsc/files/pos/bug54.scala new file mode 100755 index 0000000000..3dc8e161fd --- /dev/null +++ b/test-nsc/files/pos/bug54.scala @@ -0,0 +1,4 @@ +class A { + case class B(x: C) extends A {} + class C {} +} diff --git a/test-nsc/files/pos/bug61.scala b/test-nsc/files/pos/bug61.scala new file mode 100755 index 0000000000..dd3f94f30c --- /dev/null +++ b/test-nsc/files/pos/bug61.scala @@ -0,0 +1,10 @@ +object O { + + class testClass ; + + case class testA() extends testClass ; // works if you leave away "extends..." + // or if you write TestA + def ga( x:testClass ) = x match { + case testA() => () + } +} diff --git a/test-nsc/files/pos/bug64.scala b/test-nsc/files/pos/bug64.scala new file mode 100755 index 0000000000..c2ce4bf6d0 --- /dev/null +++ b/test-nsc/files/pos/bug64.scala @@ -0,0 +1,6 @@ +object B { + def main(Args:Array[String]) = { + val Pair(_,x) = Pair(1,2); + x + 1; + } +} diff --git a/test-nsc/files/pos/bug66.scala b/test-nsc/files/pos/bug66.scala new file mode 100755 index 0000000000..2153264e7a --- /dev/null +++ b/test-nsc/files/pos/bug66.scala @@ -0,0 +1,7 @@ +class GBTree[A, B] /*with Map[A, B, GBTree[A,B]]*/ { + abstract class Tree[A,B]; + case class Node[A,B](key:A,value:B,smaller:Node[A,B],bigger:Node[A,B]) + extends Tree[A,B]; + case class Nil[A,B]() extends Tree[A,B]; + +} diff --git a/test-nsc/files/pos/bug68.scala b/test-nsc/files/pos/bug68.scala new file mode 100755 index 0000000000..beb2c7c0ab --- /dev/null +++ b/test-nsc/files/pos/bug68.scala @@ -0,0 +1,6 @@ +class E { + def f() = { + val (_::l1) = List(1,2,3); + l1.tail; + } +} diff --git a/test-nsc/files/pos/bug69.scala b/test-nsc/files/pos/bug69.scala new file mode 100755 index 0000000000..113820613f --- /dev/null +++ b/test-nsc/files/pos/bug69.scala @@ -0,0 +1,11 @@ +object testCQ { + // why does this not work directly + case class Thing( name:String, contains:List[ Thing ] ); + + /* ... but this one does? + abstract class T; + case class Thing2( name:String, contains:List[ T ] ) extends T; + */ + +} + diff --git a/test-nsc/files/pos/bug76.scala b/test-nsc/files/pos/bug76.scala new file mode 100755 index 0000000000..5419cf5154 --- /dev/null +++ b/test-nsc/files/pos/bug76.scala @@ -0,0 +1,9 @@ +// This is extracted from a test file => don't add a new test file. +object bug { + def foo(i: => Int): Int = 0; + + def bar: Int = { + var i: Int = 0; + foo (i); + } +} diff --git a/test-nsc/files/pos/bug81.scala b/test-nsc/files/pos/bug81.scala new file mode 100755 index 0000000000..20fd604974 --- /dev/null +++ b/test-nsc/files/pos/bug81.scala @@ -0,0 +1,4 @@ +class A { + val b: A#B = new B; + class B {} +} diff --git a/test-nsc/files/pos/bug85.scala b/test-nsc/files/pos/bug85.scala new file mode 100644 index 0000000000..e018afb6ee --- /dev/null +++ b/test-nsc/files/pos/bug85.scala @@ -0,0 +1,8 @@ +object A { + case class B(c: C) { + class C; + } + class C; + val b: B = new B(new C()); + val c: C = b.c; +} diff --git a/test-nsc/files/pos/bug91.scala b/test-nsc/files/pos/bug91.scala new file mode 100755 index 0000000000..54c821b41c --- /dev/null +++ b/test-nsc/files/pos/bug91.scala @@ -0,0 +1,6 @@ +class Bug { + def main(args: Array[String]) = { + var msg: String = null; // no bug if "null" instead of "_" + val f: PartialFunction[Any, unit] = { case 42 => msg = "coucou" }; + } +} diff --git a/test-nsc/files/pos/bug93.scala b/test-nsc/files/pos/bug93.scala new file mode 100755 index 0000000000..d648d773b0 --- /dev/null +++ b/test-nsc/files/pos/bug93.scala @@ -0,0 +1,4 @@ +object Bug { + def f(cond: => Boolean) = while (cond == false) {}; + // no bug with "false == cond" +} diff --git a/test-nsc/files/pos/cls.scala b/test-nsc/files/pos/cls.scala new file mode 100755 index 0000000000..54104ae692 --- /dev/null +++ b/test-nsc/files/pos/cls.scala @@ -0,0 +1,17 @@ +import scala._; + +package scalac.util { + +class A[X1, X2](x1: X1, x2: X2) {} +class B[Y](y1: Y, y2: Y) extends A[Y, Y](y1, y2) { + def f(x: Y, xs: B[Y]): Unit = {} + def g() = f(y1, this); +} + +object test { + val b: B[Int] = new B[Int](1, 2); + val a: A[Int, Int] = b; + val a1 = new A(1, "hello"); + val b1 = new B(1, "hello"); +} +} \ No newline at end of file diff --git a/test-nsc/files/pos/cls1.scala b/test-nsc/files/pos/cls1.scala new file mode 100755 index 0000000000..20ac12d59a --- /dev/null +++ b/test-nsc/files/pos/cls1.scala @@ -0,0 +1,9 @@ +package test; + +trait A { + type T; + + trait B extends A { + type T = A.this.T; + } +} diff --git a/test-nsc/files/pos/clsrefine.scala b/test-nsc/files/pos/clsrefine.scala new file mode 100755 index 0000000000..d63923b5e6 --- /dev/null +++ b/test-nsc/files/pos/clsrefine.scala @@ -0,0 +1,40 @@ +import scala._; + +package scalac.util { + +trait A { + type X1; + type X2; + val x1: X1; + val x2: X2; +} +trait B extends A { + type Y; + val y1, y2: Y; + type X1 = Y; + type X2 = Y; + val x1 = y1; + val x2 = y2; + def f(x: Y, xs: B): Unit = {} + def g() = f(y1, this); +} + +object test { + val b: B { type Y = Int } = new B { + type Y = Int; + val y1, y2 = 1; + } + val a: A { type X1 = Int; type X2 = Int } = b; + val a1 = new A { + type X1 = Int; + type X2 = String; + val x1 = 1; + val x2 = "hello" + } + val b1 = new B { + type Y = Any; + val y1 = 1; + val y2 = "hello"; + } +} +} \ No newline at end of file diff --git a/test-nsc/files/pos/compile.scala b/test-nsc/files/pos/compile.scala new file mode 100644 index 0000000000..3ed733fd40 --- /dev/null +++ b/test-nsc/files/pos/compile.scala @@ -0,0 +1,150 @@ +//############################################################################ +// Compile Time Bugs & Test Cases +//############################################################################ +// $Id$ + +import java.lang.System; // to avoid name clash with .NET's library + +//############################################################################ +// Test 0 + +/* +class Test0Foo[X]; + +object Test0Test { + type Gen[A] = Test0Foo[A]; + class Tic(g: Test0Test.Gen[Int]); + class Tac(g: Gen[Int]); +} + +//############################################################################ +// Test 1 - Single types in lambda lift + +object Test1 { + def main(args: Array[String]): Unit = { + List[args.type](args); + } + def foo[X]: Any = { + def bar(x: X) = List(x); + 0 + } +} + +//############################################################################ +// Test 2 - Local variables owned by other local variables + +class Test2_1(i: Int) { + val t = { + val x = { + val y = { + val z = i; + z; + }; + }; + }; + val x = { + val y = { + val z = i; + z; + }; + }; + val y = { + val z = i; + z; + }; + val z2_1 = i; +} + +class Test2_2(i: Int) { + { + val t = { + val x = { + val y = { + val z = i; + z; + }; + }; + }; + val x = { + val y = { + val z = i; + z; + }; + }; + val y = { + val z = i; + z; + }; + val z2_2 = i; + 0 + } +} + +class Test2_3() { + + def this(i: Int) = { + this(); + val t = { + val x = { + val y = { + val z = i; + z; + }; + }; + }; + val x = { + val y = { + val z = i; + z; + }; + }; + val y = { + val z = i; + z; + }; + val z2_3 = i; + } + + def test(i: Int): Int = { + val t = { + val x = { + val y = { + val z = i; + z; + }; + }; + }; + val x = { + val y = { + val z = i; + z; + }; + }; + val y = { + val z = i; + z; + }; + val z_test = i; + 0 + } + +} +*/ +//############################################################################ +// Test 3 - Super Calls with Mixins + +class Test3Foo; + +trait Test3A[T] { + def fun: T = fun; +} + +class Test3B extends Test3A[Test3Foo]; + +trait Test3M extends Test3A[Test3Foo] { + override def fun: Test3Foo = super.fun; +} + +class Test3C extends Test3B with Test3M; + +//############################################################################ diff --git a/test-nsc/files/pos/compile1.scala b/test-nsc/files/pos/compile1.scala new file mode 100644 index 0000000000..3f06abbaa9 --- /dev/null +++ b/test-nsc/files/pos/compile1.scala @@ -0,0 +1,35 @@ +//############################################################################ +// Compile Time Bugs & Test Cases +//############################################################################ +// $Id$ + +import java.lang.System; // to avoid name clash with .NET's library + +//############################################################################ +// Test 0 + +class Test2_2(i: Int) { + { + val t = { + val x = { + val y = { + val z = i; + z; + }; + }; + }; + val x = { + val y = { + val z = i; + z; + }; + }; + val y = { + val z = i; + z; + }; + val z2_2 = i; + 0 + } +} + diff --git a/test-nsc/files/pos/compound.scala b/test-nsc/files/pos/compound.scala new file mode 100755 index 0000000000..60890f9102 --- /dev/null +++ b/test-nsc/files/pos/compound.scala @@ -0,0 +1,9 @@ +abstract class A { type T } + +abstract class B { val xz: Any } + +abstract class Test { + var yy: A with B { type T; val xz: T } = null; + var xx: A with B { type T; val xz: T } = null; + xx = yy; +} diff --git a/test-nsc/files/pos/constfold.scala b/test-nsc/files/pos/constfold.scala new file mode 100755 index 0000000000..2eb31b4086 --- /dev/null +++ b/test-nsc/files/pos/constfold.scala @@ -0,0 +1,14 @@ +object A { + val x = 2; + val y = x.asInstanceOf[byte]; + val z = 1.0 / 2; + val s = "z is " + z; +} + +object Test extends Application { + + System.out.println(A.x); + System.out.println(A.y); + System.out.println(A.z); + System.out.println(A.s); +} diff --git a/test-nsc/files/pos/context.scala b/test-nsc/files/pos/context.scala new file mode 100755 index 0000000000..ada6a57463 --- /dev/null +++ b/test-nsc/files/pos/context.scala @@ -0,0 +1,34 @@ +class Context { + object symwrap extends SymbolWrapper { + val context: Context.this.type = Context.this + } + object typewrap extends TypeWrapper { + val context: Context.this.type = Context.this + } + object symbols extends symwrap.Symbols; + object types extends typewrap.Types; +} + +abstract class SymbolWrapper { + val context: Context; + import context._; + + class Symbols: context.symbols.type { + abstract class Symbol { + def typ: types.Type; + def sym: Symbol = typ.sym; + } + } +} + +abstract class TypeWrapper { + val context: Context; + import context._; + + class Types: context.types.type { + abstract class Type { + def sym: symbols.Symbol; + def typ: Type = sym.typ; + } + } +} diff --git a/test-nsc/files/pos/eta.scala b/test-nsc/files/pos/eta.scala new file mode 100755 index 0000000000..7d862f67b1 --- /dev/null +++ b/test-nsc/files/pos/eta.scala @@ -0,0 +1,5 @@ +object test { + +def sum(f: Int => Int)(x: Int, y: Int): Int = 0; +def g = sum; +} \ No newline at end of file diff --git a/test-nsc/files/pos/exceptions.scala b/test-nsc/files/pos/exceptions.scala new file mode 100755 index 0000000000..819368244d --- /dev/null +++ b/test-nsc/files/pos/exceptions.scala @@ -0,0 +1,20 @@ +import java.io._; + +object Test { + + //def error[a](x: String):a = new java.lang.RuntimeException(x) throw; + + def main(args: Array[String]): Unit = { + try { + try { + System.out.println("hi!"); + error("xx"); + } finally { + System.out.println("ho!") + } + } catch { + case ex: IOException => System.out.println("io exception!"); + case ex => System.out.println(ex); + } + } +} diff --git a/test-nsc/files/pos/expressions-current.scala b/test-nsc/files/pos/expressions-current.scala new file mode 100755 index 0000000000..b343dbf68b --- /dev/null +++ b/test-nsc/files/pos/expressions-current.scala @@ -0,0 +1,63 @@ +package test; + +abstract class Lang { + trait Visitor { + def caseNum(n: int): unit; + } + + abstract class Exp { + def visit(v: visitor): unit; + } + + type visitor <: Visitor; + + class Num(n: int) extends Exp { + def visit(v: visitor): unit = v.caseNum(n); + } + + class Eval(result: Ref[int]): visitor extends Visitor { + def caseNum(n: int) = result.elem = n; + } +} + +abstract class Lang2 extends Lang { + trait Visitor2 extends Visitor { + def casePlus(left: Exp, right: Exp): unit; + } + + type visitor <: Visitor2; + + class Plus(l: Exp, r: Exp) extends Exp { + def visit(v: visitor): unit = v.casePlus(l, r); + } + + class Eval2(result: Ref[int]): visitor extends Eval(result) with Visitor2 { + def casePlus(l: Exp, r: Exp) = + result.elem = { l.visit(this); result.elem } + { r.visit(this); result.elem } + } + + class Show2(result: Ref[String]): visitor extends Visitor2 { + def caseNum(n: int) = result.elem = n.toString(); + def casePlus(l: Exp, r: Exp) = + result.elem = + "(" + { l.visit(this); result.elem } + + "+" + { r.visit(this); result.elem }+ ")"; + } +} + +object Main { + + def main(args: Array[String]) = { + object l1 extends Lang { type visitor = Visitor } + val e1: l1.Exp = new l1.Num(42); + + val iref = new Ref(0); + System.out.println("eval: " + { e1.visit(new l1.Eval(iref)); iref.elem }); + + object l2 extends Lang2 { type visitor = Visitor2 } + val e2: l2.Exp = new l2.Plus(new l2.Num(5), new l2.Num(37)); + val sref = new Ref(""); + System.out.println("eval: " + { e2.visit(new l2.Eval2(iref)); iref.elem }); + System.out.println("show: " + { e2.visit(new l2.Show2(sref)); sref.elem }); + } +} diff --git a/test-nsc/files/pos/failed.lst b/test-nsc/files/pos/failed.lst new file mode 100755 index 0000000000..b5b75eb35c --- /dev/null +++ b/test-nsc/files/pos/failed.lst @@ -0,0 +1,3 @@ +bug123.scala +exceptions.scala +context.scala diff --git a/test-nsc/files/pos/gui.scala b/test-nsc/files/pos/gui.scala new file mode 100755 index 0000000000..b40759fb01 --- /dev/null +++ b/test-nsc/files/pos/gui.scala @@ -0,0 +1,99 @@ +object Geom { + trait Shape; + case class Point(x: int, y: int) extends Shape; + case class Rectangle(ll: Point, ur: Point) extends Shape { + def inset(delta: int) = + Rectangle(Point(ll.x - delta, ll.y - delta), Point(ur.x + delta, ur.y + delta)); + } +} + +object Color { + type Color = int; + val black = 0x000000; + val grey = 0x808080; +} + +trait Screen { + type Color = int; + def drawRect(r: Geom.Rectangle, c: Color): unit; + def fillRect(r: Geom.Rectangle, c: Color): unit; +} + +object DummyScreen extends Screen { + def drawRect(r: Geom.Rectangle, c: Color): unit = + System.out.println("draw " + r + " with " + c); + def fillRect(r: Geom.Rectangle, c: Color): unit = + System.out.println("fill " + r + " with " + c); +} + +object GUI { + + object Controller { + def addMouseCtl(c: MouseCtl) = () + } + + trait Glyph { + def getRect: Geom.Rectangle; + def setLoc(p: Geom.Point): unit; + def draw() = System.out.println("draw " + this); + } + + class Label(scr: Screen, p: Geom.Point, name: String) extends Glyph { + private var origin = p; + def getRect = Geom.Rectangle(origin, origin).inset(10); + def setLoc(p: Geom.Point) = { origin = p } + } + + trait Ctl { + def getGlyph: Glyph; + def enable(b: Boolean): this.type; + } + + trait MouseCtl extends Ctl { + def mouseDown(p: Geom.Point): unit; + } + + abstract class Button(scr: Screen, p: Geom.Point, name: String) + extends Glyph with MouseCtl { + var enabled: boolean = false; + val label = new Label(scr, p, name); + + /* Glyph methods */ + override def draw(): unit = { + if (enabled) scr.drawRect(getRect, Color.black) + else scr.fillRect(getRect, Color.grey); + label.draw(); + } + def setLoc(p: Geom.Point) = label.setLoc(p); + def getRect = label.getRect.inset(-2); + + /* Ctl methods */ + def enable(b: boolean): this.type = { enabled = b; draw(); this } + def getGlyph = label; + final def mouseDown(p: Geom.Point): unit = + if (enabled) doit() else System.out.println("button is disabled"); + + /* deferred method to be specified by client */ + def doit(): unit; + } +} + +object GUIClient { + + class Application { + def quit() = System.out.println("application exited"); + } + + class QuitButton (scr: Screen, p: Geom.Point, name: String, a: Application) + extends GUI.Button(scr, p, name) { + def doit(): unit = a.quit(); + } + + def main(args: Array[String]) = { + val b = new QuitButton( + DummyScreen, Geom.Point(1, 1), "quit", new Application); + b.draw(); + b.enable(true).mouseDown(Geom.Point(1, 2)); + } +} + diff --git a/test-nsc/files/pos/imports.scala b/test-nsc/files/pos/imports.scala new file mode 100755 index 0000000000..65ea090436 --- /dev/null +++ b/test-nsc/files/pos/imports.scala @@ -0,0 +1,16 @@ +package test; + +import java.lang.{System => S} + +object test { + import S.out.{print => p, println => print} + + val foo = 1; + + p("hello"); print("world"); S.out.println("!"); + S.out.flush(); +} +object test1 { + import test._; + foo +} \ No newline at end of file diff --git a/test-nsc/files/pos/infer.scala b/test-nsc/files/pos/infer.scala new file mode 100755 index 0000000000..24871458b3 --- /dev/null +++ b/test-nsc/files/pos/infer.scala @@ -0,0 +1,11 @@ +object test { + class List[+a] { + def ::[b >: a](x: b): List[b] = new Cons(x, this); + } + case class Cons[a, b <: a](x: a, xs: List[b]) extends List[a]; + case object Nil extends List[All]; + def nil[n]: List[n] = Nil; + def cons[a](x: a, xs: List[a]): List[a] = null; + val x: List[Int] = Nil.::(1); + val y: List[Int] = nil.::(1); +} diff --git a/test-nsc/files/pos/infer2.scala b/test-nsc/files/pos/infer2.scala new file mode 100755 index 0000000000..66f3d76544 --- /dev/null +++ b/test-nsc/files/pos/infer2.scala @@ -0,0 +1,10 @@ +object test { + + def f[a, b <: a](x: b): a = x: a; + def g[a >: b, b](x: b): a = x: a; + + val x: int = f(1); + val y: String = g("") + +} + diff --git a/test-nsc/files/pos/lambda.scala b/test-nsc/files/pos/lambda.scala new file mode 100755 index 0000000000..187b3f9783 --- /dev/null +++ b/test-nsc/files/pos/lambda.scala @@ -0,0 +1,8 @@ +object test { + + def apply[a,b](f: a => b): a => b = x: a => f(x); + + def twice[a](f: a => a): a => a = x: a => f(f(x)); + + def main = apply[Int,Int](twice[Int](x: Int => x))(1); +} \ No newline at end of file diff --git a/test-nsc/files/pos/lambdalift.scala b/test-nsc/files/pos/lambdalift.scala new file mode 100755 index 0000000000..ae5799a6f8 --- /dev/null +++ b/test-nsc/files/pos/lambdalift.scala @@ -0,0 +1,15 @@ +import scala._; + +object test { + + def f(x: Int) = { + def g() = h(); + def h() = x; + g(); + class inner() { + def g() = h(); + def h() = x; + } + g() + new inner().g(); + } +} \ No newline at end of file diff --git a/test-nsc/files/pos/lambdalift1.scala b/test-nsc/files/pos/lambdalift1.scala new file mode 100755 index 0000000000..d9172f51eb --- /dev/null +++ b/test-nsc/files/pos/lambdalift1.scala @@ -0,0 +1,17 @@ +import scala._; + +object test { + + def f[a <: java.lang.Object](x: a) = { + def print() = java.lang.System.out.println(x); + class A() { + def g() = { + class B() { + def h() = print() + } + new B().h() + } + } + new A().g() + } +} \ No newline at end of file diff --git a/test-nsc/files/pos/localmodules.scala b/test-nsc/files/pos/localmodules.scala new file mode 100755 index 0000000000..8ed34f455a --- /dev/null +++ b/test-nsc/files/pos/localmodules.scala @@ -0,0 +1,22 @@ +package test; + +object main { + + class a { + + object b { + + trait c {} + def foo(x: c): c = { System.out.println("foo(" + x + ")"); x } + + } + + def bar(x: b.c): a.this.b.c = { b.foo(x); x } + } + + def main(args: Array[String]) = { + val aa = new a; + val xx: aa.b.c = null; + System.out.println(aa.bar(xx)); + } +} diff --git a/test-nsc/files/pos/matthias1.scala b/test-nsc/files/pos/matthias1.scala new file mode 100755 index 0000000000..a923a529fe --- /dev/null +++ b/test-nsc/files/pos/matthias1.scala @@ -0,0 +1,15 @@ +class A() { + class B() { + def foo(x: B) = 0 + } +} +object test { + def main = { + val a = new A(); + val b = new a.B(); + val c = new a.B(); + val d = b.foo(c); + () + } +} + diff --git a/test-nsc/files/pos/matthias3.scala b/test-nsc/files/pos/matthias3.scala new file mode 100755 index 0000000000..6e86afeca6 --- /dev/null +++ b/test-nsc/files/pos/matthias3.scala @@ -0,0 +1,13 @@ + +abstract class A() { + val y: A; +} +class B() extends A() { + val x = this; + val y: x.type = x; +} +abstract class C() { + val b: B = new B(); + val a: A { val y: b.type }; +} + diff --git a/test-nsc/files/pos/matthias4.scala b/test-nsc/files/pos/matthias4.scala new file mode 100755 index 0000000000..c6ce79d682 --- /dev/null +++ b/test-nsc/files/pos/matthias4.scala @@ -0,0 +1,84 @@ +/* +object A requires B { + B.X getX() { + return B.getX(); + } + void setX(B.X x) {} +} +object B { + class X {} + X getX() { + return new X(); + } + void setX(X x) {} +} +object C requires B { + object A; + void test() { + A.setX(B.getX()); + } +} +*/ + +trait _a extends Object with _b { + val a: _a; + val A: A; + type A <: a.AObject; + trait AObject { + def getX(): B.X; + def setX(x: B.X): Unit; + } +} +trait a123 extends Object with _a with _b { + val a: this.type = this; + val A: A = new A(); + class A() extends AObject { + def getX(): B.X = B.getX(); + def setX(x: B.X) = B.setX(x); + } +} + +trait _b { + val b: _b; + val B: B; + type B <: b.BObject; + trait BObject { + type X; + def getX(): X; + def setX(x: X): Unit; + } +} +abstract class b() extends Object with _b { + val b: this.type = this; + val B: B = new B(); + class B() extends BObject { + class X() {} + def getX(): X = new X(); + def setX(x: X) = (); + } +} + +trait _m { + val m: _m; + val M: M; + type M <: m.MObject; + trait MObject {} +} +abstract class m() extends Object with _m with _b { + val m: this.type = this; + val M: M = new M(); + class M() extends MObject with a123 with Linker { + def test() = { + val x: B.X = B.getX(); + A.setX(x); + } + } + trait Linker { + val b: m.this.b.type = m.this.b; + val B: m.this.B.type = m.this.B; + type B = m.this.B; + val m: m.this.m.type = m.this.m; + val M: m.this.M.type = m.this.M; + type M = m.this.M; + } +} diff --git a/test-nsc/files/pos/matthias5.scala b/test-nsc/files/pos/matthias5.scala new file mode 100755 index 0000000000..0dcb7f833d --- /dev/null +++ b/test-nsc/files/pos/matthias5.scala @@ -0,0 +1,12 @@ +abstract class A() { + val y: A; +} +class B() extends A() { + val x = this; + val y: x.type = x; +} +abstract class C() { + val b: B = new B(); + val a: A { val y: b.type }; +} + diff --git a/test-nsc/files/pos/maxim1.scala b/test-nsc/files/pos/maxim1.scala new file mode 100755 index 0000000000..58916beb8a --- /dev/null +++ b/test-nsc/files/pos/maxim1.scala @@ -0,0 +1,5 @@ +object test { + def f(x: Int)(y: Int) = x + y; + def y: Int => Int = f(2); + def main = y(1); +} diff --git a/test-nsc/files/pos/michel1.scala b/test-nsc/files/pos/michel1.scala new file mode 100755 index 0000000000..f930a682ef --- /dev/null +++ b/test-nsc/files/pos/michel1.scala @@ -0,0 +1,9 @@ +class A[Ta] (a : Ta) { + def f = 1 +} + +trait C {} + +class B[Tb] (b : Tb) extends A[Tb] (b) with C { + def g = 2 +} diff --git a/test-nsc/files/pos/michel2.scala b/test-nsc/files/pos/michel2.scala new file mode 100755 index 0000000000..e6976b0f40 --- /dev/null +++ b/test-nsc/files/pos/michel2.scala @@ -0,0 +1,16 @@ +object Test { + + trait A extends Object { + def f : Int = 1 + } + + class B extends Object with A { + override def f : Int = super[A].f + } + + def main(args: Array[String]) = + System.out.println(new B().f); +} + + + diff --git a/test-nsc/files/pos/michel3.scala b/test-nsc/files/pos/michel3.scala new file mode 100755 index 0000000000..0e85295bfb --- /dev/null +++ b/test-nsc/files/pos/michel3.scala @@ -0,0 +1,3 @@ +abstract class A() { + val v : Int +} \ No newline at end of file diff --git a/test-nsc/files/pos/michel4.scala b/test-nsc/files/pos/michel4.scala new file mode 100755 index 0000000000..2390be5d26 --- /dev/null +++ b/test-nsc/files/pos/michel4.scala @@ -0,0 +1,7 @@ +class A() { + val f : Int = 2 +} + +class B() extends A() { + override val f : Int = super.f +} \ No newline at end of file diff --git a/test-nsc/files/pos/michel5.scala b/test-nsc/files/pos/michel5.scala new file mode 100755 index 0000000000..345ae04d9d --- /dev/null +++ b/test-nsc/files/pos/michel5.scala @@ -0,0 +1,5 @@ +trait A[Ta] { } + +class B() extends Object with A[Int] { + val x : Int = 2 +} \ No newline at end of file diff --git a/test-nsc/files/pos/michel6.scala b/test-nsc/files/pos/michel6.scala new file mode 100755 index 0000000000..b32e8bed75 --- /dev/null +++ b/test-nsc/files/pos/michel6.scala @@ -0,0 +1,6 @@ +object M { + def f(x: Int): Unit = {} + + def g(): Int => Unit = + if (0 == 0) f else g() + } diff --git a/test-nsc/files/pos/mixins.scala b/test-nsc/files/pos/mixins.scala new file mode 100755 index 0000000000..2b403a25e8 --- /dev/null +++ b/test-nsc/files/pos/mixins.scala @@ -0,0 +1,22 @@ +package mixins; +abstract class Super { + def foo: int; +} +trait Mixin extends Super { + abstract override def foo = super.foo; +} +trait MixinSub extends Super with Mixin { + abstract override def foo: int = super.foo; +} +trait MixinSubSub extends MixinSub { + abstract override def foo = super.foo; +} +class Sub extends Super { + def foo: int = 1 +} +class Base extends Sub with MixinSubSub { + override def foo = super.foo; +} +trait Mixin1 extends Sub with MixinSubSub {} +class Base1 extends Mixin1 {} + diff --git a/test-nsc/files/pos/modules.scala b/test-nsc/files/pos/modules.scala new file mode 100755 index 0000000000..8168a42d3c --- /dev/null +++ b/test-nsc/files/pos/modules.scala @@ -0,0 +1,14 @@ +package scala { + + object a { + + object b { + + trait c {} + def foo(x: c): c = bar(x) + + } + + def bar(x: b.c): b.c = x + } +} diff --git a/test-nsc/files/pos/modules1.scala b/test-nsc/files/pos/modules1.scala new file mode 100755 index 0000000000..3da14af4fe --- /dev/null +++ b/test-nsc/files/pos/modules1.scala @@ -0,0 +1,14 @@ +package scala { + + object a { + + object b { + + trait c {} + def foo(x: c): c = bar(x) + + } + + def bar(x: b.c): a.b.c = { b.foo(x); x } + } +} diff --git a/test-nsc/files/pos/moduletrans.scala b/test-nsc/files/pos/moduletrans.scala new file mode 100755 index 0000000000..51538417ed --- /dev/null +++ b/test-nsc/files/pos/moduletrans.scala @@ -0,0 +1,8 @@ +object m1 { + + class m() { + def f() = 5 + } + final val m: m = new m() + +} diff --git a/test-nsc/files/pos/nested.scala b/test-nsc/files/pos/nested.scala new file mode 100755 index 0000000000..b038fce39d --- /dev/null +++ b/test-nsc/files/pos/nested.scala @@ -0,0 +1,29 @@ +// A non-trivial example of nested classes (mostly to test +// ExplicitOuterClasses). + +class A(pa : Int) { + def a1 = pa; + class B(pb : Int) { + def b1 = pa+pb+a1; + class C(pc : Int) extends A(b1) { + def c1 = pc+pb+pa + } + val c1 = new C(66) + } +} + +trait M { + val x : Int; + def m1 = x +} + +class A1(x0 : Int) extends A(x0) with M { + val x = x0; + class D() extends B(42) { + val c2 = new C(66); + class E() extends C(5) { + def e1 = c1+b1+a1; + def e2 = new D(); + } + } +} diff --git a/test-nsc/files/pos/null.scala b/test-nsc/files/pos/null.scala new file mode 100755 index 0000000000..59f88ee0e0 --- /dev/null +++ b/test-nsc/files/pos/null.scala @@ -0,0 +1,3 @@ +object M { + val x: Boolean = null == null; +} \ No newline at end of file diff --git a/test-nsc/files/pos/ok.lst b/test-nsc/files/pos/ok.lst new file mode 100755 index 0000000000..14184a7129 --- /dev/null +++ b/test-nsc/files/pos/ok.lst @@ -0,0 +1,138 @@ +304.scala +A.scala +List1.scala +MailBox.scala +S1.scala +S3.scala +S5.scala +S8.scala +X.scala +Z.scala +abstract.scala +aliases.scala +arrays2.scala +attributes.scala +bug082.scala +bug1.scala +bug115.scala +bug116.scala +bug119.scala +bug121.scala +bug124.scala +bug151.scala +bug159.scala +bug160.scala +bug17.scala +bug175.scala +bug177.scala +bug183.scala +bug193.scala +bug2.scala +bug20.scala +bug201.scala +bug204.scala +bug210.scala +bug211.scala +bug229.scala +bug245.scala +bug267.scala +bug287.scala +bug289.scala +bug29.scala +bug295.scala +bug30.scala +bug304.scala +bug31.scala +bug318.scala +bug32.scala +bug342.scala +bug348plus.scala +bug359.scala +bug36.scala +bug360.scala +bug361.scala +bug372.scala +bug39.scala +bug49.scala +bug53.scala +bug54.scala +bug61.scala +bug64.scala +bug66.scala +bug68.scala +bug69.scala +bug76.scala +bug81.scala +bug91.scala +bug93.scala +cls.scala +cls1.scala +clsrefine.scala +compile.scala +compound.scala +constfold.scala +eta.scala +expressions-current.scala +gui.scala +imports.scala +infer.scala +infer2.scala +lambda.scala +lambdalift.scala +lambdalift1.scala +localmodules.scala +matthias1.scala +matthias3.scala +matthias4.scala +matthias5.scala +maxim1.scala +michel1.scala +michel2.scala +michel3.scala +michel4.scala +michel5.scala +michel6.scala +mixins.scala +modules.scala +modules1.scala +moduletrans.scala +nested.scala +null.scala +orderedpoints.scala +override.scala +partialfun.scala +patterns.scala +patterns1.scala +patterns2.scala +patterns3.scala +philippe1.scala +philippe2.scala +philippe3.scala +philippe4.scala +pmbug.scala +propagate.scala +rebind.scala +refine.scala +reftest.scala +scoping1.scala +scoping2.scala +scoping3.scala +seqtest2.scala +simplelists.scala +stable.scala +strings.scala +test1.scala +test2.scala +test4.scala +test4a.scala +test4refine.scala +test5.scala +test5refine.scala +testcast.scala +thistype.scala +thistypes.scala +traits.scala +valdefs.scala +viewtest1.scala +viewtest2.scala +viewtest3.scala diff --git a/test-nsc/files/pos/orderedpoints.scala b/test-nsc/files/pos/orderedpoints.scala new file mode 100755 index 0000000000..7e56a663fe --- /dev/null +++ b/test-nsc/files/pos/orderedpoints.scala @@ -0,0 +1,30 @@ +package test; + +class Point1(x: int) extends Object with Ordered[Point1] { + val xCoord = x; + def compareTo [b >: Point1 <% Ordered[b]](that: b): int = that match { + case that1: Point1 => this.xCoord.compareTo(that1.xCoord) + case _ => -that.compareTo(this) + } +} +class Point2(x: int, y: int) extends Point1(x) with Ordered[Point2] {} +/* + val yCoord = y; + override def compareTo [b >: Point2 <% Ordered[b]](that: b): int = that match { + case that1: Point2 => + val r = super.compareTo(that1); + if (r == 0) this.yCoord.compareTo(that1.yCoord) else r + case _ => -that.compareTo(this) + } +} +object Test extends Application { + val p1 = new Point1(1); + val q1 = new Point1(2); + System.out.println(p1 < q1); + val p2 = new Point2(1, 2); + val q2 = new Point2(1, 3); + System.out.println(p2 < q2); + System.out.println(p1 < q2); + System.out.println(p2 < q1); +} +*/ diff --git a/test-nsc/files/pos/override.scala b/test-nsc/files/pos/override.scala new file mode 100755 index 0000000000..9f068b8ecd --- /dev/null +++ b/test-nsc/files/pos/override.scala @@ -0,0 +1,14 @@ +trait A extends Object { + def f = 1; + val x: A; +} + +trait B extends Object { + def f = 2; +} + +trait C extends Object with A with B { + override def f = super[B].f; + val a: A; + val x: a.type = a; +} diff --git a/test-nsc/files/pos/partialfun.scala b/test-nsc/files/pos/partialfun.scala new file mode 100755 index 0000000000..21e4d0a096 --- /dev/null +++ b/test-nsc/files/pos/partialfun.scala @@ -0,0 +1,10 @@ +object partialfun { + + def applyPartial[b](f: PartialFunction[Option[String], b])(x: Option[String]) = + if (f.isDefinedAt(x)) f(x) else ""; + + applyPartial { + case Some(xxx) => xxx + } (None); + +} \ No newline at end of file diff --git a/test-nsc/files/pos/patterns.scala b/test-nsc/files/pos/patterns.scala new file mode 100755 index 0000000000..93907e7d52 --- /dev/null +++ b/test-nsc/files/pos/patterns.scala @@ -0,0 +1,27 @@ +trait Option[+a] {} +case class Some[a](x: a) extends Option[a] { + override def toString(): String = "Some(" + x + ")"; + override def equals(that: Any): Boolean = that match { + case Some(x) => this.x == x + case _ => false + } + override def hashCode(): scala.Int = getClass().hashCode() * 41 + x.hashCode(); +} +case object None extends Option[All] { + override def toString(): String = "None"; + override def equals(that: Any) = that match { + case None => true + case _ => false + } + override def hashCode(): scala.Int = getClass().hashCode(); +} + +object test { + + def println(str: String): Unit = java.lang.System.out.println(str); + + def print(opt: Option[String]) = opt match { + case Some(x) => println(x); + case None => println("nothing"); + } +} diff --git a/test-nsc/files/pos/patterns1.scala b/test-nsc/files/pos/patterns1.scala new file mode 100755 index 0000000000..fa542e7b06 --- /dev/null +++ b/test-nsc/files/pos/patterns1.scala @@ -0,0 +1,13 @@ +trait Option[+a] {} +case class Some[a](x: a) extends Option[a]; +case object None extends Option[All]; + +object test { + + def println(str: String): Unit = java.lang.System.out.println(str); + + def print(opt: Option[String]) = opt match { + case Some(x) => println(x); + case None => println("nothing"); + } +} \ No newline at end of file diff --git a/test-nsc/files/pos/patterns2.scala b/test-nsc/files/pos/patterns2.scala new file mode 100755 index 0000000000..93dcedbcf8 --- /dev/null +++ b/test-nsc/files/pos/patterns2.scala @@ -0,0 +1,16 @@ +trait Option {} +case class Choice(a: Option, b: Option) extends Option; +case class Some(x: java.lang.String) extends Option; +case object None extends Option; + +object test { + + def f(opt: Option) = opt match { + case Choice(Some("one"), Some(x)) => 1; + case Choice(Some("two"), None) => 1; + case Choice(y, Some("two")) => 2; + case Choice(Some(z), a) => 3; + case Some(b) => 4; + case None => 5; + } +} \ No newline at end of file diff --git a/test-nsc/files/pos/patterns3.scala b/test-nsc/files/pos/patterns3.scala new file mode 100755 index 0000000000..001bd8989f --- /dev/null +++ b/test-nsc/files/pos/patterns3.scala @@ -0,0 +1,5 @@ +object M { + + val Tuple2(Tuple2(x, y), _) = Tuple2(Tuple2(1, 2), 3); + +} diff --git a/test-nsc/files/pos/philippe1.scala b/test-nsc/files/pos/philippe1.scala new file mode 100755 index 0000000000..3cace0e116 --- /dev/null +++ b/test-nsc/files/pos/philippe1.scala @@ -0,0 +1,8 @@ +object test { + def id[a](xs: Array[a]): Array[a] = xs; + + def main(args: Array[String]): Unit = { + val res: Array[String] = id(args); + () + } +} \ No newline at end of file diff --git a/test-nsc/files/pos/philippe2.scala b/test-nsc/files/pos/philippe2.scala new file mode 100755 index 0000000000..0dc896ebfd --- /dev/null +++ b/test-nsc/files/pos/philippe2.scala @@ -0,0 +1,7 @@ + +import scala._; +class m1() { + def n() = 0; + def foo(i: Int)(j: Int): Unit = (); + val bar = foo(n()); +} diff --git a/test-nsc/files/pos/philippe3.scala b/test-nsc/files/pos/philippe3.scala new file mode 100755 index 0000000000..9442583997 --- /dev/null +++ b/test-nsc/files/pos/philippe3.scala @@ -0,0 +1,40 @@ + +class Foo(x: Int) {} +case class Bar(y: Int) extends Foo(y); + + +trait T {} +trait U {} +class C() {} + + +trait T1; +trait T2 {} +trait T5 extends T; +trait T6 extends T {} +trait T7 extends T with U; +trait T8 extends T with U {} + +class C1(); +class C2() {} +class C5() extends C(); +class C6() extends C() {} +class C7() extends C() with U; +class C8() extends C() with U {} + +case class D1(); +case class D2() {} +case class D5() extends C(); +case class D6() extends C() {} +case class D7() extends C() with U; +case class D8() extends C() with U {} + +object M1; +object M2 {} +object M5 extends C(); +object M6 extends C() {} +object M7 extends C() with U; +object M8 extends C() with U {} + + + diff --git a/test-nsc/files/pos/philippe4.scala b/test-nsc/files/pos/philippe4.scala new file mode 100755 index 0000000000..c9b1cdaeb0 --- /dev/null +++ b/test-nsc/files/pos/philippe4.scala @@ -0,0 +1,3 @@ +trait Foo[t <: Foo[t]]: t { + def foo(that: t): Boolean; +} diff --git a/test-nsc/files/pos/pmbug.scala b/test-nsc/files/pos/pmbug.scala new file mode 100755 index 0000000000..7d94e7a8bd --- /dev/null +++ b/test-nsc/files/pos/pmbug.scala @@ -0,0 +1,8 @@ +object Test { + + def flatten[a](l: List[List[a]]): List[a] = l match { + case Nil => Nil + case head :: tail => head ::: flatten(tail) + } + +} diff --git a/test-nsc/files/pos/propagate.scala b/test-nsc/files/pos/propagate.scala new file mode 100755 index 0000000000..84f4f5d6d2 --- /dev/null +++ b/test-nsc/files/pos/propagate.scala @@ -0,0 +1,17 @@ +class C { + + def f[a](x: a): a = { + + class D() { + def g(x: a) = f(x): a; + } + + new D().g(x); + + } + +} + + + + diff --git a/test-nsc/files/pos/rebind.scala b/test-nsc/files/pos/rebind.scala new file mode 100755 index 0000000000..3b7b27ac34 --- /dev/null +++ b/test-nsc/files/pos/rebind.scala @@ -0,0 +1,13 @@ +abstract class Foo { + class Inner { + def inner: int = 1; + } + def foo: Inner; +} +trait Bar { + type Inner; + def foo: Inner = foo; +} +class Test extends Foo with Bar { + System.out.println(foo.inner); +} diff --git a/test-nsc/files/pos/refine.scala b/test-nsc/files/pos/refine.scala new file mode 100755 index 0000000000..255621ad43 --- /dev/null +++ b/test-nsc/files/pos/refine.scala @@ -0,0 +1,6 @@ +object test { + + val x: Object { def toString(): String } = new Object { + override def toString(): String = "1"; + } +} diff --git a/test-nsc/files/pos/reftest.scala b/test-nsc/files/pos/reftest.scala new file mode 100755 index 0000000000..f709f70897 --- /dev/null +++ b/test-nsc/files/pos/reftest.scala @@ -0,0 +1,4 @@ +import scala._; +object test { + val x: Ref[Int] = new Ref(1); +} \ No newline at end of file diff --git a/test-nsc/files/pos/scall.bat b/test-nsc/files/pos/scall.bat new file mode 100755 index 0000000000..4e9f31425e --- /dev/null +++ b/test-nsc/files/pos/scall.bat @@ -0,0 +1,50 @@ +scalac -prompt A.scala; +scalac -prompt IntSet.scala; +scalac -prompt List1.scala; +scalac -prompt Rational.scala; +scalac -prompt X.scala; +scalac -prompt Y.scala; +scalac -prompt Z.scala; +scalac -prompt abstract.scala; +scalac -prompt cls.scala; +scalac -prompt cls1.scala; +scalac -prompt clsrefine.scala; +scalac -prompt cours1.scala; +scalac -prompt cours2.scala; +scalac -prompt cours2a.scala; +scalac -prompt cours2b.scala; +scalac -prompt cours2c.scala; +scalac -prompt eta.scala; +scalac -prompt exceptions.scala; +scalac -prompt imports.scala; +scalac -prompt lambda.scala; +scalac -prompt lambdalift.scala; +scalac -prompt lambdalift1.scala; +scalac -prompt matthias1.scala; +scalac -prompt maxim1.scala; +scalac -prompt michel1.scala; +scalac -prompt michel2.scala; +scalac -prompt michel3.scala; +scalac -prompt michel4.scala; +scalac -prompt michel5.scala; +scalac -prompt modules.scala; +scalac -prompt modules1.scala; +scalac -prompt moduletrans.scala; +scalac -prompt nested.scala; +scalac -prompt override.scala; +scalac -prompt patterns.scala; +scalac -prompt patterns2.scala; +scalac -prompt philippe1.scala; +scalac -prompt philippe2.scala; +scalac -prompt reftest.scala; +scalac -prompt sort1.scala; +scalac -prompt sqrt.scala; +scalac -prompt stable.scala; +scalac -prompt strings.scala; +scalac -prompt test1.scala; +scalac -prompt test2.scala; +scalac -prompt test4.scala; +scalac -prompt test4a.scala; +scalac -prompt test4refine.scala; +scalac -prompt test5.scala; +scalac -prompt test5refine.scala; diff --git a/test-nsc/files/pos/scoping1.scala b/test-nsc/files/pos/scoping1.scala new file mode 100755 index 0000000000..23daf024fe --- /dev/null +++ b/test-nsc/files/pos/scoping1.scala @@ -0,0 +1,12 @@ +object This extends Application { + trait A { + def foo(): unit; + } + class C: A { + def bar() = this.foo(); + } + class D extends C with A { + def foo() = () + } + val c: C = new D; +} diff --git a/test-nsc/files/pos/scoping2.scala b/test-nsc/files/pos/scoping2.scala new file mode 100755 index 0000000000..39f3ef5f0e --- /dev/null +++ b/test-nsc/files/pos/scoping2.scala @@ -0,0 +1,14 @@ +object That { + trait A { + type T <: I; + trait I {} + } + trait B { + type T <: J; + trait J {} + } + trait C extends A with B { + type T <: I with J; + } +} + diff --git a/test-nsc/files/pos/scoping3.scala b/test-nsc/files/pos/scoping3.scala new file mode 100755 index 0000000000..4ebc7f6378 --- /dev/null +++ b/test-nsc/files/pos/scoping3.scala @@ -0,0 +1,20 @@ +object CI { + trait TreeDisplay { + type TreeNode <: ITreeNode; + trait ITreeNode { + def display(): unit; + } + } + trait TreeDisplayExp { + def getRoot(): TreeNode; + type TreeNode <: ITreeNodeExp; + trait ITreeNodeExp {} + } + trait TreeDisplayFinal extends TreeDisplay with TreeDisplayExp { + type TreeNode <: ITreeNode with ITreeNodeExp; + } + abstract class SimpleTreeDisplay: TreeDisplayFinal extends +TreeDisplay { + def display() = { this.getRoot().display(); } + } +} diff --git a/test-nsc/files/pos/seqtest2.scala b/test-nsc/files/pos/seqtest2.scala new file mode 100755 index 0000000000..903b270c95 --- /dev/null +++ b/test-nsc/files/pos/seqtest2.scala @@ -0,0 +1,13 @@ +object test { + + val b = List(1, 2, 3); + + def main(args: Array[String]) = + System.out.println( + b match { + case List(1, 2, 3) => true; + case _ => false; + } + ) + +} diff --git a/test-nsc/files/pos/simplelists.scala b/test-nsc/files/pos/simplelists.scala new file mode 100755 index 0000000000..73b04a8762 --- /dev/null +++ b/test-nsc/files/pos/simplelists.scala @@ -0,0 +1,17 @@ + abstract class List[+a] { + def head: a; + def tail: List[a]; + def cons[b >: a](x: b): List[b] = new Cons[b, a](x, this); + } + + object Nil extends List[All] { + def error(msg: String): All = throw new java.lang.Error(msg); + def head: All = error("Nil.head"); + def tail: List[All] = error("Nil.tail"); + } + + class Cons[c, d <: c](x: c, xs: List[d]) extends List[c] { + def head: c = x; + def tail: List[c] = xs; + } + diff --git a/test-nsc/files/pos/stable.scala b/test-nsc/files/pos/stable.scala new file mode 100755 index 0000000000..267a36fe5c --- /dev/null +++ b/test-nsc/files/pos/stable.scala @@ -0,0 +1,11 @@ +trait Base { + val x: Int; + val y: Int; + var z: Int; +} + +class Sub() extends Base { + val x: Int = 1; + val y: Int = 2; + var z: Int = 3; +} diff --git a/test-nsc/files/pos/strings.scala b/test-nsc/files/pos/strings.scala new file mode 100755 index 0000000000..3bf40e3dda --- /dev/null +++ b/test-nsc/files/pos/strings.scala @@ -0,0 +1,6 @@ +// martin 1-3-2002: it seems there is a problem with the way Serializable is loaded. +object test { + + def f() = "hello".concat("world"); + +} diff --git a/test-nsc/files/pos/test1.scala b/test-nsc/files/pos/test1.scala new file mode 100755 index 0000000000..a36d2436ec --- /dev/null +++ b/test-nsc/files/pos/test1.scala @@ -0,0 +1,5 @@ +object test { + + def f() = 5; + +} diff --git a/test-nsc/files/pos/test2.scala b/test-nsc/files/pos/test2.scala new file mode 100755 index 0000000000..fe36d07f1b --- /dev/null +++ b/test-nsc/files/pos/test2.scala @@ -0,0 +1,5 @@ +import scala._; +object test2 { + def f(x: Int): Int = 'a'; + def g(x: Int) = f(f(x)); +} \ No newline at end of file diff --git a/test-nsc/files/pos/test4.scala b/test-nsc/files/pos/test4.scala new file mode 100755 index 0000000000..4fe65a8f19 --- /dev/null +++ b/test-nsc/files/pos/test4.scala @@ -0,0 +1,47 @@ +package test; + +trait C {} +trait D {} +trait E {} + +object test { + def c: C = c; + def d: D = d; + def e: E = e; +} + +import test._; + +trait S extends ooo.I[D] { + def bar: E = foo(c,d); +} + +class O[X]() { + trait I[Y] { + def foo(x: X, y: Y): E = e; + } + val i:I[E] = null; + val j:I[X] = null; +} + +object ooo extends O[C]() { + + def main = { + val s: S = null; + import s._; + foo(c,d); + ooo.i.foo(c,e); + ooo.j.foo(c,c); + bar + } +} + +class Main() { + val s: S = null; + import s._; + foo(c,d); + ooo.i.foo(c,e); + ooo.j.foo(c,c); + bar; +} + diff --git a/test-nsc/files/pos/test4a.scala b/test-nsc/files/pos/test4a.scala new file mode 100755 index 0000000000..ada0ba4e5f --- /dev/null +++ b/test-nsc/files/pos/test4a.scala @@ -0,0 +1,16 @@ +trait C {} + +class O[X]() { + trait I[Y] { + def foo(y: Y): Y = y; + } + val j:I[X] = null; +} + +object o extends O[C]() { + def c: C = c; + def main = { + o.j.foo(c); + } +} + diff --git a/test-nsc/files/pos/test4refine.scala b/test-nsc/files/pos/test4refine.scala new file mode 100755 index 0000000000..6710962934 --- /dev/null +++ b/test-nsc/files/pos/test4refine.scala @@ -0,0 +1,49 @@ +trait C {} +trait D {} +trait E {} + +object test { + def c: C = c; + def d: D = d; + def e: E = e; +} + +import test._; + +trait S extends o.I { + type Y = D; + def bar: E = foo(c,d); +} + +abstract class O() { + type X; + abstract trait I { + type Y; + def foo(x: X, y: Y): E = e; + } + val i:I { type Y = E } = null; + val j:I { type Y = X } = null; +} + +object o extends O() { + type X = C; + + def main = { + val s: S = null; + import s._; + foo(c,d); + o.i.foo(c,e); + o.j.foo(c,c); + bar + } +} + +class Main() { + val s: S = null; + import s._; + foo(c,d); + o.i.foo(c,e); + o.j.foo(c,c); + bar; +} + diff --git a/test-nsc/files/pos/test5.scala b/test-nsc/files/pos/test5.scala new file mode 100755 index 0000000000..4dbafc9ac3 --- /dev/null +++ b/test-nsc/files/pos/test5.scala @@ -0,0 +1,68 @@ +import scala._; + +object test { + + trait F[If] {} + + def f[Jf](h: Jf):F[Jf] = f[Jf](h); + + trait G[Ig] {} + + def g[Jg](h: Jg):G[Jg] = g[Jg](h); + + class M[P]() { + abstract class I[X]() { + // Methods to check the type X and P as seen from instances of I + def chk_ix(x: X): Unit = (); + def chk_ip(p: P): Unit; + + // Value with type X as seen from instances of I + def val_ix: X = val_ix; + } + + val i:I[G[P]] = null; + + // Values with types P and i.X as seen from instances of M + def val_mp: P = val_mp; + def val_mix: G[P] = g[P](val_mp); + } + + class N[Q]() extends M[F[Q]]() { + val j:J[G[Q]] = null; + + abstract class J[Y]() extends I[G[Y]]() { + // Values with types Y and X as seen from instances of J + def val_jy: Y = val_jy; + def val_jx: G[Y] = g[Y](val_jy); + + // Check type P + chk_ip(val_mp); + chk_ip(val_np); + } + + // Values with types Q, X.P, i.X, j.Y and j.X as seen from instances of N + def val_nq: Q = val_nq; + def val_np: F[Q] = f[Q](val_nq); + def val_nix: G[F[Q]] = g[F[Q]](val_np); + def val_njy: G[Q] = g[Q](val_nq); + def val_njx: G[G[Q]] = g[G[Q]](val_njy); + + // Check type i.P + i.chk_ip(val_mp); + i.chk_ip(val_np); + + // Check type j.P + j.chk_ip(val_mp); + j.chk_ip(val_np); + + // Check type i.X + i.chk_ix(i.val_ix); + i.chk_ix(val_mix); + i.chk_ix(val_nix); + + // Check j.X + j.chk_ix(j.val_ix); + j.chk_ix(j.val_jx); + j.chk_ix(val_njx); + } +} diff --git a/test-nsc/files/pos/test5refine.scala b/test-nsc/files/pos/test5refine.scala new file mode 100755 index 0000000000..95670faa05 --- /dev/null +++ b/test-nsc/files/pos/test5refine.scala @@ -0,0 +1,75 @@ +import scala._; + +object test { + + abstract trait F { type If; } + + def f[Jf](h: Jf):F { type If = Jf } = f[Jf](h); + + abstract trait G { type Ig; } + + def g[Jg](h: Jg):G { type Ig = Jg } = g[Jg](h); + + abstract class M() { + type P; + abstract class I() { + type X; + + // Methods to check the type X and P as seen from instances of I + def chk_ix(x: X): Unit = {} + def chk_ip(p: P): Unit = {} + + // Value with type X as seen from instances of I + def val_ix: X = val_ix; + } + + val i: I { type X = G { type Ig = P } } = null; + + // Values with types P and i.X as seen from instances of M + def val_mp: P = val_mp; + def val_mix: G { type Ig = P } = g[P](val_mp); + } + + abstract class N() extends M() { + type Q; + type P = F { type If = Q }; + val j:J { type Y = G { type Ig = Q } } = null; + + abstract class J() extends I() { + type Y; + type X = G { type Ig = Y; }; + // Values with types Y and X as seen from instances of J + def val_jy: Y = val_jy; + def val_jx: G { type Ig = Y; } = g[Y](val_jy); + + // Check type P + chk_ip(val_mp); + chk_ip(val_np); + } + + // Values with types Q, X.P, i.X, j.Y and j.X as seen from instances of N + def val_nq: Q = val_nq; + def val_np: F { type If = Q } = f[Q](val_nq); + def val_nix: G { type Ig = F { type If = Q } } = g[F { type If = Q }](val_np); + def val_njy: G { type Ig = Q; } = g[Q](val_nq); + def val_njx: G { type Ig = G { type Ig = Q }} = g[G { type Ig = Q; }](val_njy); + + // Check type i.P + i.chk_ip(val_mp); + i.chk_ip(val_np); + + // Check type j.P + j.chk_ip(val_mp); + j.chk_ip(val_np); + + // Check type i.X + i.chk_ix(i.val_ix); + i.chk_ix(val_mix); + i.chk_ix(val_nix); + + // Check j.X + j.chk_ix(j.val_ix); + j.chk_ix(j.val_jx); + j.chk_ix(val_njx); + } +} \ No newline at end of file diff --git a/test-nsc/files/pos/testcast.scala b/test-nsc/files/pos/testcast.scala new file mode 100755 index 0000000000..631b2c922b --- /dev/null +++ b/test-nsc/files/pos/testcast.scala @@ -0,0 +1,26 @@ +package test; + +class A; + +class B extends A { + def foo: int = 1; +} + +object B { + def view(x: B): B1 = null; +} + +class B1 { + def bar: int = 1 +} + +object C { + implicit def view(x: A): B1 = null; +} +object Test { + import C.view; + + val b: B = null; + + System.out.println(b.bar); +} diff --git a/test-nsc/files/pos/thistype.scala b/test-nsc/files/pos/thistype.scala new file mode 100755 index 0000000000..8c0ba209be --- /dev/null +++ b/test-nsc/files/pos/thistype.scala @@ -0,0 +1,14 @@ +object Test { + + class Ctl { + def enable: this.type = { System.out.println("enable"); this } + } + + class MouseCtl extends Ctl { + def mouseDown(x: int, y: int): unit = { System.out.println("mouse down"); } + } + + def main(args: Array[String]) = + new MouseCtl().enable.mouseDown(1, 2); + +} diff --git a/test-nsc/files/pos/thistypes.scala b/test-nsc/files/pos/thistypes.scala new file mode 100755 index 0000000000..4a68ba3e65 --- /dev/null +++ b/test-nsc/files/pos/thistypes.scala @@ -0,0 +1,8 @@ +trait B { + trait I {} + def foo: B.this.I; +} + +trait C extends B { + def foo: C.this.I; +} \ No newline at end of file diff --git a/test-nsc/files/pos/traits.scala b/test-nsc/files/pos/traits.scala new file mode 100755 index 0000000000..5fdf4b342e --- /dev/null +++ b/test-nsc/files/pos/traits.scala @@ -0,0 +1,42 @@ +object Test { + type Color = int; + trait Shape { + override def equals(other: Any) = true; + } + trait Bordered extends Shape { + val thickness: int; + override def equals(other: Any) = other match { + case that: Bordered => this.thickness == that.thickness; + case _ => false + } + } + trait Colored extends Shape { + val color: Color; + override def equals(other: Any) = other match { + case that: Colored => this.color == that.color; + case _ => false + } + } + trait BorderedColoredShape extends Shape with Bordered with Colored { + override def equals(other: Any) = other match { + case that: BorderedColoredShape => + super.equals(that) && + super[Bordered].equals(that) && + super[Colored].equals(that) + case _ => false + } + } + + val bcs1 = new BorderedColoredShape { + val thickness = 1; + val color = 0; + } + val bcs2 = new BorderedColoredShape { + val thickness = 2; + val color = 0; + } + System.out.println(bcs1 == bcs1); + System.out.println(bcs1 == bcs2); +} + + diff --git a/test-nsc/files/pos/valdefs.scala b/test-nsc/files/pos/valdefs.scala new file mode 100755 index 0000000000..85ffa132b7 --- /dev/null +++ b/test-nsc/files/pos/valdefs.scala @@ -0,0 +1,16 @@ +object test { + + abstract class Base() { + val x: String; + val y = 1.0; + } + + case class Sub() extends Base() { + val x = "hello"; + override val y = 2.0; + } + + abstract class Sub2() extends Base() { + override val Pair(x, y) = Pair("abc", 2.0); + } +} diff --git a/test-nsc/files/pos/viewtest1.scala b/test-nsc/files/pos/viewtest1.scala new file mode 100755 index 0000000000..0a59fdad58 --- /dev/null +++ b/test-nsc/files/pos/viewtest1.scala @@ -0,0 +1,41 @@ +package test; + +trait Ordered[a] { + def < (x: a): boolean; +} + +object O { + implicit def view (x: String): Ordered[String] = new Ordered[String] { + def < (y: String) = x.compareTo(y) < 0; + } +} + +object Empty extends Tree[All]; +case class Node[c <% Ordered[c]](elem: c, l: Tree[c], r: Tree[c]) extends Tree[c]; + +trait Tree[+a <% Ordered[a]] { + def insert[b >: a <% Ordered[b]](x: b): Tree[b] = this match { + case Empty => new Node(x, Empty, Empty) + case Node(elem, l, r) => + if (x == elem) this + else if (x < elem) Node(elem, l insert x, r) + else Node(elem, l, r insert x); + } + def elements: List[a] = this match { + case Empty => List() + case Node(elem, l, r) => + l.elements ::: List(elem) ::: r.elements + } +} + +object Test { + import O.view; + + def main(args: Array[String]) = { + var t: Tree[String] = Empty; + for (val s <- args) { + t = t insert s + } + System.out.println(t.elements) + } +} diff --git a/test-nsc/files/pos/viewtest2.scala b/test-nsc/files/pos/viewtest2.scala new file mode 100755 index 0000000000..1958696c1f --- /dev/null +++ b/test-nsc/files/pos/viewtest2.scala @@ -0,0 +1,117 @@ +package test; + +/** A trait for totally ordered data. + */ +trait Ordered[+a] { + + /** Result of comparing `this' with operand `that'. + * returns `x' where + * x < 0 iff this < that + * x == 0 iff this == that + * x > 0 iff this > that + */ + def compareTo [b >: a <% Ordered[b]](that: b): int; + + def < [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) < 0; + + def > [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) > 0; + + def <= [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) <= 0; + + def >= [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) >= 0; +} + + +object O { + + implicit def view1(x: String): Ordered[String] = new Ordered[String] { + def compareTo [b >: String <% Ordered[b]](y: b): int = y match { + case y1: String => x compareTo y1; + case _ => -(y compareTo x) + } + } + implicit def view2(x: char): Ordered[char] = new Ordered[char] { + def compareTo [b >: char <% Ordered[b]](y: b): int = y match { + case y1: char => x - y1; + case _ => -(y compareTo x) + } + } + + implicit def view3[a <% Ordered[a]](x: List[a]): Ordered[List[a]] = + new Ordered[List[a]] { + def compareTo [b >: List[a] <% Ordered[b]](y: b): int = y match { + case y1: List[a] => compareLists(x, y1); + case _ => -(y compareTo x) + } + private def compareLists(xs: List[a], ys: List[a]): int = { + if (xs.isEmpty && ys.isEmpty) 0 + else if (xs.isEmpty) -1 + else if (ys.isEmpty) 1 + else { + val s = xs.head compareTo ys.head; + if (s != 0) s + else compareLists(xs.tail, ys.tail) + } + } + } + + implicit def view4[a](x: a): a = x; +} + +trait Tree[+a <% Ordered[a]] { + def insert[b >: a <% Ordered[b]](x: b): Tree[b]; + def elements: List[a] +} + +object Empty extends Tree[All] { + def insert[b >: All <% Ordered[b]](x: b): Tree[b] = new Node(x, Empty, Empty); + def elements: List[All] = List(); +} + +class Node[a <% Ordered[a]](elem: a, l: Tree[a], r: Tree[a]) extends Tree[a] { + def insert[b >: a <% Ordered[b]](x: b): Tree[b] = + if (x == elem) this + else if (x < elem) new Node(elem, l insert x, r) + else new Node(elem, l, r insert x); + def elements: List[a] = + l.elements ::: List(elem) ::: r.elements +} + +case class Str(elem: String) extends Ordered[Str] { + def compareTo[b >: Str <% Ordered[b]](that: b): int = that match { + case that1: Str => this.elem compareTo that1.elem + case _ => -(that compareTo this) + } +} + +object Test { + import O._; + + private def toCharList(s: String): List[Char] = + if (s.length() == 0) List() + else s.charAt(0) :: toCharList(s.substring(1)); + + def main(args: Array[String]) = { + { + var t: Tree[String] = Empty; + for (val s <- args) { + t = t insert s + } + System.out.println(t.elements) + } + { + var t: Tree[Str] = Empty; + for (val s <- args) { + t = t insert Str(s) + } + System.out.println(t.elements) + } + { + var t: Tree[List[char]] = Empty; + for (val s <- args) { + t = t insert toCharList(s) + } + System.out.println(t.elements) + } + } +} diff --git a/test-nsc/files/pos/viewtest3.scala b/test-nsc/files/pos/viewtest3.scala new file mode 100755 index 0000000000..89e32e48a8 --- /dev/null +++ b/test-nsc/files/pos/viewtest3.scala @@ -0,0 +1,59 @@ +package testview; + +trait Tree[+a <% Ordered[a]] { + def insert[b >: a <% Ordered[b]](x: b): Tree[b]; + def elements: List[a] +} + +object Empty extends Tree[All] { + def insert[b >: All <% Ordered[b]](x: b): Tree[b] = new Node(x, Empty, Empty); + def elements: List[All] = List(); +} + +class Node[a <% Ordered[a]](elem: a, l: Tree[a], r: Tree[a]) extends Tree[a] { + def insert[b >: a <% Ordered[b]](x: b): Tree[b] = + if (x == elem) this + else if (x < elem) new Node(elem, l insert x, r) + else new Node(elem, l, r insert x); + def elements: List[a] = + l.elements ::: List(elem) ::: r.elements +} + +case class Str(elem: String) extends Ordered[Str] { + def compareTo[b >: Str <% Ordered[b]](that: b): int = that match { + case that1: Str => this.elem compareTo that1.elem + case _ => -(that compareTo this) + } +} + +object Test { +// import O.view; + + private def toCharList(s: String): List[Char] = + if (s.length() == 0) List() + else s.charAt(0) :: toCharList(s.substring(1)); + + def main(args: Array[String]) = { + { + var t: Tree[String] = Empty; + for (val s <- args) { + t = t insert s + } + System.out.println(t.elements) + } + { + var t: Tree[Str] = Empty; + for (val s <- args) { + t = t insert Str(s) + } + System.out.println(t.elements) + } + { + var t: Tree[List[char]] = Empty; + for (val s <- args) { + t = t insert toCharList(s) + } + System.out.println(t.elements) + } + } +} diff --git a/test-nsc/files/run/arrays.scala b/test-nsc/files/run/arrays.scala index 9e9c3c065b..eee62afcb3 100644 --- a/test-nsc/files/run/arrays.scala +++ b/test-nsc/files/run/arrays.scala @@ -205,7 +205,7 @@ object Test { val a4: String = "a-z"; val a5: Symbol = 'token; val a6: HashMap = new HashMap(); - val a7: TreeMap = scala.collection.immutable.TreeMap.Empty; + val a7: TreeMap = scala.collection.immutable.TreeMap.Empty[Int, Any]; val a8: Strings = List("a", "z"); val v0: Unit = (); diff --git a/test-nsc/files/run/bugs.scala b/test-nsc/files/run/bugs.scala index 18c17c1501..659b49f825 100755 --- a/test-nsc/files/run/bugs.scala +++ b/test-nsc/files/run/bugs.scala @@ -28,24 +28,14 @@ object Bug98Test { class Bug120A(x: Int) { Console.println("A"); } -<<<<<<< bugs.scala + trait Bug120B { System.out.println("B"); -======= -class Bug120B(x: Int) { - Console.println("B"); ->>>>>>> 1.25 } class Bug120C(x: Int) -<<<<<<< bugs.scala extends Bug120A(Bug120Test.print("one", 1)) with Bug120B { System.out.println("C"); -======= - with Bug120A(Bug120Test.print("one", 1)) - with Bug120B(Bug120Test.print("two", 2)) { - Console.println("C"); ->>>>>>> 1.25 } object Bug120Test { def print[A](str: String, res: A): A = { @@ -79,17 +69,10 @@ abstract class Bug142Foo2 { class Inner; def foo: Inner = {Console.println("ok") abstract class Bug142Foo3 { type Inner; def foo: Inner; foo; } abstract class Bug142Foo4 { type Inner; def foo: Inner = {Console.println("ok"); null.asInstanceOf[Inner]}; } -<<<<<<< bugs.scala trait Bug142Bar1 { type Inner; def foo: Inner = {System.out.println("ok"); null.asInstanceOf[Inner]}; } trait Bug142Bar2 { type Inner; def foo: Inner; foo; } trait Bug142Bar3 { class Inner; def foo: Inner = {System.out.println("ok"); null}; } trait Bug142Bar4 { class Inner; def foo: Inner; foo; } -======= -abstract class Bug142Bar1 { type Inner; def foo: Inner = {Console.println("ok"); null.asInstanceOf[Inner]}; } -abstract class Bug142Bar2 { type Inner; def foo: Inner; foo; } -abstract class Bug142Bar3 { class Inner; def foo: Inner = {Console.println("ok"); null}; } -abstract class Bug142Bar4 { class Inner; def foo: Inner; foo; } ->>>>>>> 1.25 object Bug142Test1 extends Bug142Foo1 with Bug142Bar1 {def main(args:Array[String]):Unit=();} object Bug142Test2 extends Bug142Foo2 with Bug142Bar2 {def main(args:Array[String]):Unit=();} @@ -422,15 +405,9 @@ trait Bug396B extends Bug396A { override def run = { super.run; Console.println("B"); } } } -<<<<<<< bugs.scala trait Bug396C extends Bug396A { trait I extends super.I { override def run = { super.run; System.out.println("C"); } -======= -class Bug396C extends Bug396A { - class I extends super.I { - override def run = { super.run; Console.println("C"); } ->>>>>>> 1.25 } } object Bug396Test extends Application with Bug396B with Bug396C { diff --git a/test-nsc/files/run/mixins.scala b/test-nsc/files/run/mixins.scala index f896551108..bbc20d33d2 100755 --- a/test-nsc/files/run/mixins.scala +++ b/test-nsc/files/run/mixins.scala @@ -2,6 +2,8 @@ // Test 1: "super" coming from mixins +import Console._; + object Test1 { class A { def f = "A::f"; @@ -58,24 +60,13 @@ object Test3 { Console.println("A"); } -<<<<<<< mixins.scala trait B { println("B"); -======= - class B(x: Unit) { - Console.println("B"); ->>>>>>> 1.5 } -<<<<<<< mixins.scala class C extends A({ println("one"); }, { println("two"); }) with B { println("C"); -======= - class C with A({ Console.println("one"); }, { Console.println("two"); }) - with B({ Console.println("three"); }) { - Console.println("C"); ->>>>>>> 1.5 } def test() = { diff --git a/test-nsc/files/run/runtime.scala b/test-nsc/files/run/runtime.scala index 8dca7229d2..30f32b7cba 100755 --- a/test-nsc/files/run/runtime.scala +++ b/test-nsc/files/run/runtime.scala @@ -98,26 +98,16 @@ package test2 { def run = Console.println("A"); } -<<<<<<< runtime.scala trait M0 extends A { override def run = { super.run; System.out.println("M0"); } -======= - class M0 extends A { - override def run = { super.run; Console.println("M0"); } ->>>>>>> 1.9 } class M1 extends M0 { override def run = { super.run; Console.println("M1"); } } -<<<<<<< runtime.scala trait N0 extends A { override def run = { super.run; System.out.println("N0"); } -======= - class N0 extends A { - override def run = { super.run; Console.println("N0"); } ->>>>>>> 1.9 } class N1 extends N0 { -- cgit v1.2.3