diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2009-08-13 08:37:19 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2009-08-13 08:37:19 +0000 |
commit | 1ceff6729ae30c61ec43e615daf9ef96ea59aae7 (patch) | |
tree | 260b1717abfee5e844dc5d6d46e55298c32e01f6 | |
parent | db202748feb20a7d05473a63e5f2a576fcbbd710 (diff) | |
download | scala-1ceff6729ae30c61ec43e615daf9ef96ea59aae7.tar.gz scala-1ceff6729ae30c61ec43e615daf9ef96ea59aae7.tar.bz2 scala-1ceff6729ae30c61ec43e615daf9ef96ea59aae7.zip |
fix for 513: use deep ForeachTypeTraverser in d...
fix for 513: use deep ForeachTypeTraverser in doTypeTraversal instead of
shallow one test case+checkfile for #513
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 7 | ||||
-rw-r--r-- | src/library/scala/collection/generic/IterableView.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/generic/MutableVectorView.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/generic/SequenceView.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/generic/TraversableView.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/generic/VectorView.scala | 2 | ||||
-rw-r--r-- | test/files/neg/bug588.check | 2 | ||||
-rw-r--r-- | test/files/neg/bug588.scala | 2 | ||||
-rw-r--r-- | test/files/neg/ticket513.check | 4 | ||||
-rw-r--r-- | test/files/neg/ticket513.scala | 6 |
10 files changed, 19 insertions, 12 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 3e85a55e61..5e8fbca81b 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -860,11 +860,8 @@ abstract class RefChecks extends InfoTransform { var result = tree def doTypeTraversal(f: (Type) => Unit) = - if (!inPattern) { - new TypeTraverser { - def traverse(tp: Type) { f(tp) } - } traverse tree.tpe - } + if (!inPattern) + new ForEachTypeTraverser(f) traverse tree.tpe // Apply RefChecks to annotations. Makes sure the annotations conform to // type bounds (bug #935), issues deprecation warnings for symbols used diff --git a/src/library/scala/collection/generic/IterableView.scala b/src/library/scala/collection/generic/IterableView.scala index eca431ae1e..30d3f772ef 100644 --- a/src/library/scala/collection/generic/IterableView.scala +++ b/src/library/scala/collection/generic/IterableView.scala @@ -22,6 +22,6 @@ import TraversableView.NoBuilder trait IterableView[+A, +Coll <: Iterable[_]] extends IterableViewTemplate[A, Coll, IterableView[A, Coll]] object IterableView { - type Coll = TraversableView[_, _] + type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]} implicit def builderFactory[A]: BuilderFactory[A, IterableView[A, Iterable[_]], Coll] = new BuilderFactory[A, IterableView[A, Iterable[_]], Coll] { def apply(from: Coll) = new NoBuilder } } diff --git a/src/library/scala/collection/generic/MutableVectorView.scala b/src/library/scala/collection/generic/MutableVectorView.scala index 1a84ace1e2..604d18ea98 100644 --- a/src/library/scala/collection/generic/MutableVectorView.scala +++ b/src/library/scala/collection/generic/MutableVectorView.scala @@ -22,6 +22,6 @@ import TraversableView.NoBuilder trait MutableVectorView[A, +Coll <: mutable.Vector[_]] extends MutableVectorViewTemplate[A, Coll, MutableVectorView[A, Coll]] object MutableVectorView { - type Coll = TraversableView[_, _] + type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]} implicit def builderFactory[A]: BuilderFactory[A, MutableVectorView[A, mutable.Vector[_]], Coll] = new BuilderFactory[A, MutableVectorView[A, mutable.Vector[_]], Coll] { def apply(from: Coll) = new NoBuilder } } diff --git a/src/library/scala/collection/generic/SequenceView.scala b/src/library/scala/collection/generic/SequenceView.scala index 269d247316..f3a93914a8 100644 --- a/src/library/scala/collection/generic/SequenceView.scala +++ b/src/library/scala/collection/generic/SequenceView.scala @@ -22,7 +22,7 @@ import TraversableView.NoBuilder trait SequenceView[+A, +Coll <: Sequence[_]] extends SequenceViewTemplate[A, Coll, SequenceView[A, Coll]] object SequenceView { - type Coll = TraversableView[_, _] + type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]} implicit def builderFactory[A]: BuilderFactory[A, SequenceView[A, Sequence[_]], Coll] = new BuilderFactory[A, SequenceView[A, Sequence[_]], Coll] { def apply(from: Coll) = new NoBuilder } } diff --git a/src/library/scala/collection/generic/TraversableView.scala b/src/library/scala/collection/generic/TraversableView.scala index 47eb3c22c7..66bfee31cc 100644 --- a/src/library/scala/collection/generic/TraversableView.scala +++ b/src/library/scala/collection/generic/TraversableView.scala @@ -33,6 +33,6 @@ object TraversableView { def result() = throw new UnsupportedOperationException("TraversableView.Builder.result") def clear() {} } - type Coll = TraversableView[_, _] + type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]} implicit def builderFactory[A]: BuilderFactory[A, TraversableView[A, Traversable[_]], Coll] = new BuilderFactory[A, TraversableView[A, Traversable[_]], Coll] { def apply(from: Coll) = new NoBuilder } } diff --git a/src/library/scala/collection/generic/VectorView.scala b/src/library/scala/collection/generic/VectorView.scala index 65850e8a01..7125af05e6 100644 --- a/src/library/scala/collection/generic/VectorView.scala +++ b/src/library/scala/collection/generic/VectorView.scala @@ -23,6 +23,6 @@ import TraversableView.NoBuilder trait VectorView[+A, +Coll <: Vector[_]] extends VectorViewTemplate[A, Coll, VectorView[A, Coll]] object VectorView { - type Coll = TraversableView[_, _] + type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]} implicit def builderFactory[A]: BuilderFactory[A, VectorView[A, Vector[_]], Coll] = new BuilderFactory[A, VectorView[A, Vector[_]], Coll] { def apply(from: Coll) = new NoBuilder } } diff --git a/test/files/neg/bug588.check b/test/files/neg/bug588.check index d795922e0c..5f55c95619 100644 --- a/test/files/neg/bug588.check +++ b/test/files/neg/bug588.check @@ -1,6 +1,6 @@ bug588.scala:3: error: double definition: method visit:(f: (Int) => String)Boolean and -method visit:(f: (Int) => unit)Boolean at line 2 +method visit:(f: (Int) => Unit)Boolean at line 2 have same type after erasure: (f: Function1)Boolean def visit(f: Int => String): Boolean ^ diff --git a/test/files/neg/bug588.scala b/test/files/neg/bug588.scala index 1713df1330..f30937377e 100644 --- a/test/files/neg/bug588.scala +++ b/test/files/neg/bug588.scala @@ -1,5 +1,5 @@ abstract class Test0 { - def visit(f: Int => unit): Boolean + def visit(f: Int => Unit): Boolean def visit(f: Int => String): Boolean } trait Test { diff --git a/test/files/neg/ticket513.check b/test/files/neg/ticket513.check new file mode 100644 index 0000000000..8994269262 --- /dev/null +++ b/test/files/neg/ticket513.check @@ -0,0 +1,4 @@ +ticket513.scala:6: error: type arguments [NotThatBound] do not conform to trait T's type parameter bounds [A <: Bound] +object Wrong extends Wrap[T[NotThatBound]] + ^ +one error found diff --git a/test/files/neg/ticket513.scala b/test/files/neg/ticket513.scala new file mode 100644 index 0000000000..e8510558b0 --- /dev/null +++ b/test/files/neg/ticket513.scala @@ -0,0 +1,6 @@ +class Bound +class NotThatBound +trait T[A <: Bound] +trait Wrap[X] + +object Wrong extends Wrap[T[NotThatBound]]
\ No newline at end of file |