diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2015-06-22 20:50:19 +0200 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2015-06-24 10:28:36 +0200 |
commit | 428c6918f948e3b4e1107487a96fafc24c535e4e (patch) | |
tree | 76c5d6b8a961e69882b8a0b254766ea60594e680 /src/dotty/tools/dotc/core/TypeErasure.scala | |
parent | 0fba8757b444d96c748df1e034d39f7626a39d1e (diff) | |
download | dotty-428c6918f948e3b4e1107487a96fafc24c535e4e.tar.gz dotty-428c6918f948e3b4e1107487a96fafc24c535e4e.tar.bz2 dotty-428c6918f948e3b4e1107487a96fafc24c535e4e.zip |
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.
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeErasure.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeErasure.scala | 13 |
1 files changed, 10 insertions, 3 deletions
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)) } |