From 079943e3cd18faa034aca3b154314e6f7a94a546 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 3 Apr 2016 13:52:36 +0200 Subject: Make erased value type take a TypeRef instead of a ClassSymbol To address #1198, we need to avoid putting symbols in ErasedValueTypes. --- src/dotty/tools/dotc/core/TypeErasure.scala | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/dotty/tools/dotc/core/TypeErasure.scala') diff --git a/src/dotty/tools/dotc/core/TypeErasure.scala b/src/dotty/tools/dotc/core/TypeErasure.scala index a7d825131..88c8d610e 100644 --- a/src/dotty/tools/dotc/core/TypeErasure.scala +++ b/src/dotty/tools/dotc/core/TypeErasure.scala @@ -69,17 +69,17 @@ object TypeErasure { * @param cls The value class symbol * @param erasedUnderlying The erased type of the single field of the value class */ - abstract case class ErasedValueType(cls: ClassSymbol, erasedUnderlying: Type) + abstract case class ErasedValueType(tycon: TypeRef, erasedUnderlying: Type) extends CachedGroundType with ValueType { - override def computeHash = doHash(cls, erasedUnderlying) + override def computeHash = doHash(tycon, erasedUnderlying) } - final class CachedErasedValueType(cls: ClassSymbol, erasedUnderlying: Type) - extends ErasedValueType(cls, erasedUnderlying) + final class CachedErasedValueType(tycon: TypeRef, erasedUnderlying: Type) + extends ErasedValueType(tycon, erasedUnderlying) object ErasedValueType { - def apply(cls: ClassSymbol, erasedUnderlying: Type)(implicit ctx: Context) = { - unique(new CachedErasedValueType(cls, erasedUnderlying)) + def apply(tycon: TypeRef, erasedUnderlying: Type)(implicit ctx: Context) = { + unique(new CachedErasedValueType(tycon, erasedUnderlying)) } } @@ -411,7 +411,7 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean private def eraseDerivedValueClassRef(tref: TypeRef)(implicit ctx: Context): Type = { val cls = tref.symbol.asClass val underlying = underlyingOfValueClass(cls) - if (underlying.exists) ErasedValueType(cls, valueErasure(underlying)) + if (underlying.exists) ErasedValueType(tref, valueErasure(underlying)) else NoType } -- cgit v1.2.3