File tree Expand file tree Collapse file tree 3 files changed +18
-6
lines changed
compiler/scala/tools/nsc/typechecker
reflect/scala/reflect/internal Expand file tree Collapse file tree 3 files changed +18
-6
lines changed Original file line number Diff line number Diff line change @@ -266,7 +266,6 @@ abstract class TreeCheckers extends Analyzer {
266
266
267
267
if (tree ne typed)
268
268
treesDiffer(tree, typed)
269
-
270
269
tree
271
270
}
272
271
Original file line number Diff line number Diff line change @@ -1976,13 +1976,13 @@ trait Types
1976
1976
* usage scenario.
1977
1977
*/
1978
1978
private var relativeInfoCache : Type = _
1979
- private var memberInfoCache : Type = _
1979
+ private var relativeInfoPeriod : Period = NoPeriod
1980
1980
1981
- private [Types ] def relativeInfo = {
1982
- val memberInfo = pre.memberInfo(sym)
1983
- if (relativeInfoCache == null || (memberInfo ne memberInfoCache)) {
1984
- memberInfoCache = memberInfo
1981
+ private [Types ] def relativeInfo = /* trace(s"relativeInfo(${safeToString}})")*/ {
1982
+ if (relativeInfoPeriod != currentPeriod) {
1983
+ val memberInfo = pre.memberInfo(sym)
1985
1984
relativeInfoCache = transformInfo(memberInfo)
1985
+ relativeInfoPeriod = currentPeriod
1986
1986
}
1987
1987
relativeInfoCache
1988
1988
}
Original file line number Diff line number Diff line change
1
+ trait Flow [- In , + Out ] {
2
+ type Repr [+ O ] <: Flow [In , O ]
3
+ def map : Repr [String ]
4
+ }
5
+
6
+ class Test {
7
+ // typechecking was exponentially slow wrt the number of projections here.
8
+ def slowFlow (
9
+ f : Flow [String ,String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]# Repr [String ]
10
+ ) = {
11
+ f.map
12
+ }
13
+ }
You can’t perform that action at this time.
0 commit comments