Skip to content

Commit 97635db

Browse files
committed
Get rid of semiEraseVCs boolean parameters
Replace by the pair of methods erasure/valueErasure. The boolean parameter is still kept, but only as a confuration parameter of the erasure objects.
1 parent bd8b5bb commit 97635db

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

src/dotty/tools/dotc/core/TypeErasure.scala

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,20 @@ object TypeErasure {
110110
private def erasureCtx(implicit ctx: Context) =
111111
if (ctx.erasedTypes) ctx.withPhase(ctx.erasurePhase).addMode(Mode.FutureDefsOK) else ctx
112112

113-
/** The standard erasure of a Scala type.
113+
/** The standard erasure of a Scala type. Value classes are erased as normal classes.
114+
*
115+
* @param tp The type to erase.
116+
*/
117+
def erasure(tp: Type)(implicit ctx: Context): Type =
118+
erasureFn(isJava = false, semiEraseVCs = false, isConstructor = false, wildcardOK = false)(tp)(erasureCtx)
119+
120+
/** The value class erasure of a Scala type, where value classes are semi-erased to
121+
* ErasedValueType (they will be fully erased in [[ElimErasedValueType]]).
114122
*
115123
* @param tp The type to erase.
116-
* @param semiEraseVCs If true, value classes are semi-erased to ErasedValueType
117-
* (they will be fully erased in [[ElimErasedValueType]]).
118-
* If false, they are erased like normal classes.
119124
*/
120-
def erasure(tp: Type, semiEraseVCs: Boolean = false)(implicit ctx: Context): Type =
121-
erasureFn(isJava = false, semiEraseVCs, isConstructor = false, wildcardOK = false)(tp)(erasureCtx)
125+
def valueErasure(tp: Type)(implicit ctx: Context): Type =
126+
erasureFn(isJava = false, semiEraseVCs = true, isConstructor = false, wildcardOK = false)(tp)(erasureCtx)
122127

123128
def sigName(tp: Type, isJava: Boolean)(implicit ctx: Context): TypeName = {
124129
val seqClass = if (isJava) defn.ArrayClass else defn.SeqClass
@@ -141,7 +146,7 @@ object TypeErasure {
141146
case tp: ThisType =>
142147
tp
143148
case tp =>
144-
erasure(tp, semiEraseVCs = true)
149+
valueErasure(tp)
145150
}
146151

147152
/** The symbol's erased info. This is the type's erasure, except for the following symbols:
@@ -392,7 +397,7 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean
392397
private def eraseDerivedValueClassRef(tref: TypeRef)(implicit ctx: Context): Type = {
393398
val cls = tref.symbol.asClass
394399
val underlying = underlyingOfValueClass(cls)
395-
ErasedValueType(cls, erasure(underlying, semiEraseVCs = true))
400+
ErasedValueType(cls, valueErasure(underlying))
396401
}
397402

398403

src/dotty/tools/dotc/transform/Erasure.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ object Erasure extends TypeTestsCasts{
270270

271271
def erasedType(tree: untpd.Tree)(implicit ctx: Context): Type = {
272272
val tp = tree.typeOpt
273-
if (tree.isTerm) erasedRef(tp) else erasure(tp, semiEraseVCs = true)
273+
if (tree.isTerm) erasedRef(tp) else valueErasure(tp)
274274
}
275275

276276
override def promote(tree: untpd.Tree)(implicit ctx: Context): tree.ThisTree[Type] = {
@@ -285,7 +285,7 @@ object Erasure extends TypeTestsCasts{
285285
* are handled separately by [[typedDefDef]], [[typedValDef]] and [[typedTyped]].
286286
*/
287287
override def typedTypeTree(tree: untpd.TypeTree, pt: Type)(implicit ctx: Context): TypeTree =
288-
tree.withType(erasure(tree.tpe, semiEraseVCs = false))
288+
tree.withType(erasure(tree.tpe))
289289

290290
/** This override is only needed to semi-erase type ascriptions */
291291
override def typedTyped(tree: untpd.Typed, pt: Type)(implicit ctx: Context): Tree = {
@@ -454,7 +454,7 @@ object Erasure extends TypeTestsCasts{
454454
if (pt.isValueType) pt else {
455455
if (tree.typeOpt.derivesFrom(ctx.definitions.UnitClass))
456456
tree.typeOpt
457-
else erasure(tree.typeOpt, semiEraseVCs = true)
457+
else valueErasure(tree.typeOpt)
458458
}
459459
}
460460

src/dotty/tools/dotc/transform/ExtensionMethods.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import core._
1414
import Phases.Phase
1515
import Types._, Contexts._, Constants._, Names._, NameOps._, Flags._, DenotTransformers._
1616
import SymDenotations._, Symbols._, StdNames._, Annotations._, Trees._, Scopes._, Denotations._
17-
import TypeErasure.{ erasure, ErasedValueType }
17+
import TypeErasure.{ erasure, valueErasure, ErasedValueType }
1818
import TypeUtils._
1919
import util.Positions._
2020
import Decorators._
@@ -65,7 +65,7 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
6565
}
6666
}
6767

68-
val underlying = erasure(underlyingOfValueClass(valueClass), semiEraseVCs = true)
68+
val underlying = valueErasure(underlyingOfValueClass(valueClass))
6969
val evt = ErasedValueType(valueClass, underlying)
7070
val u2evtSym = ctx.newSymbol(moduleSym, nme.U2EVT, Synthetic | Method,
7171
MethodType(List(nme.x_0), List(underlying), evt))

0 commit comments

Comments
 (0)