diff options
author | Adriaan Moors <adriaan@lightbend.com> | 2016-11-29 16:09:57 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-29 16:09:57 -0800 |
commit | dd7a53c00a218dab374e3e27d52c1574c811f844 (patch) | |
tree | 0980f4f1fcbaf2b9d092d5e699aca28d91935e85 /src/reflect/scala/reflect/internal/tpe | |
parent | 6659c3ac3d29084583c47bf9f51eb2a5f1b77308 (diff) | |
parent | 44dac961782aa1193493c181e8423d7751c013ee (diff) | |
download | scala-dd7a53c00a218dab374e3e27d52c1574c811f844.tar.gz scala-dd7a53c00a218dab374e3e27d52c1574c811f844.tar.bz2 scala-dd7a53c00a218dab374e3e27d52c1574c811f844.zip |
Merge pull request #5506 from retronym/topic/existential-ids
Avoid name table pollution with fresh existentials
Diffstat (limited to 'src/reflect/scala/reflect/internal/tpe')
-rw-r--r-- | src/reflect/scala/reflect/internal/tpe/TypeMaps.scala | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala b/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala index ba4f2bec4b..08219c0634 100644 --- a/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala +++ b/src/reflect/scala/reflect/internal/tpe/TypeMaps.scala @@ -512,6 +512,8 @@ private[internal] trait TypeMaps { && isBaseClassOfEnclosingClass(sym.owner) ) + private var capturedThisIds= 0 + private def nextCapturedThisId() = { capturedThisIds += 1; capturedThisIds } /** Creates an existential representing a type parameter which appears * in the prefix of a ThisType. */ @@ -519,7 +521,7 @@ private[internal] trait TypeMaps { capturedParams find (_.owner == clazz) match { case Some(p) => p.tpe case _ => - val qvar = clazz freshExistential nme.SINGLETON_SUFFIX setInfo singletonBounds(pre) + val qvar = clazz.freshExistential(nme.SINGLETON_SUFFIX, nextCapturedThisId()) setInfo singletonBounds(pre) _capturedParams ::= qvar debuglog(s"Captured This(${clazz.fullNameString}) seen from $seenFromPrefix: ${qvar.defString}") qvar.tpe |