diff options
author | Martin Odersky <odersky@gmail.com> | 2013-11-13 14:56:07 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-11-13 14:57:35 +0100 |
commit | 753c534b1b2014d252e7562a39c3cd1cc16c8e76 (patch) | |
tree | 33a1852b8e44bad0cd6e6b75d3bf7033b437a6f8 /src | |
parent | fd04d5a83356b35cdcf6e8f09c62b1a2626a7828 (diff) | |
download | dotty-753c534b1b2014d252e7562a39c3cd1cc16c8e76.tar.gz dotty-753c534b1b2014d252e7562a39c3cd1cc16c8e76.tar.bz2 dotty-753c534b1b2014d252e7562a39c3cd1cc16c8e76.zip |
widen if unstable prefix
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/core/Decorators.scala | 7 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Flags.scala | 4 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 10 |
3 files changed, 16 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/core/Decorators.scala b/src/dotty/tools/dotc/core/Decorators.scala index 7888d2f8c..eb287f411 100644 --- a/src/dotty/tools/dotc/core/Decorators.scala +++ b/src/dotty/tools/dotc/core/Decorators.scala @@ -98,6 +98,13 @@ object Decorators { (xs1 eq xs.tail)) xs else x1 :: xs1 } + + final def hasSameLengthAs[U](ys: List[U]): Boolean = { + @tailrec def loop(xs: List[T], ys: List[U]): Boolean = + if (xs.isEmpty) ys.isEmpty + else ys.nonEmpty && loop(xs.tail, ys.tail) + loop(xs, ys) + } } implicit class ListOfListDecorator[T](val xss: List[List[T]]) extends AnyVal { diff --git a/src/dotty/tools/dotc/core/Flags.scala b/src/dotty/tools/dotc/core/Flags.scala index 956b67ffb..70761ebf3 100644 --- a/src/dotty/tools/dotc/core/Flags.scala +++ b/src/dotty/tools/dotc/core/Flags.scala @@ -451,6 +451,10 @@ object Flags { /** An abstract class or a trait */ final val AbstractOrTrait = Abstract | Trait + /** A local symbol, or one which has an expanded name (type parameters go from one to the other). + */ + final val LocalOrExpanded = Local | ExpandedName + /** Labeled `private` or `protected[local]` */ final val PrivateOrLocal = Private | Local diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 241c0e899..42ecb7a2a 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -310,7 +310,7 @@ class TypeComparer(initctx: Context) extends DotClass { case tp1 @ MethodType(_, formals2) => tp1.signature == tp2.signature && /*(if (newMatch) subsumeParams(formals1, formals2, tp1.isJava, tp2.isJava) - else */matchingParams(formals1, formals2, tp1.isJava, tp2.isJava)) && + else */matchingParams(formals1, formals2, tp1.isJava, tp2.isJava) && tp1.isImplicit == tp2.isImplicit && // needed? isSubType(tp1.resultType, tp2.resultType.subst(tp2, tp1)) case _ => @@ -674,8 +674,8 @@ class TypeComparer(initctx: Context) extends DotClass { } case tp1 @ MethodType(names1, formals1) => tp2 match { - case tp2 @ MethodType(names2, formals2) -/* if newMatch && (tp1.isImplicit == tp2.isImplicit) && formals1.hasSameLengthAs(formals2) => +/* case tp2 @ MethodType(names2, formals2) + if newMatch && (tp1.isImplicit == tp2.isImplicit) && formals1.hasSameLengthAs(formals2) => tp1.derivedMethodType( mergeNames(names1, names2, nme.syntheticParamName), (formals1 zipWithConserve formals2)(_ | _), @@ -748,8 +748,8 @@ class TypeComparer(initctx: Context) extends DotClass { } case tp1 @ MethodType(names1, formals1) => tp2 match { - case tp2 @ MethodType(names2, formals2) -/* if newMatch && (tp1.isImplicit == tp2.isImplicit) && formals1.hasSameLengthAs(formals2) => +/* case tp2 @ MethodType(names2, formals2) + if newMatch && (tp1.isImplicit == tp2.isImplicit) && formals1.hasSameLengthAs(formals2) => tp1.derivedMethodType( mergeNames(names1, names2, nme.syntheticParamName), (formals1 zipWithConserve formals2)(_ & _), |