Skip to content

Commit f274112

Browse files
committed
TypeErasure: Rename wildcardOK to inSigName
Its meaning was expanded in the previous commit.
1 parent d125176 commit f274112

File tree

1 file changed

+24
-24
lines changed

1 file changed

+24
-24
lines changed

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

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,9 @@ object TypeErasure {
172172
}
173173
}
174174

175-
private def erasureIdx(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, wildcardOK: Boolean) =
175+
private def erasureIdx(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, inSigName: Boolean) =
176176
extension (b: Boolean) def toInt = if b then 1 else 0
177-
wildcardOK.toInt
177+
inSigName.toInt
178178
+ (isSymbol.toInt << 1)
179179
+ (isConstructor.toInt << 2)
180180
+ (semiEraseVCs.toInt << 3)
@@ -187,16 +187,16 @@ object TypeErasure {
187187
semiEraseVCs <- List(false, true)
188188
isConstructor <- List(false, true)
189189
isSymbol <- List(false, true)
190-
wildcardOK <- List(false, true)
190+
inSigName <- List(false, true)
191191
do
192-
erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK)) =
193-
new TypeErasure(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK)
192+
erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName)) =
193+
new TypeErasure(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName)
194194

195195
/** Produces an erasure function. See the documentation of the class [[TypeErasure]]
196196
* for a description of each parameter.
197197
*/
198-
private def erasureFn(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, wildcardOK: Boolean): TypeErasure =
199-
erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK))
198+
private def erasureFn(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, inSigName: Boolean): TypeErasure =
199+
erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName))
200200

