summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-10-18 01:50:29 -0700
committerJason Zaugg <jzaugg@gmail.com>2013-10-18 01:50:29 -0700
commitdb43498ae719cf0adb06aa56f423a2452f3b1687 (patch)
tree3173580fe2b6e3faf5b95e80b5f07b4117adb96b /src
parent1571af7a8a7e78b67d052f371abc44c751930666 (diff)
parentfbbc767b7a001436185c631b9fb7e688dbdf3a6a (diff)
downloadscala-db43498ae719cf0adb06aa56f423a2452f3b1687.tar.gz
scala-db43498ae719cf0adb06aa56f423a2452f3b1687.tar.bz2
scala-db43498ae719cf0adb06aa56f423a2452f3b1687.zip
Merge pull request #3045 from retronym/ticket/7688-4
Fix AsSeenFrom of ThisType from TypeVar prefix
Diffstat (limited to 'src')
-rw-r--r--src/reflect/scala/reflect/internal/tpe/TypeMaps.scala7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala b/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala
index 7e98ac03d5..9a54ad8217 100644
--- a/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala
+++ b/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala
@@ -581,6 +581,7 @@ private[internal] trait TypeMaps {
else if (!matchesPrefixAndClass(pre, clazz)(tparam.owner))
loop(nextBase.prefix, clazz.owner)
else nextBase match {
+ case NoType => loop(NoType, clazz.owner) // backstop for SI-2797, must remove `SingletonType#isHigherKinded` and run pos/t2797.scala to get here.
case applied @ TypeRef(_, _, _) => correspondingTypeArgument(classParam, applied)
case ExistentialType(eparams, qtpe) => captureSkolems(eparams) ; loop(qtpe, clazz)
case t => abort(s"$tparam in ${tparam.owner} cannot be instantiated from ${seenFromPrefix.widen}")
@@ -593,10 +594,8 @@ private[internal] trait TypeMaps {
// Since pre may be something like ThisType(A) where trait A { self: B => },
// we have to test the typeSymbol of the widened type, not pre.typeSymbol, or
// B will not be considered.
- private def matchesPrefixAndClass(pre: Type, clazz: Symbol)(candidate: Symbol) = pre.widen match {
- case _: TypeVar => false
- case wide => (clazz == candidate) && (wide.typeSymbol isSubClass clazz)
- }
+ private def matchesPrefixAndClass(pre: Type, clazz: Symbol)(candidate: Symbol) =
+ (clazz == candidate) && (pre.widen.typeSymbol isSubClass clazz)
// Whether the annotation tree currently being mapped over has had a This(_) node rewritten.
private[this] var wroteAnnotation = false