summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-10-27 21:08:48 +0000
committerPaul Phillips <paulp@improving.org>2010-10-27 21:08:48 +0000
commit683af5895e3dead6a6dac3c9939a7bcd2c7bad18 (patch)
tree21eb75593208fb124c29393b680044616c8ccfde /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parentba6fbcef841743e5e8690a7be8f86148a9513557 (diff)
downloadscala-683af5895e3dead6a6dac3c9939a7bcd2c7bad18.tar.gz
scala-683af5895e3dead6a6dac3c9939a7bcd2c7bad18.tar.bz2
scala-683af5895e3dead6a6dac3c9939a7bcd2c7bad18.zip
A double goodness whammy involving type inferen...
A double goodness whammy involving type inference at the borders. 1) Implicit search preserves singleton type fidelity. 2) Unification of parent bounds is (closer to) correct. Result of 1: "implicit def f(x: Foo.type)" will convert object Foo. Result of 2: "new Trait[Int] { }" may enjoy its type constructor being inferred, no longer foiled by the anonymous class. Also included are some clarity-enhnancing renamings and refactorings. Performance note: I heavily benchmarked the change to isSubArgs and it is reproducibly faster than the previous implementation. Numbers and methodology available upon request. Closes #2693, #3964. Review by moors, who wrote most of this patch but might like to review the comments.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 31eea8c9ed..c3a9fe5c9e 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -1044,7 +1044,7 @@ trait Typers { self: Analyzer =>
qtpe = qtpe.normalize.skolemizeExistential(context.owner, qual) // open the existential
qual setType qtpe
}
- val coercion = inferView(qual, qtpe, searchTemplate, true)
+ val coercion = inferView(qual, qual.tpe, searchTemplate, true)
if (coercion != EmptyTree)
typedQualifier(atPos(qual.pos)(new ApplyImplicitView(coercion, List(qual))))
else