201201
/** The current context with a phase no later than erasure */
202202
def preErasureCtx(using Context) =
@@ -207,19 +207,19 @@ object TypeErasure {
207207
* @param tp The type to erase.
208208
*/
209209
def erasure(tp: Type)(using Context): Type =
210-
erasureFn(sourceLanguage = SourceLanguage.Scala3, semiEraseVCs = false, isConstructor = false, isSymbol = false, wildcardOK = false)(tp)(using preErasureCtx).nn
210+
erasureFn(sourceLanguage = SourceLanguage.Scala3, semiEraseVCs = false, isConstructor = false, isSymbol = false, inSigName = false)(tp)(using preErasureCtx).nn
211211

212212
/** The value class erasure of a Scala type, where value classes are semi-erased to
213213
* ErasedValueType (they will be fully erased in [[ElimErasedValueType]]).
214214
*
215215
* @param tp The type to erase.
216216
*/
217217
def valueErasure(tp: Type)(using Context): Type =
218-
erasureFn(sourceLanguage = SourceLanguage.Scala3, semiEraseVCs = true, isConstructor = false, isSymbol = false, wildcardOK = false)(tp)(using preErasureCtx).nn
218+
erasureFn(sourceLanguage = SourceLanguage.Scala3, semiEraseVCs = true, isConstructor = false, isSymbol = false, inSigName = false)(tp)(using preErasureCtx).nn
219219

220220
/** The erasure that Scala 2 would use for this type. */
221221
def scala2Erasure(tp: Type)(using Context): Type =
222-
erasureFn(sourceLanguage = SourceLanguage.Scala2, semiEraseVCs = true, isConstructor = false, isSymbol = false, wildcardOK = false)(tp)(using preErasureCtx).nn
222+
erasureFn(sourceLanguage = SourceLanguage.Scala2, semiEraseVCs = true, isConstructor = false, isSymbol = false, inSigName = false)(tp)(using preErasureCtx).nn
223223

224224
/** Like value class erasure, but value classes erase to their underlying type erasure */
225225
def fullErasure(tp: Type)(using Context): Type =
@@ -229,7 +229,7 @@ object TypeErasure {
229229

230230
def sigName(tp: Type, sourceLanguage: SourceLanguage)(using Context): TypeName = {
231231
val normTp = tp.translateFromRepeated(toArray = sourceLanguage.isJava)
232-
val erase = erasureFn(sourceLanguage, semiEraseVCs = !sourceLanguage.isJava, isConstructor = false, isSymbol = false, wildcardOK = true)
232+
val erase = erasureFn(sourceLanguage, semiEraseVCs = !sourceLanguage.isJava, isConstructor = false, isSymbol = false, inSigName = true)
233233
erase.sigName(normTp)(using preErasureCtx)
234234
}
235235

@@ -259,7 +259,7 @@ object TypeErasure {
259259
def transformInfo(sym: Symbol, tp: Type)(using Context): Type = {
260260
val sourceLanguage = SourceLanguage(sym)
261261
val semiEraseVCs = !sourceLanguage.isJava // Java sees our value classes as regular classes.
262-
val erase = erasureFn(sourceLanguage, semiEraseVCs, sym.isConstructor, isSymbol = true, wildcardOK = false)
262+
val erase = erasureFn(sourceLanguage, semiEraseVCs, sym.isConstructor, isSymbol = true, inSigName = false)
263263

264264
def eraseParamBounds(tp: PolyType): Type =
265265
tp.derivedLambdaType(
@@ -585,10 +585,10 @@ import TypeErasure._
585585
* If false, they are erased like normal classes.
586586
* @param isConstructor Argument forms part of the type of a constructor
587587
* @param isSymbol If true, the type being erased is the info of a symbol.
588-
* @param wildcardOK Wildcards and uninstantiated type variables are valid input
589-
* (only set to true by `TypeErasure.sigName`)
588+
* @param inSigName This eraser is used for `TypeErasure.sigName`,
589+
* see `TypeErasure#apply` for more information.
590590
*/
591-
class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, wildcardOK: Boolean) {
591+
class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, inSigName: Boolean) {
592592

593593
/** The erasure |T| of a type T.
594594
*
@@ -661,7 +661,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
661661
case RefinedType(parent, nme.apply, refinedInfo: MethodType) if defn.isErasedFunctionType(parent) =>
662662
eraseErasedFunctionApply(refinedInfo)
663663
case tp: TypeVar if !tp.inst.exists =>
664-
assert(wildcardOK, i"Cannot erase non-permanently instantiated type variable $tp")
664+
assert(inSigName, i"Cannot erase non-permanently instantiated type variable $tp")
665665
null
666666
case tp: TypeProxy =>
667667
this(tp.underlying)
@@ -694,7 +694,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
694694
else TypeComparer.orType(e1, e2, isErased = true)
695695
case tp: MethodType =>
696696
def paramErasure(tpToErase: Type) =
697-
erasureFn(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK = false)(tpToErase).nn
697+
erasureFn(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName = false)(tpToErase).nn
698698
val (names, formals0) = if tp.hasErasedParams then
699699
tp.paramNames
700700
.zip(tp.paramInfos)
@@ -747,11 +747,11 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
747747
case _: ErrorType | JavaArrayType(_) =>
748748
tp
749749
case tp: WildcardType =>
750-
assert(wildcardOK, i"Cannot erase wildcard type $tp")
750+
assert(inSigName, i"Cannot erase wildcard type $tp")
751751
null
752752
case tp if (tp `eq` NoType) || (tp `eq` NoPrefix) => // Why is this check different?
753753
tp
754-
).ensuring(etp => etp != null || wildcardOK)
754+
).ensuring(etp => etp != null || inSigName)
755755

756756
/** Like translucentSuperType, but issue a fatal error if it does not exist. */
757757
private def checkedSuperType(tp: TypeProxy)(using Context): Type =
@@ -783,7 +783,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
783783
if (isGenericArrayElement(elemtp, isScala2 = sourceLanguage.isScala2)) defn.ObjectType
784784
else
785785
try
786-
val eElem = erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, wildcardOK)(elemtp)
786+
val eElem = erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, inSigName)(elemtp)
787787
if eElem == null then null
788788
else JavaArrayType(eElem)
789789
catch case ex: Throwable =>
@@ -805,7 +805,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
805805
* to the underlying type.
806806
*/
807807
def eraseInfo(tp: Type, sym: Symbol)(using Context): Type =
808-
assert(!wildcardOK) // therefore apply(...).nn won't fail
808+
assert(!inSigName) // therefore apply(...).nn won't fail
809809
val tp1 = tp match
810810
case tp: MethodicType => integrateContextResults(tp, contextResultCount(sym))
811811
case _ => tp
@@ -833,7 +833,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
833833
val underlying = tp.select(unbox).widen.resultType
834834

835835
// The underlying part of an ErasedValueType cannot be an ErasedValueType itself
836-
val erase = erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, wildcardOK)
836+
val erase = erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, inSigName)
837837
val erasedUnderlying = erase(underlying)
838838
if erasedUnderlying == null then return null
839839

@@ -869,12 +869,12 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
869869

870870
/** The erasure of a function result type. */
871871
def eraseResult(tp: Type)(using Context): Type =
872-
assert(!wildcardOK) // therefore apply(...).nn won't fail
872+
assert(!inSigName) // therefore apply(...).nn won't fail
873873
// For a value class V, "new V(x)" should have type V for type adaptation to work
874874
// correctly (see SIP-15 and [[Erasure.Boxing.adaptToType]]), so the result type of a
875875
// constructor method should not be semi-erased.
876876
if semiEraseVCs && isConstructor && !tp.isInstanceOf[MethodOrPoly] then
877-
erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, wildcardOK).eraseResult(tp)
877+
erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, inSigName).eraseResult(tp)
878878
else tp match
879879
case tp: TypeRef =>
880880
val sym = tp.symbol

0 commit comments

Comments
 (0)