diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2012-08-08 09:57:04 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2012-08-08 09:57:04 -0700 |
commit | adbdb18d93374b7c68f77649cc7ec4c3b9e33f4b (patch) | |
tree | 235d6a4085be43973453678e41d8e3e11cfccb2a | |
parent | 589ac216d97d7bd2a03dda84a71622459e10a8f7 (diff) | |
parent | 52fa311f885e20b05178bf28553f3952ba8a5df7 (diff) | |
download | scala-adbdb18d93374b7c68f77649cc7ec4c3b9e33f4b.tar.gz scala-adbdb18d93374b7c68f77649cc7ec4c3b9e33f4b.tar.bz2 scala-adbdb18d93374b7c68f77649cc7ec4c3b9e33f4b.zip |
Merge pull request #1088 from adriaanm/ticket-6205
SI-6205 make pt fully defined before inferTypedPattern
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 7 | ||||
-rw-r--r-- | test/files/pos/t6205.scala | 18 |
2 files changed, 22 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 769648aa74..d05368bd5f 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -5052,10 +5052,11 @@ trait Typers extends Modes with Adaptations with Tags { if (isPatternMode) { val uncheckedTypeExtractor = extractorForUncheckedType(tpt.pos, tptTyped.tpe) - val ownType = inferTypedPattern(tptTyped, tptTyped.tpe, pt, canRemedy = uncheckedTypeExtractor.nonEmpty) - // println(s"Typed($expr, ${tpt.tpe}) : $pt --> $ownType (${isFullyDefined(ownType)}, ${makeFullyDefined(ownType)})") + // make fully defined to avoid bounded wildcard types that may be in pt from calling dropExistential (SI-2038) - treeTyped setType (if (isFullyDefined(ownType)) ownType else makeFullyDefined(ownType)) //ownType + val ptDefined = if (isFullyDefined(pt)) pt else makeFullyDefined(pt) + val ownType = inferTypedPattern(tptTyped, tptTyped.tpe, ptDefined, canRemedy = uncheckedTypeExtractor.nonEmpty) + treeTyped setType ownType uncheckedTypeExtractor match { case None => treeTyped diff --git a/test/files/pos/t6205.scala b/test/files/pos/t6205.scala new file mode 100644 index 0000000000..02d924fe85 --- /dev/null +++ b/test/files/pos/t6205.scala @@ -0,0 +1,18 @@ +// original code by reporter +class A[T] +class Test1 { + def x(backing: Map[A[_], Any]) = + for( (k: A[kt], v) <- backing) + yield (k: A[kt]) +} + +// this tests same thing as above, but independent of library classes, +// earlier expansions eliminated as well as variance (everything's invariant) +case class Holder[A](a: A) +class Mapped[A] { def map[T](f: Holder[A] => T): Iterable[T] = ??? } +class Test2 { + def works(backing: Mapped[A[_]]): Iterable[A[_]] + = backing.map(x => + x match {case Holder(k: A[kt]) => (k: A[kt])} + ) +}
\ No newline at end of file |