summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-03-31 10:36:49 +0000
committerMartin Odersky <odersky@gmail.com>2006-03-31 10:36:49 +0000
commit3049afc7ec7ca038dd8d68d26803c0733df01ee1 (patch)
tree0a41f798b75b4aef55ab00e645cc77b6cdb0be69 /test
parent7ff239d7a998fb0ef7443e6c2020b6dcb64dabdd (diff)
downloadscala-3049afc7ec7ca038dd8d68d26803c0733df01ee1.tar.gz
scala-3049afc7ec7ca038dd8d68d26803c0733df01ee1.tar.bz2
scala-3049afc7ec7ca038dd8d68d26803c0733df01ee1.zip
fixed several old bugs
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/bug200.check4
-rw-r--r--test/files/neg/bug200.scala8
-rw-r--r--test/files/neg/bug343.check4
-rw-r--r--test/files/neg/bug343.scala12
-rw-r--r--test/files/neg/bug409.check4
-rw-r--r--test/files/neg/bug409.scala18
-rw-r--r--test/files/neg/bug414.check9
-rw-r--r--test/files/neg/bug414.scala10
-rw-r--r--test/files/neg/bug415.check4
-rw-r--r--test/files/neg/bug415.scala9
-rw-r--r--test/files/neg/bug418.check7
-rw-r--r--test/files/neg/bug418.scala3
-rw-r--r--test/files/neg/bug432.check4
-rw-r--r--test/files/neg/bug432.scala2
-rw-r--r--test/files/neg/bug452.check6
-rw-r--r--test/files/neg/bug452.scala8
-rw-r--r--test/files/neg/bug555.check4
-rw-r--r--test/files/neg/bug555.scala5
-rw-r--r--test/files/neg/bug556.check4
-rw-r--r--test/files/neg/bug556.scala4
-rw-r--r--test/files/neg/bug558.check4
-rw-r--r--test/files/neg/bug558.scala19
-rw-r--r--test/files/pos/bug202.scala8
-rw-r--r--test/files/pos/bug247.scala25
-rw-r--r--test/pending/neg/bug412.scala31
-rw-r--r--test/pending/neg/bug432.check4
-rw-r--r--test/pending/neg/bug452.check6
-rw-r--r--test/pending/neg/bug452.scala8
-rw-r--r--test/pending/neg/bug555.check4
-rw-r--r--test/pending/neg/bug556.check4
-rw-r--r--test/pending/neg/bug558.check4
-rw-r--r--test/pending/pos/bug418.scala3
-rw-r--r--test/pending/pos/bug419.scala11
-rw-r--r--test/pending/pos/bug421.scala8
-rw-r--r--test/pending/pos/bug422.scala17
-rw-r--r--test/pending/pos/bug430.scala20
-rw-r--r--test/pending/pos/bug443.scala14
-rw-r--r--test/pending/run/bug405.scala5
-rw-r--r--test/pending/run/bug424.scala3
-rw-r--r--test/pending/run/bug429.scala15
-rw-r--r--test/pending/run/bug441.scala12
41 files changed, 354 insertions, 0 deletions
diff --git a/test/files/neg/bug200.check b/test/files/neg/bug200.check
new file mode 100644
index 0000000000..d24d832b85
--- /dev/null
+++ b/test/files/neg/bug200.check
@@ -0,0 +1,4 @@
+bug200.scala:7 error: method foo is defined twice
+ def foo: Int;
+ ^
+one error found
diff --git a/test/files/neg/bug200.scala b/test/files/neg/bug200.scala
new file mode 100644
index 0000000000..692fe368e2
--- /dev/null
+++ b/test/files/neg/bug200.scala
@@ -0,0 +1,8 @@
+trait X {
+ def foo: Int;
+}
+
+trait Y extends X {
+ def foo: String;
+ def foo: Int;
+}
diff --git a/test/files/neg/bug343.check b/test/files/neg/bug343.check
new file mode 100644
index 0000000000..5ba5919650
--- /dev/null
+++ b/test/files/neg/bug343.check
@@ -0,0 +1,4 @@
+bug343.scala:5 error: private class Foo escapes its defining scope as part of type C.this.Foo
+ def get:Foo = new Foo();
+ ^
+one error found
diff --git a/test/files/neg/bug343.scala b/test/files/neg/bug343.scala
new file mode 100644
index 0000000000..d04e1479f7
--- /dev/null
+++ b/test/files/neg/bug343.scala
@@ -0,0 +1,12 @@
+package scalaInner1;
+
+class C {
+ private class Foo {}
+ def get:Foo = new Foo();
+}
+
+object Test {
+ def main(args:Array[String]) = {
+ val c = new C().get;
+ }
+}
diff --git a/test/files/neg/bug409.check b/test/files/neg/bug409.check
new file mode 100644
index 0000000000..6d596108fc
--- /dev/null
+++ b/test/files/neg/bug409.check
@@ -0,0 +1,4 @@
+bug409.scala:6 error: `{' expected
+class Toto extends Expr with Case1(12);
+ ^
+one error found
diff --git a/test/files/neg/bug409.scala b/test/files/neg/bug409.scala
new file mode 100644
index 0000000000..5dac2fdaa4
--- /dev/null
+++ b/test/files/neg/bug409.scala
@@ -0,0 +1,18 @@
+abstract class Expr;
+case class Case1(x: Int) extends Expr;
+case class Case2(x: Int) extends Expr;
+case class Case3(x: Int) extends Expr;
+
+class Toto extends Expr with Case1(12);
+
+object Main {
+ def f(x: Expr): Int = x match {
+ case Case1(x) => x
+ case Case2(x) => x
+ case Case3(x) => x
+ }
+
+ def main(args: Array[String]): Unit = {
+ Console.println(f(new Toto));
+ }
+}
diff --git a/test/files/neg/bug414.check b/test/files/neg/bug414.check
new file mode 100644
index 0000000000..dc6f636ff8
--- /dev/null
+++ b/test/files/neg/bug414.check
@@ -0,0 +1,9 @@
+bug414.scala:5 error: stable identifier required, but Empty found.
+ case Empty =>
+ ^
+bug414.scala:7 error: type mismatch;
+ found : scala.Unit
+ required: a
+ case _ =>
+ ^
+two errors found
diff --git a/test/files/neg/bug414.scala b/test/files/neg/bug414.scala
new file mode 100644
index 0000000000..3dff7f7b36
--- /dev/null
+++ b/test/files/neg/bug414.scala
@@ -0,0 +1,10 @@
+case class Empty[a] extends IntMap[a];
+case class Node[a](left: IntMap[a], keyVal: Pair[int, a], right: IntMap[a]) extends IntMap[a];
+abstract class IntMap[a] {
+ def lookup(key: int): a = this match {
+ case Empty =>
+ error("clef inexistante")
+ case _ =>
+ };
+
+};
diff --git a/test/files/neg/bug415.check b/test/files/neg/bug415.check
new file mode 100644
index 0000000000..7a7c5cf4f5
--- /dev/null
+++ b/test/files/neg/bug415.check
@@ -0,0 +1,4 @@
+bug415.scala:8 error: malformed type: A#T
+ val y: String = a.x;
+ ^
+one error found
diff --git a/test/files/neg/bug415.scala b/test/files/neg/bug415.scala
new file mode 100644
index 0000000000..355b6136d1
--- /dev/null
+++ b/test/files/neg/bug415.scala
@@ -0,0 +1,9 @@
+abstract class A {
+ type T <: String;
+ def x: T;
+}
+
+abstract class B {
+ def a: A;
+ val y: String = a.x;
+}
diff --git a/test/files/neg/bug418.check b/test/files/neg/bug418.check
new file mode 100644
index 0000000000..598d6666f5
--- /dev/null
+++ b/test/files/neg/bug418.check
@@ -0,0 +1,7 @@
+bug418.scala:2 error: not found: value Foo12340771
+ null match { case Foo12340771.Bar(x) => x }
+ ^
+bug418.scala:2 error: not found: value x
+ null match { case Foo12340771.Bar(x) => x }
+ ^
+two errors found
diff --git a/test/files/neg/bug418.scala b/test/files/neg/bug418.scala
new file mode 100644
index 0000000000..67007010d4
--- /dev/null
+++ b/test/files/neg/bug418.scala
@@ -0,0 +1,3 @@
+object Test {
+ null match { case Foo12340771.Bar(x) => x }
+}
diff --git a/test/files/neg/bug432.check b/test/files/neg/bug432.check
new file mode 100644
index 0000000000..e6fbd29579
--- /dev/null
+++ b/test/files/neg/bug432.check
@@ -0,0 +1,4 @@
+bug432.scala:2 error: Tata is already defined as case class Tata
+object Tata
+^
+one error found
diff --git a/test/files/neg/bug432.scala b/test/files/neg/bug432.scala
new file mode 100644
index 0000000000..8e3097ac9d
--- /dev/null
+++ b/test/files/neg/bug432.scala
@@ -0,0 +1,2 @@
+case class Tata
+object Tata
diff --git a/test/files/neg/bug452.check b/test/files/neg/bug452.check
new file mode 100644
index 0000000000..de484ef44b
--- /dev/null
+++ b/test/files/neg/bug452.check
@@ -0,0 +1,6 @@
+bug452.scala:3 error: type mismatch;
+ found : Test
+ required: Test.this.Foo
+ def this() = this(this);
+ ^
+one error found
diff --git a/test/files/neg/bug452.scala b/test/files/neg/bug452.scala
new file mode 100644
index 0000000000..855406d0c4
--- /dev/null
+++ b/test/files/neg/bug452.scala
@@ -0,0 +1,8 @@
+object Test {
+ class Foo(x: Foo) {
+ def this() = this(this);
+ }
+ def main(args: Array[String]): Unit = {
+ new Foo();
+ }
+}
diff --git a/test/files/neg/bug555.check b/test/files/neg/bug555.check
new file mode 100644
index 0000000000..5bd0833217
--- /dev/null
+++ b/test/files/neg/bug555.check
@@ -0,0 +1,4 @@
+bug555.scala:4 error: block must end in result expression, not in definition
+ }
+ ^
+one error found
diff --git a/test/files/neg/bug555.scala b/test/files/neg/bug555.scala
new file mode 100644
index 0000000000..26dbe6cc0d
--- /dev/null
+++ b/test/files/neg/bug555.scala
@@ -0,0 +1,5 @@
+object Main extends Application {
+ def tata = {
+ def titi = {}
+ }
+}
diff --git a/test/files/neg/bug556.check b/test/files/neg/bug556.check
new file mode 100644
index 0000000000..39d9f50f85
--- /dev/null
+++ b/test/files/neg/bug556.check
@@ -0,0 +1,4 @@
+bug556.scala:3 error: wrong number of parameters; expected = 1
+ def g:Int = f((x,y)=>x)
+ ^
+one error found
diff --git a/test/files/neg/bug556.scala b/test/files/neg/bug556.scala
new file mode 100644
index 0000000000..4f4e905fbb
--- /dev/null
+++ b/test/files/neg/bug556.scala
@@ -0,0 +1,4 @@
+object Main extends Application {
+ def f(a:Int=>Int):Int = a(4)
+ def g:Int = f((x,y)=>x)
+}
diff --git a/test/files/neg/bug558.check b/test/files/neg/bug558.check
new file mode 100644
index 0000000000..6587939731
--- /dev/null
+++ b/test/files/neg/bug558.check
@@ -0,0 +1,4 @@
+bug558.scala:13 error: value file is not a member of NewModel.this.RootURL
+ final val source = top.file;
+ ^
+one error found
diff --git a/test/files/neg/bug558.scala b/test/files/neg/bug558.scala
new file mode 100644
index 0000000000..f88471f776
--- /dev/null
+++ b/test/files/neg/bug558.scala
@@ -0,0 +1,19 @@
+package scala.tools.nsc.models;
+import scala.tools.util._;
+
+abstract class NewModel {
+ abstract class SymbolURL {
+ val top : RootURL;
+ val name : String;
+ val source : AbstractFile;
+ }
+ abstract class NodeURL extends SymbolURL {
+ val parent : SymbolURL;
+ final val top = parent.top;
+ final val source = top.file;
+
+ }
+ abstract class RootURL extends SymbolURL {
+ final val top : RootURL = this;
+ }
+}
diff --git a/test/files/pos/bug202.scala b/test/files/pos/bug202.scala
new file mode 100644
index 0000000000..087e1ff5d2
--- /dev/null
+++ b/test/files/pos/bug202.scala
@@ -0,0 +1,8 @@
+trait C {
+ type T;
+ def f(x: T): unit;
+}
+
+trait D extends C {
+ def f(x: T): unit = super.f(x);
+}
diff --git a/test/files/pos/bug247.scala b/test/files/pos/bug247.scala
new file mode 100644
index 0000000000..bfd9d9694f
--- /dev/null
+++ b/test/files/pos/bug247.scala
@@ -0,0 +1,25 @@
+class Order[t](less:(t,t) => Boolean,equal:(t,t) => Boolean) {}
+
+trait Map[A, B] extends scala.collection.Map[A, B] {
+ val factory:MapFactory[A]
+}
+abstract class MapFactory[A] {
+ def Empty[B]:Map[A,B];
+}
+
+class TreeMapFactory[KEY](newOrder:Order[KEY]) extends MapFactory[KEY] {
+ val order = newOrder;
+ def Empty[V] = new TreeMap[KEY,V](new TreeMapFactory[KEY](order));
+}
+
+class Tree[KEY,Entry](order:Order[KEY]) {
+ def size =0;
+}
+
+class TreeMap[KEY,VALUE](_factory:TreeMapFactory[KEY]) extends Tree[KEY,Pair[KEY,VALUE]](_factory.order) with Map[KEY, VALUE] {
+ val factory = _factory
+ val order = _factory.order;
+ def this(newOrder:Order[KEY]) = this(new TreeMapFactory[KEY](newOrder));
+ def get(key:KEY) = null;
+ def elements:Iterator[Pair[KEY,VALUE]] = null;
+}
diff --git a/test/pending/neg/bug412.scala b/test/pending/neg/bug412.scala
new file mode 100644
index 0000000000..66de4761fb
--- /dev/null
+++ b/test/pending/neg/bug412.scala
@@ -0,0 +1,31 @@
+object Magic {
+
+ abstract class A[T1,T2]() {
+ trait C { type T; }
+ trait C1 extends C { type T = T1; }
+ trait C2 extends C { type T <: T2; }
+
+ type CX;
+ val c: CX with C2 = null;
+
+ def castA(x: c.T): T2 = x;
+ }
+
+ class B[T1,T2] extends A[T1,T2]() {
+ type CX = C1;
+
+ def castB(x: T1): T2 = castA(x);
+ }
+
+ def cast[T1,T2](v: T1): T2 =
+ new B[T1,T2]().castB(v)
+
+}
+
+object Test {
+
+ def main(args: Array[String]): Unit = {
+ Magic.cast[String,Exception]("xyz").printStackTrace();
+ }
+
+}
diff --git a/test/pending/neg/bug432.check b/test/pending/neg/bug432.check
new file mode 100644
index 0000000000..e6fbd29579
--- /dev/null
+++ b/test/pending/neg/bug432.check
@@ -0,0 +1,4 @@
+bug432.scala:2 error: Tata is already defined as case class Tata
+object Tata
+^
+one error found
diff --git a/test/pending/neg/bug452.check b/test/pending/neg/bug452.check
new file mode 100644
index 0000000000..de484ef44b
--- /dev/null
+++ b/test/pending/neg/bug452.check
@@ -0,0 +1,6 @@
+bug452.scala:3 error: type mismatch;
+ found : Test
+ required: Test.this.Foo
+ def this() = this(this);
+ ^
+one error found
diff --git a/test/pending/neg/bug452.scala b/test/pending/neg/bug452.scala
new file mode 100644
index 0000000000..855406d0c4
--- /dev/null
+++ b/test/pending/neg/bug452.scala
@@ -0,0 +1,8 @@
+object Test {
+ class Foo(x: Foo) {
+ def this() = this(this);
+ }
+ def main(args: Array[String]): Unit = {
+ new Foo();
+ }
+}
diff --git a/test/pending/neg/bug555.check b/test/pending/neg/bug555.check
new file mode 100644
index 0000000000..5bd0833217
--- /dev/null
+++ b/test/pending/neg/bug555.check
@@ -0,0 +1,4 @@
+bug555.scala:4 error: block must end in result expression, not in definition
+ }
+ ^
+one error found
diff --git a/test/pending/neg/bug556.check b/test/pending/neg/bug556.check
new file mode 100644
index 0000000000..39d9f50f85
--- /dev/null
+++ b/test/pending/neg/bug556.check
@@ -0,0 +1,4 @@
+bug556.scala:3 error: wrong number of parameters; expected = 1
+ def g:Int = f((x,y)=>x)
+ ^
+one error found
diff --git a/test/pending/neg/bug558.check b/test/pending/neg/bug558.check
new file mode 100644
index 0000000000..6587939731
--- /dev/null
+++ b/test/pending/neg/bug558.check
@@ -0,0 +1,4 @@
+bug558.scala:13 error: value file is not a member of NewModel.this.RootURL
+ final val source = top.file;
+ ^
+one error found
diff --git a/test/pending/pos/bug418.scala b/test/pending/pos/bug418.scala
new file mode 100644
index 0000000000..67007010d4
--- /dev/null
+++ b/test/pending/pos/bug418.scala
@@ -0,0 +1,3 @@
+object Test {
+ null match { case Foo12340771.Bar(x) => x }
+}
diff --git a/test/pending/pos/bug419.scala b/test/pending/pos/bug419.scala
new file mode 100644
index 0000000000..65dcb04356
--- /dev/null
+++ b/test/pending/pos/bug419.scala
@@ -0,0 +1,11 @@
+trait Bar {
+ class Config {}
+ var config: Config; // aha, traits can have variables?
+}
+
+object Foo extends Bar {
+
+ class FooConfig extends Config;
+ var config: Config = new FooConfig() // or not
+
+}
diff --git a/test/pending/pos/bug421.scala b/test/pending/pos/bug421.scala
new file mode 100644
index 0000000000..3e014b7500
--- /dev/null
+++ b/test/pending/pos/bug421.scala
@@ -0,0 +1,8 @@
+object foo {
+ case class Bar(a:String, b:Object, c:String*);
+
+ Bar("foo","meets","bar") match {
+ case Bar("foo",_*) => error("huh?");
+ }
+
+}
diff --git a/test/pending/pos/bug422.scala b/test/pending/pos/bug422.scala
new file mode 100644
index 0000000000..cb3ba279d4
--- /dev/null
+++ b/test/pending/pos/bug422.scala
@@ -0,0 +1,17 @@
+import scala.util.regexp.WordExp;
+import scala.util.automata.WordBerrySethi;
+
+object BoolWordExp extends WordExp {
+ type _labelT = MyLabels;
+ type _regexpT = RegExp;
+ abstract class MyLabels extends Label ;
+ case class MyLabel(c:Char) extends MyLabels;
+}
+
+object MyTranslator extends WordBerrySethi {
+ override val lang = BoolWordExp;
+ import lang._;
+ override protected def seenLabel( r:RegExp, i:Int, label: _labelT ): Unit = {
+ super.seenLabel(r,i,label)
+ }
+}
diff --git a/test/pending/pos/bug430.scala b/test/pending/pos/bug430.scala
new file mode 100644
index 0000000000..7e3e7eaaec
--- /dev/null
+++ b/test/pending/pos/bug430.scala
@@ -0,0 +1,20 @@
+object Test extends Application {
+ def foo[T <% Ordered[T]](x: T): Unit = System.out.println(""+(x < x)+" "+(x <= x))
+ def bar(x: Unit ): Unit = foo(x);
+ def bar(x: Boolean): Unit = foo(x);
+ def bar(x: Byte ): Unit = foo(x);
+ def bar(x: Short ): Unit = foo(x);
+ def bar(x: Int ): Unit = foo(x);
+ def bar(x: Long ): Unit = foo(x);
+ def bar(x: Float ): Unit = foo(x);
+ def bar(x: Double ): Unit = foo(x);
+ bar(())
+ bar(true)
+ bar(1: byte)
+ bar(1: short)
+ bar('a')
+ bar(1)
+ bar(1l)
+ bar(1.0f)
+ bar(1.0)
+}
diff --git a/test/pending/pos/bug443.scala b/test/pending/pos/bug443.scala
new file mode 100644
index 0000000000..5b83e9d2cb
--- /dev/null
+++ b/test/pending/pos/bug443.scala
@@ -0,0 +1,14 @@
+object Test {
+
+ def lookup(): Option[Pair[String, String]] =
+ (null: Option[Pair[String, String]]) match {
+ case Some(Pair(_, _)) =>
+ if (true)
+ Some(Pair(null, null))
+ else
+ lookup() match {
+ case Some(_) => Some(null)
+ case None => None
+ }
+ }
+}
diff --git a/test/pending/run/bug405.scala b/test/pending/run/bug405.scala
new file mode 100644
index 0000000000..a1e3864496
--- /dev/null
+++ b/test/pending/run/bug405.scala
@@ -0,0 +1,5 @@
+object Test extends Application {
+ val x = M;
+ object M;
+ assert(x eq M)
+}
diff --git a/test/pending/run/bug424.scala b/test/pending/run/bug424.scala
new file mode 100644
index 0000000000..bc7a55732d
--- /dev/null
+++ b/test/pending/run/bug424.scala
@@ -0,0 +1,3 @@
+object M {
+ def f = 3;
+}
diff --git a/test/pending/run/bug429.scala b/test/pending/run/bug429.scala
new file mode 100644
index 0000000000..b2cc8128c0
--- /dev/null
+++ b/test/pending/run/bug429.scala
@@ -0,0 +1,15 @@
+object Test {
+ abstract class A {
+ Console.print("A");
+ val x: Int;
+ val y: Int = {Console.print("y"); x + 1}
+ }
+ class B extends A {
+ Console.print("B");
+ val z = 0;
+ val x = 4 + z
+ }
+ def main (args: Array[String]): Unit = {
+ Console.print((new B).y);
+ }
+}
diff --git a/test/pending/run/bug441.scala b/test/pending/run/bug441.scala
new file mode 100644
index 0000000000..d90e872baa
--- /dev/null
+++ b/test/pending/run/bug441.scala
@@ -0,0 +1,12 @@
+object Test extends Application {
+
+ def bug() = {
+ val foo: Array[String] = Array("1","2","3");
+ if( foo.length == null ) // == 0 makes more sense, but still
+ Console.println("plante"); // this code leads to runtime crash
+ else
+ Console.println("plante pas");
+ }
+
+ bug()
+}