aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/TypeErasure.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-06-29 20:26:08 +0200
committerMartin Odersky <odersky@gmail.com>2016-07-11 13:35:06 +0200
commitae360e93ad7f657992fc305e1b0755ef3ff0f166 (patch)
tree1470c75977f959f8552264fc006665bb97555fec /src/dotty/tools/dotc/core/TypeErasure.scala
parent6bd7ba9ea4484ee2065dd16077cba6c26b2050d9 (diff)
downloaddotty-ae360e93ad7f657992fc305e1b0755ef3ff0f166.tar.gz
dotty-ae360e93ad7f657992fc305e1b0755ef3ff0f166.tar.bz2
dotty-ae360e93ad7f657992fc305e1b0755ef3ff0f166.zip
Handle signatures over uninstantiated type variables
Taking the signature over a type with uninstantiated type variables means that the signature can change later, once we instantiate the type variable. We handle this by recording uninstantiated positions of signatures and fixing them in PostTyper, when type variables are instantiated. - This allows to drop the kludge of "normalizing" in derivedRefinedType Dropping this initially revealed the problems with under-determined signatures. Now that these problems are fixed, we can drop for good.
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeErasure.scala')
-rw-r--r--src/dotty/tools/dotc/core/TypeErasure.scala3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/core/TypeErasure.scala b/src/dotty/tools/dotc/core/TypeErasure.scala
index c71726a3e..74d2d193f 100644
--- a/src/dotty/tools/dotc/core/TypeErasure.scala
+++ b/src/dotty/tools/dotc/core/TypeErasure.scala
@@ -476,6 +476,9 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean
sigName(tp.widen)
case ExprType(rt) =>
sigName(defn.FunctionOf(Nil, rt))
+ case tp: TypeVar =>
+ val inst = tp.instanceOpt
+ if (inst.exists) sigName(inst) else tpnme.Uninstantiated
case tp: TypeProxy =>
sigName(tp.underlying)
case ErrorType | WildcardType =>