aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Applications.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-01-11 02:15:22 +0100
committerMartin Odersky <odersky@gmail.com>2014-01-11 02:15:22 +0100
commit561e2e864daa2cd017aa938a73739e5af6c4c306 (patch)
tree288e61b727e48f07790850c97baf87004746ba25 /src/dotty/tools/dotc/typer/Applications.scala
parent937dbdcf1d15548a6870c18514441d7b4e0bf234 (diff)
downloaddotty-561e2e864daa2cd017aa938a73739e5af6c4c306.tar.gz
dotty-561e2e864daa2cd017aa938a73739e5af6c4c306.tar.bz2
dotty-561e2e864daa2cd017aa938a73739e5af6c4c306.zip
Strip implicit parameters when deciding specifity of methods.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Applications.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Applications.scala10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/Applications.scala b/src/dotty/tools/dotc/typer/Applications.scala
index d70c19f96..9ed05ff97 100644
--- a/src/dotty/tools/dotc/typer/Applications.scala
+++ b/src/dotty/tools/dotc/typer/Applications.scala
@@ -763,10 +763,16 @@ 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
+ }
+
val owner1 = alt1.symbol.owner
val owner2 = alt2.symbol.owner
- val tp1 = alt1.widen
- val tp2 = alt2.widen
+ val tp1 = stripImplicit(alt1.widen)
+ val tp2 = stripImplicit(alt2.widen)
def winsOwner1 = isDerived(owner1, owner2)
def winsType1 = isAsSpecific(alt1, tp1, alt2, tp2)