aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/TypeErasure.scala
diff options
context:
space:
mode:
authorGuillaume Martres <smarter@ubuntu.com>2015-06-22 20:50:19 +0200
committerGuillaume Martres <smarter@ubuntu.com>2015-06-24 10:28:36 +0200
commit428c6918f948e3b4e1107487a96fafc24c535e4e (patch)
tree76c5d6b8a961e69882b8a0b254766ea60594e680 /src/dotty/tools/dotc/core/TypeErasure.scala
parent0fba8757b444d96c748df1e034d39f7626a39d1e (diff)
downloaddotty-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.scala13
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))
}