Skip to content

Commit 28193a6

Browse files
committed
Avoid caching in sigName
Use more complicated control flow with returns instead. sigName is likely performance critical, so some trickiness is justified.
1 parent f1b3859 commit 28193a6

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -446,17 +446,16 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean
446446
case tp: TypeRef =>
447447
if (!tp.denot.exists) throw new MissingType(tp.prefix, tp.name)
448448
val sym = tp.symbol
449-
var edvc: Type = null
450-
def dvcErasure: Type = {
451-
if (edvc == null) edvc = eraseDerivedValueClassRef(tp)
452-
edvc
453-
}
454449
if (!sym.isClass) {
455450
val info = tp.info
456451
if (!info.exists) assert(false, "undefined: $tp with symbol $sym")
457-
sigName(info)
458-
} else if (isDerivedValueClass(sym) && dvcErasure.exists) sigName(dvcErasure)
459-
else normalizeClass(sym.asClass).fullName.asTypeName
452+
return sigName(info)
453+
}
454+
if (isDerivedValueClass(sym)) {
455+
val erasedVCRef = eraseDerivedValueClassRef(tp)
456+
if (erasedVCRef.exists) return sigName(erasedVCRef)
457+
}
458+
normalizeClass(sym.asClass).fullName.asTypeName
460459
case defn.ArrayType(elem) =>
461460
sigName(this(tp))
462461
case JavaArrayType(elem) =>

0 commit comments

Comments
 (0)