aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/TypeOps.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-04-10 16:35:01 +0200
committerMartin Odersky <odersky@gmail.com>2017-04-11 18:00:59 +0200
commit053cd236ee12f877cfd71affb9a62a417f917d3d (patch)
treec6e6a1c078e64e1719896f519a3cb95ebf7326d7 /compiler/src/dotty/tools/dotc/core/TypeOps.scala
parent9917029becab32d56e786ac9309ee195737f6da0 (diff)
downloaddotty-053cd236ee12f877cfd71affb9a62a417f917d3d.tar.gz
dotty-053cd236ee12f877cfd71affb9a62a417f917d3d.tar.bz2
dotty-053cd236ee12f877cfd71affb9a62a417f917d3d.zip
Fix #2152: Instantiate dependent result type parameters
#2152 shows that dependent result type parameters can end up in the types of terms, so we have to eliminate them. If we don't we get orphan parameters in pickling. Fix method name and comment
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/TypeOps.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/TypeOps.scala4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/TypeOps.scala b/compiler/src/dotty/tools/dotc/core/TypeOps.scala
index 9593bfe93..0de823e97 100644
--- a/compiler/src/dotty/tools/dotc/core/TypeOps.scala
+++ b/compiler/src/dotty/tools/dotc/core/TypeOps.scala
@@ -7,6 +7,7 @@ import SymDenotations._, Denotations.SingleDenotation
import config.Printers.typr
import util.Positions._
import NameOps._
+import NameKinds.DepParamName
import Decorators._
import StdNames._
import Annotations._
@@ -169,6 +170,9 @@ trait TypeOps { this: Context => // TODO: Make standalone object.
simplify(l, theMap) & simplify(r, theMap)
case OrType(l, r) =>
simplify(l, theMap) | simplify(r, theMap)
+ case tp: TypeVar if tp.origin.paramName.is(DepParamName) =>
+ val effectiveVariance = if (theMap == null) 1 else theMap.variance
+ tp.instanceOpt orElse tp.instantiate(fromBelow = effectiveVariance != -1)
case _ =>
(if (theMap != null) theMap else new SimplifyMap).mapOver(tp)
}