aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Applications.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-03-20 10:51:01 +0100
committerTobias Schlatter <tobias@meisch.ch>2014-03-21 11:28:31 +0100
commit5f318bc925c227d2bce5cff31610803185b57f54 (patch)
tree70ab60ecc7fd94666d3428a45e3ed4f3695a9305 /src/dotty/tools/dotc/typer/Applications.scala
parent72a5f392bf11b6474b351cd81a17d0ceeed13dcc (diff)
downloaddotty-5f318bc925c227d2bce5cff31610803185b57f54.tar.gz
dotty-5f318bc925c227d2bce5cff31610803185b57f54.tar.bz2
dotty-5f318bc925c227d2bce5cff31610803185b57f54.zip
Fix of t1272: overloading resolution
stripImplicits needs to take polytypes into account.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Applications.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Applications.scala12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/typer/Applications.scala b/src/dotty/tools/dotc/typer/Applications.scala
index 4d26532d6..46a6ebf66 100644
--- a/src/dotty/tools/dotc/typer/Applications.scala
+++ b/src/dotty/tools/dotc/typer/Applications.scala
@@ -785,9 +785,13 @@ trait Applications extends Compatibility { self: Typer =>
}}
/** Drop any implicit parameter section */
- def stripImplicit(tp: Type) = tp match {
- case mt: ImplicitMethodType if !mt.isDependent => mt.resultType // todo: make sure implicit method types are not dependent
- case _ => tp
+ def stripImplicit(tp: Type): Type = tp match {
+ case mt: ImplicitMethodType if !mt.isDependent =>
+ mt.resultType // todo: make sure implicit method types are not dependent
+ case pt: PolyType =>
+ pt.derivedPolyType(pt.paramNames, pt.paramBounds, stripImplicit(pt.resultType))
+ case _ =>
+ tp
}
val owner1 = alt1.symbol.owner
@@ -800,6 +804,8 @@ trait Applications extends Compatibility { self: Typer =>
def winsOwner2 = isDerived(owner2, owner1)
def winsType2 = isAsSpecific(alt2, tp2, alt1, tp1)
+ implicits.println(i"isAsGood($alt1, $alt2)? $tp1 $tp2 $winsOwner1 $winsType1 $winsOwner2 $winsType2")
+
// Assume the following probabilities:
//
// P(winsOwnerX) = 2/3