summaryrefslogtreecommitdiff
path: root/test-nsc
diff options
context:
space:
mode:
Diffstat (limited to 'test-nsc')
-rwxr-xr-xtest-nsc/files/pos/304.scala5
-rwxr-xr-xtest-nsc/files/pos/A.scala8
-rwxr-xr-xtest-nsc/files/pos/List1.scala45
-rwxr-xr-xtest-nsc/files/pos/MailBox.scala83
-rwxr-xr-xtest-nsc/files/pos/S1.scala13
-rwxr-xr-xtest-nsc/files/pos/S3.scala14
-rwxr-xr-xtest-nsc/files/pos/S5.scala30
-rwxr-xr-xtest-nsc/files/pos/S8.scala19
-rwxr-xr-xtest-nsc/files/pos/X.scala14
-rwxr-xr-xtest-nsc/files/pos/Z.scala10
-rwxr-xr-xtest-nsc/files/pos/abstract.scala9
-rwxr-xr-xtest-nsc/files/pos/aliases.scala25
-rwxr-xr-xtest-nsc/files/pos/all.lst143
-rwxr-xr-xtest-nsc/files/pos/arrays2.scala11
-rwxr-xr-xtest-nsc/files/pos/attributes.scala74
-rwxr-xr-xtest-nsc/files/pos/bug082.scala18
-rwxr-xr-xtest-nsc/files/pos/bug1.scala8
-rwxr-xr-xtest-nsc/files/pos/bug115.scala9
-rwxr-xr-xtest-nsc/files/pos/bug116.scala8
-rwxr-xr-xtest-nsc/files/pos/bug119.scala7
-rwxr-xr-xtest-nsc/files/pos/bug121.scala3
-rwxr-xr-xtest-nsc/files/pos/bug123.scala3
-rwxr-xr-xtest-nsc/files/pos/bug124.scala5
-rwxr-xr-xtest-nsc/files/pos/bug151.scala6
-rwxr-xr-xtest-nsc/files/pos/bug159.scala22
-rwxr-xr-xtest-nsc/files/pos/bug160.scala5
-rwxr-xr-xtest-nsc/files/pos/bug17.scala21
-rwxr-xr-xtest-nsc/files/pos/bug175.scala5
-rwxr-xr-xtest-nsc/files/pos/bug177.scala10
-rwxr-xr-xtest-nsc/files/pos/bug183.scala6
-rwxr-xr-xtest-nsc/files/pos/bug193.scala74
-rwxr-xr-xtest-nsc/files/pos/bug2.scala6
-rwxr-xr-xtest-nsc/files/pos/bug20.scala8
-rwxr-xr-xtest-nsc/files/pos/bug201.scala7
-rwxr-xr-xtest-nsc/files/pos/bug204.scala7
-rwxr-xr-xtest-nsc/files/pos/bug210.scala17
-rwxr-xr-xtest-nsc/files/pos/bug211.scala8
-rwxr-xr-xtest-nsc/files/pos/bug229.scala3
-rwxr-xr-xtest-nsc/files/pos/bug245.scala18
-rwxr-xr-xtest-nsc/files/pos/bug267.scala55
-rwxr-xr-xtest-nsc/files/pos/bug287.scala12
-rw-r--r--test-nsc/files/pos/bug289.scala7
-rwxr-xr-xtest-nsc/files/pos/bug29.scala3
-rwxr-xr-xtest-nsc/files/pos/bug295.scala2
-rwxr-xr-xtest-nsc/files/pos/bug30.scala9
-rwxr-xr-xtest-nsc/files/pos/bug304.scala5
-rwxr-xr-xtest-nsc/files/pos/bug31.scala29
-rwxr-xr-xtest-nsc/files/pos/bug318.scala11
-rwxr-xr-xtest-nsc/files/pos/bug32.scala17
-rwxr-xr-xtest-nsc/files/pos/bug342.scala9
-rwxr-xr-xtest-nsc/files/pos/bug348plus.scala24
-rwxr-xr-xtest-nsc/files/pos/bug359.scala30
-rwxr-xr-xtest-nsc/files/pos/bug36.scala8
-rw-r--r--test-nsc/files/pos/bug360.scala11
-rw-r--r--test-nsc/files/pos/bug361.scala18
-rwxr-xr-xtest-nsc/files/pos/bug372.scala4
-rwxr-xr-xtest-nsc/files/pos/bug39.scala6
-rwxr-xr-xtest-nsc/files/pos/bug49.scala3
-rwxr-xr-xtest-nsc/files/pos/bug53.scala7
-rwxr-xr-xtest-nsc/files/pos/bug54.scala4
-rwxr-xr-xtest-nsc/files/pos/bug61.scala10
-rwxr-xr-xtest-nsc/files/pos/bug64.scala6
-rwxr-xr-xtest-nsc/files/pos/bug66.scala7
-rwxr-xr-xtest-nsc/files/pos/bug68.scala6
-rwxr-xr-xtest-nsc/files/pos/bug69.scala11
-rwxr-xr-xtest-nsc/files/pos/bug76.scala9
-rwxr-xr-xtest-nsc/files/pos/bug81.scala4
-rw-r--r--test-nsc/files/pos/bug85.scala8
-rwxr-xr-xtest-nsc/files/pos/bug91.scala6
-rwxr-xr-xtest-nsc/files/pos/bug93.scala4
-rwxr-xr-xtest-nsc/files/pos/cls.scala17
-rwxr-xr-xtest-nsc/files/pos/cls1.scala9
-rwxr-xr-xtest-nsc/files/pos/clsrefine.scala40
-rw-r--r--test-nsc/files/pos/compile.scala150
-rw-r--r--test-nsc/files/pos/compile1.scala35
-rwxr-xr-xtest-nsc/files/pos/compound.scala9
-rwxr-xr-xtest-nsc/files/pos/constfold.scala14
-rwxr-xr-xtest-nsc/files/pos/context.scala34
-rwxr-xr-xtest-nsc/files/pos/eta.scala5
-rwxr-xr-xtest-nsc/files/pos/exceptions.scala20
-rwxr-xr-xtest-nsc/files/pos/expressions-current.scala63
-rwxr-xr-xtest-nsc/files/pos/failed.lst3
-rwxr-xr-xtest-nsc/files/pos/gui.scala99
-rwxr-xr-xtest-nsc/files/pos/imports.scala16
-rwxr-xr-xtest-nsc/files/pos/infer.scala11
-rwxr-xr-xtest-nsc/files/pos/infer2.scala10
-rwxr-xr-xtest-nsc/files/pos/lambda.scala8
-rwxr-xr-xtest-nsc/files/pos/lambdalift.scala15
-rwxr-xr-xtest-nsc/files/pos/lambdalift1.scala17
-rwxr-xr-xtest-nsc/files/pos/localmodules.scala22
-rwxr-xr-xtest-nsc/files/pos/matthias1.scala15
-rwxr-xr-xtest-nsc/files/pos/matthias3.scala13
-rwxr-xr-xtest-nsc/files/pos/matthias4.scala84
-rwxr-xr-xtest-nsc/files/pos/matthias5.scala12
-rwxr-xr-xtest-nsc/files/pos/maxim1.scala5
-rwxr-xr-xtest-nsc/files/pos/michel1.scala9
-rwxr-xr-xtest-nsc/files/pos/michel2.scala16
-rwxr-xr-xtest-nsc/files/pos/michel3.scala3
-rwxr-xr-xtest-nsc/files/pos/michel4.scala7
-rwxr-xr-xtest-nsc/files/pos/michel5.scala5
-rwxr-xr-xtest-nsc/files/pos/michel6.scala6
-rwxr-xr-xtest-nsc/files/pos/mixins.scala22
-rwxr-xr-xtest-nsc/files/pos/modules.scala14
-rwxr-xr-xtest-nsc/files/pos/modules1.scala14
-rwxr-xr-xtest-nsc/files/pos/moduletrans.scala8
-rwxr-xr-xtest-nsc/files/pos/nested.scala29
-rwxr-xr-xtest-nsc/files/pos/null.scala3
-rwxr-xr-xtest-nsc/files/pos/ok.lst138
-rwxr-xr-xtest-nsc/files/pos/orderedpoints.scala30
-rwxr-xr-xtest-nsc/files/pos/override.scala14
-rwxr-xr-xtest-nsc/files/pos/partialfun.scala10
-rwxr-xr-xtest-nsc/files/pos/patterns.scala27
-rwxr-xr-xtest-nsc/files/pos/patterns1.scala13
-rwxr-xr-xtest-nsc/files/pos/patterns2.scala16
-rwxr-xr-xtest-nsc/files/pos/patterns3.scala5
-rwxr-xr-xtest-nsc/files/pos/philippe1.scala8
-rwxr-xr-xtest-nsc/files/pos/philippe2.scala7
-rwxr-xr-xtest-nsc/files/pos/philippe3.scala40
-rwxr-xr-xtest-nsc/files/pos/philippe4.scala3
-rwxr-xr-xtest-nsc/files/pos/pmbug.scala8
-rwxr-xr-xtest-nsc/files/pos/propagate.scala17
-rwxr-xr-xtest-nsc/files/pos/rebind.scala13
-rwxr-xr-xtest-nsc/files/pos/refine.scala6
-rwxr-xr-xtest-nsc/files/pos/reftest.scala4
-rwxr-xr-xtest-nsc/files/pos/scall.bat50
-rwxr-xr-xtest-nsc/files/pos/scoping1.scala12
-rwxr-xr-xtest-nsc/files/pos/scoping2.scala14
-rwxr-xr-xtest-nsc/files/pos/scoping3.scala20
-rwxr-xr-xtest-nsc/files/pos/seqtest2.scala13
-rwxr-xr-xtest-nsc/files/pos/simplelists.scala17
-rwxr-xr-xtest-nsc/files/pos/stable.scala11
-rwxr-xr-xtest-nsc/files/pos/strings.scala6
-rwxr-xr-xtest-nsc/files/pos/test1.scala5
-rwxr-xr-xtest-nsc/files/pos/test2.scala5
-rwxr-xr-xtest-nsc/files/pos/test4.scala47
-rwxr-xr-xtest-nsc/files/pos/test4a.scala16
-rwxr-xr-xtest-nsc/files/pos/test4refine.scala49
-rwxr-xr-xtest-nsc/files/pos/test5.scala68
-rwxr-xr-xtest-nsc/files/pos/test5refine.scala75
-rwxr-xr-xtest-nsc/files/pos/testcast.scala26
-rwxr-xr-xtest-nsc/files/pos/thistype.scala14
-rwxr-xr-xtest-nsc/files/pos/thistypes.scala8
-rwxr-xr-xtest-nsc/files/pos/traits.scala42
-rwxr-xr-xtest-nsc/files/pos/valdefs.scala16
-rwxr-xr-xtest-nsc/files/pos/viewtest1.scala41
-rwxr-xr-xtest-nsc/files/pos/viewtest2.scala117
-rwxr-xr-xtest-nsc/files/pos/viewtest3.scala59
-rw-r--r--test-nsc/files/run/arrays.scala2
-rwxr-xr-xtest-nsc/files/run/bugs.scala25
-rwxr-xr-xtest-nsc/files/run/mixins.scala13
-rwxr-xr-xtest-nsc/files/run/runtime.scala10
151 files changed, 3088 insertions, 46 deletions
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 "<undefined>";
+
+ 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 {