aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-01-28 16:31:42 +0100
committerMartin Odersky <odersky@gmail.com>2015-02-07 17:32:47 +0100
commit86735bf73de4a165a46ce6215af2e7a814adb9f4 (patch)
treeaa5abf08ea00e68f0821323214cf0dd4cf7f574c /src
parent945576e421e5f7dc82984c4673884ad4c7ddf969 (diff)
downloaddotty-86735bf73de4a165a46ce6215af2e7a814adb9f4.tar.gz
dotty-86735bf73de4a165a46ce6215af2e7a814adb9f4.tar.bz2
dotty-86735bf73de4a165a46ce6215af2e7a814adb9f4.zip
Tweaks to matches
1) Drop redundant signature comparison in overriding pairs 2) Abstract from repeated parameters when calculating matches
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/core/TypeApplications.scala2
-rw-r--r--src/dotty/tools/dotc/core/TypeComparer.scala2
-rw-r--r--src/dotty/tools/dotc/transform/OverridingPairs.scala7
3 files changed, 3 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/core/TypeApplications.scala b/src/dotty/tools/dotc/core/TypeApplications.scala
index 998b4f944..4a16ca45d 100644
--- a/src/dotty/tools/dotc/core/TypeApplications.scala
+++ b/src/dotty/tools/dotc/core/TypeApplications.scala
@@ -285,7 +285,7 @@ class TypeApplications(val self: Type) extends AnyVal {
*/
def underlyingIfRepeated(isJava: Boolean)(implicit ctx: Context): Type =
if (self.isRepeatedParam) {
- val seqClass = if(isJava) defn.ArrayClass else defn.SeqClass
+ val seqClass = if (isJava) defn.ArrayClass else defn.SeqClass
translateParameterized(defn.RepeatedParamClass, seqClass)
}
else self
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala
index 1687d6159..75f7c5922 100644
--- a/src/dotty/tools/dotc/core/TypeComparer.scala
+++ b/src/dotty/tools/dotc/core/TypeComparer.scala
@@ -684,7 +684,7 @@ class TypeComparer(initctx: Context) extends DotClass with ConstraintHandling wi
case formal1 :: rest1 =>
formals2 match {
case formal2 :: rest2 =>
- (isSameType(formal1, formal2)
+ (isSameType(formal1.underlyingIfRepeated(isJava1), formal2.underlyingIfRepeated(isJava2))
|| isJava1 && (formal2 isRef ObjectClass) && (formal1 isRef AnyClass)
|| isJava2 && (formal1 isRef ObjectClass) && (formal2 isRef AnyClass)) &&
matchingParams(rest1, rest2, isJava1, isJava2)
diff --git a/src/dotty/tools/dotc/transform/OverridingPairs.scala b/src/dotty/tools/dotc/transform/OverridingPairs.scala
index bad763f41..650a03054 100644
--- a/src/dotty/tools/dotc/transform/OverridingPairs.scala
+++ b/src/dotty/tools/dotc/transform/OverridingPairs.scala
@@ -39,12 +39,7 @@ object OverridingPairs {
* relative to <base>.this do
*/
protected def matches(sym1: Symbol, sym2: Symbol): Boolean =
- sym1.isType || {
- val info1 = self.memberInfo(sym1)
- val info2 = self.memberInfo(sym2)
- info1.signature.sameParams(info2.signature) &&
- info1.matches(info2)
- }
+ sym1.isType || self.memberInfo(sym1).matches(self.memberInfo(sym2))
/** The symbols that can take part in an overriding pair */
private val decls = {