diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-02-18 10:40:32 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-02-18 10:40:32 -0800 |
commit | ea17de17dd8fddb509fe9bb3ce1d126cd9955abd (patch) | |
tree | efde77e7ce3f08219ea8757d7b86b8350d042939 /src | |
parent | 3a3d0de023895d8b386974bfe1fb55886cbdce83 (diff) | |
parent | b6cbee9d81320524aa2e8a3d80dbf2062dd43fd2 (diff) | |
download | scala-ea17de17dd8fddb509fe9bb3ce1d126cd9955abd.tar.gz scala-ea17de17dd8fddb509fe9bb3ce1d126cd9955abd.tar.bz2 scala-ea17de17dd8fddb509fe9bb3ce1d126cd9955abd.zip |
Merge pull request #4341 from retronym/ticket/9157
SI-9157 Avoid exponential blowup with chained type projections
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala | 1 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 10 |
2 files changed, 5 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala b/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala index 743bbe53bd..02356580cc 100644 --- a/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala @@ -266,7 +266,6 @@ abstract class TreeCheckers extends Analyzer { if (tree ne typed) treesDiffer(tree, typed) - tree } diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index ce36f7efa3..8f114caac0 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -1976,13 +1976,13 @@ trait Types * usage scenario. */ private var relativeInfoCache: Type = _ - private var memberInfoCache: Type = _ + private var relativeInfoPeriod: Period = NoPeriod - private[Types] def relativeInfo = { - val memberInfo = pre.memberInfo(sym) - if (relativeInfoCache == null || (memberInfo ne memberInfoCache)) { - memberInfoCache = memberInfo + private[Types] def relativeInfo = /*trace(s"relativeInfo(${safeToString}})")*/{ + if (relativeInfoPeriod != currentPeriod) { + val memberInfo = pre.memberInfo(sym) relativeInfoCache = transformInfo(memberInfo) + relativeInfoPeriod = currentPeriod } relativeInfoCache } |