Skip to content

Commit 84bc1bd

Browse files
committed
TypeErasure: Rename wildcardOK to inSigName
Its meaning will be expanded in the next commit.
1 parent 50dc2a2 commit 84bc1bd

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

Diff for: compiler/src/dotty/tools/dotc/core/TypeErasure.scala

+20-20
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,9 @@ object TypeErasure {
169169
}
170170
}
171171

172-
private def erasureIdx(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, wildcardOK: Boolean) =
172+
private def erasureIdx(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, inSigName: Boolean) =
173173
extension (b: Boolean) def toInt = if b then 1 else 0
174-
wildcardOK.toInt
174+
inSigName.toInt
175175
+ (isSymbol.toInt << 1)
176176
+ (isConstructor.toInt << 2)
177177
+ (semiEraseVCs.toInt << 3)
@@ -184,16 +184,16 @@ object TypeErasure {
184184
semiEraseVCs <- List(false, true)
185185
isConstructor <- List(false, true)
186186
isSymbol <- List(false, true)
187-
wildcardOK <- List(false, true)
187+
inSigName <- List(false, true)
188188
do
189-
erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK)) =
190-
new TypeErasure(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK)
189+
erasures(erasureIdx(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName)) =
190+
new TypeErasure(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName)
191191

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

198198
/** The current context with a phase no later than erasure */
199199
def preErasureCtx(using Context) =
@@ -204,19 +204,19 @@ object TypeErasure {
204204
* @param tp The type to erase.
205205
*/
206206
def erasure(tp: Type)(using Context): Type =
207-
erasureFn(sourceLanguage = SourceLanguage.Scala3, semiEraseVCs = false, isConstructor = false, isSymbol = false, wildcardOK = false)(tp)(using preErasureCtx)
207+
erasureFn(sourceLanguage = SourceLanguage.Scala3, semiEraseVCs = false, isConstructor = false, isSymbol = false, inSigName = false)(tp)(using preErasureCtx)
208208

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

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

221221
/** Like value class erasure, but value classes erase to their underlying type erasure */
222222
def fullErasure(tp: Type)(using Context): Type =
@@ -226,7 +226,7 @@ object TypeErasure {
226226

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

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

261261
def eraseParamBounds(tp: PolyType): Type =
262262
tp.derivedLambdaType(
@@ -582,10 +582,10 @@ import TypeErasure._
582582
* If false, they are erased like normal classes.
583583
* @param isConstructor Argument forms part of the type of a constructor
584584
* @param isSymbol If true, the type being erased is the info of a symbol.
585-
* @param wildcardOK Wildcards are acceptable (true when using the erasure
586-
* for computing a signature name).
585+
* @param inSigName This eraser is used for `TypeErasure.sigName`,
586+
* see `TypeErasure#apply` for more information.
587587
*/
588-
class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, wildcardOK: Boolean) {
588+
class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConstructor: Boolean, isSymbol: Boolean, inSigName: Boolean) {
589589

590590
/** The erasure |T| of a type T. This is:
591591
*
@@ -673,7 +673,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
673673
TypeComparer.orType(this(tp1), this(tp2), isErased = true)
674674
case tp: MethodType =>
675675
def paramErasure(tpToErase: Type) =
676-
erasureFn(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, wildcardOK)(tpToErase)
676+
erasureFn(sourceLanguage, semiEraseVCs, isConstructor, isSymbol, inSigName)(tpToErase)
677677
val (names, formals0) = if tp.hasErasedParams then
678678
tp.paramNames
679679
.zip(tp.paramInfos)
@@ -725,7 +725,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
725725
}
726726
case _: ErrorType | JavaArrayType(_) =>
727727
tp
728-
case tp: WildcardType if wildcardOK =>
728+
case tp: WildcardType if inSigName =>
729729
tp
730730
case tp if (tp `eq` NoType) || (tp `eq` NoPrefix) =>
731731
tp
@@ -760,7 +760,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
760760
val defn.ArrayOf(elemtp) = tp: @unchecked
761761
if (isGenericArrayElement(elemtp, isScala2 = sourceLanguage.isScala2)) defn.ObjectType
762762
else
763-
try JavaArrayType(erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, wildcardOK)(elemtp))
763+
try JavaArrayType(erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, inSigName)(elemtp))
764764
catch case ex: Throwable =>
765765
handleRecursive("erase array type", tp.show, ex)
766766
}
@@ -804,7 +804,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
804804
val underlying = tp.select(unbox).widen.resultType
805805

806806
// The underlying part of an ErasedValueType cannot be an ErasedValueType itself
807-
val erase = erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, wildcardOK)
807+
val erase = erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, inSigName)
808808
val erasedUnderlying = erase(underlying)
809809

810810
// Ideally, we would just use `erasedUnderlying` as the erasure of `tp`, but to
@@ -843,7 +843,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
843843
// correctly (see SIP-15 and [[Erasure.Boxing.adaptToType]]), so the result type of a
844844
// constructor method should not be semi-erased.
845845
if semiEraseVCs && isConstructor && !tp.isInstanceOf[MethodOrPoly] then
846-
erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, wildcardOK).eraseResult(tp)
846+
erasureFn(sourceLanguage, semiEraseVCs = false, isConstructor, isSymbol, inSigName).eraseResult(tp)
847847
else tp match
848848
case tp: TypeRef =>
849849
val sym = tp.symbol

0 commit comments

Comments
 (0)