@@ -268,36 +268,29 @@ object Erasure extends TypeTestsCasts{
268
268
class Typer extends typer.ReTyper with NoChecking {
269
269
import Boxing ._
270
270
271
- def erasedType (tree : untpd.Tree , semiEraseVCs : Boolean )(implicit ctx : Context ): Type =
272
- tree.typeOpt match {
273
- case tp : TermRef if tree.isTerm => erasedRef(tp)
274
- case tp : ThisType => tp
275
- case tp => erasure(tp, semiEraseVCs)
276
- }
271
+ def erasedType (tree : untpd.Tree )(implicit ctx : Context ): Type = {
272
+ val tp = tree.typeOpt
273
+ if (tree.isTerm) erasedRef(tp) else erasure(tp, semiEraseVCs = true )
274
+ }
277
275
278
- def promote (tree : untpd.Tree , semiEraseVCs : Boolean )(implicit ctx : Context ): tree.ThisTree [Type ] = {
276
+ override def promote (tree : untpd.Tree )(implicit ctx : Context ): tree.ThisTree [Type ] = {
279
277
assert(tree.hasType)
280
- val erased = erasedType(tree, semiEraseVCs )
278
+ val erased = erasedType(tree)
281
279
ctx.log(s " promoting ${tree.show}: ${erased.showWithUnderlying()}" )
282
280
tree.withType(erased)
283
281
}
284
282
285
- override def promote (tree : untpd.Tree )(implicit ctx : Context ): tree.ThisTree [Type ] = {
286
- promote(tree, true )
287
- }
288
-
289
283
/** When erasing most TypeTrees we should not semi-erase value types.
290
284
* This is not the case for [[DefDef#tpt ]], [[ValDef#tpt ]] and [[Typed#tpt ]], they
291
285
* are handled separately by [[typedDefDef ]], [[typedValDef ]] and [[typedTyped ]].
292
286
*/
293
- override def typedTypeTree (tree : untpd.TypeTree , pt : Type )(implicit ctx : Context ): TypeTree = {
294
- promote(tree, semiEraseVCs = false )
295
- }
287
+ override def typedTypeTree (tree : untpd.TypeTree , pt : Type )(implicit ctx : Context ): TypeTree =
288
+ tree.withType(erasure(tree.tpe, semiEraseVCs = false ))
296
289
297
290
/** This override is only needed to semi-erase type ascriptions */
298
291
override def typedTyped (tree : untpd.Typed , pt : Type )(implicit ctx : Context ): Tree = {
299
292
val Typed (expr, tpt) = tree
300
- val tpt1 = promote(tpt, semiEraseVCs = true )
293
+ val tpt1 = promote(tpt)
301
294
val expr1 = typed(expr, tpt1.tpe)
302
295
assignType(untpd.cpy.Typed (tree)(expr1, tpt1), tpt1)
303
296
}
@@ -385,7 +378,7 @@ object Erasure extends TypeTestsCasts{
385
378
}
386
379
387
380
override def typedSelectFromTypeTree (tree : untpd.SelectFromTypeTree , pt : Type )(implicit ctx : Context ) =
388
- untpd.Ident (tree.name).withPos(tree.pos).withType(erasedType(tree, semiEraseVCs = false ))
381
+ untpd.Ident (tree.name).withPos(tree.pos).withType(erasedType(tree))
389
382
390
383
override def typedThis (tree : untpd.This )(implicit ctx : Context ): Tree =
391
384
if (tree.symbol == ctx.owner.enclosingClass || tree.symbol.isStaticOwner) promote(tree)
0 commit comments