diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Infer.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/Map.scala | 4 | ||||
-rw-r--r-- | src/library/scala/collection/Set.scala | 5 | ||||
-rw-r--r-- | src/library/scala/collection/immutable/Queue.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/ArrayBuffer.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/Buffer.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/ListBuffer.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/Map.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/Set.scala | 2 | ||||
-rw-r--r-- | test/files/pos/bug788.scala | 20 |
10 files changed, 32 insertions, 11 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Infer.scala b/src/compiler/scala/tools/nsc/typechecker/Infer.scala index 95a0fd4028..d9ea1b9916 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Infer.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Infer.scala @@ -852,7 +852,7 @@ trait Infer requires Analyzer { } tvars foreach instantiateTypeVar(true) } - intersect(tpt.tpe, pt) + intersect(pt, tpt.tpe) } object toOrigin extends TypeMap { diff --git a/src/library/scala/collection/Map.scala b/src/library/scala/collection/Map.scala index 5472aadd1b..0d21faba6c 100644 --- a/src/library/scala/collection/Map.scala +++ b/src/library/scala/collection/Map.scala @@ -108,9 +108,9 @@ trait Map[A, +B] extends AnyRef * @return true, iff both maps contain exactly the same mappings. */ override def equals(that: Any): Boolean = that match { - case other: Map[A, B] => + case other: Map[a, b] => this.size == other.size && this.elements.forall { - case Pair(key, value) => other.get(key) match { + case Pair(key, value) => other.get(key.asInstanceOf[a]) match { case None => false case Some(otherval) => value == otherval } diff --git a/src/library/scala/collection/Set.scala b/src/library/scala/collection/Set.scala index e97b4369da..107a1948d6 100644 --- a/src/library/scala/collection/Set.scala +++ b/src/library/scala/collection/Set.scala @@ -70,8 +70,9 @@ trait Set[A] extends AnyRef with Function1[A, Boolean] with Iterable[A] { * elements. */ override def equals(that: Any): Boolean = that match { - case other: Set[A] => - this.size == other.size && this.elements.forall(other.contains) + case other: Set[a] => + this.size == other.size && this.elements.forall( + x => other contains x.asInstanceOf[a]) case _ => false } diff --git a/src/library/scala/collection/immutable/Queue.scala b/src/library/scala/collection/immutable/Queue.scala index 46096d7e4c..5624a7eb21 100644 --- a/src/library/scala/collection/immutable/Queue.scala +++ b/src/library/scala/collection/immutable/Queue.scala @@ -130,7 +130,7 @@ class Queue[+A](elem: A*) extends Seq[A] { * @return true, iff the two queues are structurally equal. */ override def equals(o: Any): Boolean = o match { - case q: Queue[Any] => + case q: Queue[_] => /* A function that compares the element at position index in q with the element at the same position in this (queue). diff --git a/src/library/scala/collection/mutable/ArrayBuffer.scala b/src/library/scala/collection/mutable/ArrayBuffer.scala index 8dacd17489..f15ccd9106 100644 --- a/src/library/scala/collection/mutable/ArrayBuffer.scala +++ b/src/library/scala/collection/mutable/ArrayBuffer.scala @@ -153,7 +153,7 @@ class ArrayBuffer[A] extends Buffer[A] with ResizableArray[A] { * @return true, iff both buffers contain the same sequence of elements. */ override def equals(obj: Any): Boolean = obj match { - case that: ArrayBuffer[A] => + case that: ArrayBuffer[_] => this.length == that.length && elements.zip(that.elements).forall { case Pair(thiselem, thatelem) => thiselem == thatelem diff --git a/src/library/scala/collection/mutable/Buffer.scala b/src/library/scala/collection/mutable/Buffer.scala index 21bee72a02..c5f953cb05 100644 --- a/src/library/scala/collection/mutable/Buffer.scala +++ b/src/library/scala/collection/mutable/Buffer.scala @@ -215,7 +215,7 @@ trait Buffer[A] extends AnyRef case _ => throw new UnsupportedOperationException("message " + cmd + " not understood") } case Reset() => clear - case s: Script[Pair[Location, A]] => s.elements foreach << + case s: Script[_] => s.elements foreach << case _ => throw new UnsupportedOperationException("message " + cmd + " not understood") } diff --git a/src/library/scala/collection/mutable/ListBuffer.scala b/src/library/scala/collection/mutable/ListBuffer.scala index 47cd64c74e..abe65019bf 100644 --- a/src/library/scala/collection/mutable/ListBuffer.scala +++ b/src/library/scala/collection/mutable/ListBuffer.scala @@ -266,7 +266,7 @@ final class ListBuffer[A] extends Buffer[A] { * of elements. */ override def equals(obj: Any): Boolean = obj match { - case that: ListBuffer[A] => + case that: ListBuffer[_] => (this.length == that.length && elements.zip(that.elements).forall { case Pair(thiselem, thatelem) => thiselem == thatelem diff --git a/src/library/scala/collection/mutable/Map.scala b/src/library/scala/collection/mutable/Map.scala index 36565a0493..7106acb8a1 100644 --- a/src/library/scala/collection/mutable/Map.scala +++ b/src/library/scala/collection/mutable/Map.scala @@ -130,7 +130,7 @@ trait Map[A, B] extends AnyRef case Update(Pair(k, v)) => update(k, v) case Remove(Pair(k, _)) => this -= k case Reset() => clear - case s: Script[Pair[A, B]] => s.elements foreach << + case s: Script[_] => s.elements foreach << case _ => throw new UnsupportedOperationException("message " + cmd + " not understood") } diff --git a/src/library/scala/collection/mutable/Set.scala b/src/library/scala/collection/mutable/Set.scala index 20761f1068..6ae94dc4f3 100644 --- a/src/library/scala/collection/mutable/Set.scala +++ b/src/library/scala/collection/mutable/Set.scala @@ -114,7 +114,7 @@ trait Set[A] extends AnyRef with collection.Set[A] case Include(elem) => this += elem case Remove(elem) => this -= elem case Reset() => clear - case s: Script[A] => s.elements foreach << + case s: Script[_] => s.elements foreach << case _ => throw new UnsupportedOperationException("message " + cmd + " not understood") } diff --git a/test/files/pos/bug788.scala b/test/files/pos/bug788.scala new file mode 100644 index 0000000000..23ffa4a52d --- /dev/null +++ b/test/files/pos/bug788.scala @@ -0,0 +1,20 @@ +package test; + +trait Test { + type Node <: NodeImpl; + trait NodeImpl; + type Expression <: Node with ExpressionImpl; + trait ExpressionImpl extends NodeImpl { + def self : Expression; + } + type Named <: Node with NamedImpl; + trait NamedImpl extends NodeImpl { + def self : Named; + } + def asExpression(e : ExpressionImpl) : Named = { + e match { + case f : NamedImpl => f.self; + case _ => null; + } + } +} |