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/transform/Erasure.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/transform/Erasure.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/Erasure.scala | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/transform/Erasure.scala b/src/dotty/tools/dotc/transform/Erasure.scala index 962297517..ad261c16b 100644 --- a/src/dotty/tools/dotc/transform/Erasure.scala +++ b/src/dotty/tools/dotc/transform/Erasure.scala @@ -268,7 +268,7 @@ object Erasure extends TypeTestsCasts{ class Typer extends typer.ReTyper with NoChecking { import Boxing._ - def erasedType(tree: untpd.Tree, semiEraseVCs: Boolean = true)(implicit ctx: Context): Type = + def erasedType(tree: untpd.Tree, semiEraseVCs: Boolean)(implicit ctx: Context): Type = tree.typeOpt match { case tp: TermRef if tree.isTerm => erasedRef(tp) case tp => erasure(tp, semiEraseVCs) @@ -296,7 +296,7 @@ object Erasure extends TypeTestsCasts{ /** This override is only needed to semi-erase type ascriptions */ override def typedTyped(tree: untpd.Typed, pt: Type)(implicit ctx: Context): Tree = { val Typed(expr, tpt) = tree - val tpt1 = promote(tpt) + val tpt1 = promote(tpt, semiEraseVCs = true) val expr1 = typed(expr, tpt1.tpe) assignType(untpd.cpy.Typed(tree)(expr1, tpt1), tpt1) } @@ -460,7 +460,7 @@ object Erasure extends TypeTestsCasts{ if (pt.isValueType) pt else { if (tree.typeOpt.derivesFrom(ctx.definitions.UnitClass)) tree.typeOpt - else erasure(tree.typeOpt) + else erasure(tree.typeOpt, semiEraseVCs = true) } } |