From 428c6918f948e3b4e1107487a96fafc24c535e4e Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Mon, 22 Jun 2015 20:50:19 +0200 Subject: TypeErasure#erasure: do not semi-erase types by default This method can be called from other phases than Erasure, and in most cases we do not want the result to be semi-erased as this is an implementation details of value classes only useful to do type adaptation in the Erasure phase. --- src/dotty/tools/dotc/core/TypeErasure.scala | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/dotty/tools/dotc/core') diff --git a/src/dotty/tools/dotc/core/TypeErasure.scala b/src/dotty/tools/dotc/core/TypeErasure.scala index 92e32d4b1..abe5418d4 100644 --- a/src/dotty/tools/dotc/core/TypeErasure.scala +++ b/src/dotty/tools/dotc/core/TypeErasure.scala @@ -110,7 +110,14 @@ object TypeErasure { private def erasureCtx(implicit ctx: Context) = if (ctx.erasedTypes) ctx.withPhase(ctx.erasurePhase).addMode(Mode.FutureDefsOK) else ctx - def erasure(tp: Type, semiEraseVCs: Boolean = true)(implicit ctx: Context): Type = + /** The standard erasure of a Scala type. + * + * @param tp The type to erase. + * @param semiEraseVCs If true, value classes are semi-erased to ErasedValueType + * (they will be fully erased in [[ElimErasedValueType]]). + * If false, they are erased like normal classes. + */ + def erasure(tp: Type, semiEraseVCs: Boolean = false)(implicit ctx: Context): Type = erasureFn(isJava = false, semiEraseVCs, isConstructor = false, wildcardOK = false)(tp)(erasureCtx) def sigName(tp: Type, isJava: Boolean)(implicit ctx: Context): TypeName = { @@ -134,7 +141,7 @@ object TypeErasure { case tp: ThisType => tp case tp => - erasure(tp) + erasure(tp, semiEraseVCs = true) } /** The symbol's erased info. This is the type's erasure, except for the following symbols: @@ -389,7 +396,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) - ErasedValueType(cls, erasure(underlying)) + ErasedValueType(cls, erasure(underlying, semiEraseVCs = true)) } -- cgit v1.2.3