summaryrefslogtreecommitdiff
path: root/test/files/pos
diff options
context:
space:
mode:
Diffstat (limited to 'test/files/pos')
-rw-r--r--test/files/pos/S1.scala13
-rw-r--r--test/files/pos/S3.scala14
-rw-r--r--test/files/pos/S5.scala30
-rw-r--r--test/files/pos/S8.scala19
-rw-r--r--test/files/pos/philippe3.scala40
-rw-r--r--test/files/pos/scall.bat50
6 files changed, 166 insertions, 0 deletions
diff --git a/test/files/pos/S1.scala b/test/files/pos/S1.scala
new file mode 100644
index 0000000000..eba81109b3
--- /dev/null
+++ b/test/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);
+}
diff --git a/test/files/pos/S3.scala b/test/files/pos/S3.scala
new file mode 100644
index 0000000000..1e0f0288b1
--- /dev/null
+++ b/test/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/files/pos/S5.scala b/test/files/pos/S5.scala
new file mode 100644
index 0000000000..87325b47e4
--- /dev/null
+++ b/test/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
+ }
+}
+abstract class 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
+ }
+}
+module O {
+ val system = new M() with N() {}
+}
diff --git a/test/files/pos/S8.scala b/test/files/pos/S8.scala
new file mode 100644
index 0000000000..e4339bb3f1
--- /dev/null
+++ b/test/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() {}
+}
+module M {
+ val x = new S8();
+ val y: x.a.B = new x.A(); //correct?
+}
diff --git a/test/files/pos/philippe3.scala b/test/files/pos/philippe3.scala
new file mode 100644
index 0000000000..d99ec41f52
--- /dev/null
+++ b/test/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 {}
+
+module M1;
+module M2 {}
+module M5 extends C();
+module M6 extends C() {}
+module M7 extends C() with U;
+module M8 extends C() with U {}
+
+
+
diff --git a/test/files/pos/scall.bat b/test/files/pos/scall.bat
new file mode 100644
index 0000000000..4e9f31425e
--- /dev/null
+++ b/test/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;