summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-02-18 10:40:32 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-02-18 10:40:32 -0800
commitea17de17dd8fddb509fe9bb3ce1d126cd9955abd (patch)
treeefde77e7ce3f08219ea8757d7b86b8350d042939 /src
parent3a3d0de023895d8b386974bfe1fb55886cbdce83 (diff)
parentb6cbee9d81320524aa2e8a3d80dbf2062dd43fd2 (diff)
downloadscala-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.scala1
-rw-r--r--src/reflect/scala/reflect/internal/Types.scala10
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
}