diff options
author | Martin Odersky <odersky@gmail.com> | 2015-10-22 12:01:56 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-10-22 12:21:26 +0200 |
commit | 28193a6c53482cbec36530c25dc1a26438b81a18 (patch) | |
tree | 2046a91a827298876d825022ed80e3d2c6ad15bb /src/dotty/tools/dotc/core/TypeErasure.scala | |
parent | f1b3859911ee04a90a0b169c5eefa2c64ce5d265 (diff) | |
download | dotty-28193a6c53482cbec36530c25dc1a26438b81a18.tar.gz dotty-28193a6c53482cbec36530c25dc1a26438b81a18.tar.bz2 dotty-28193a6c53482cbec36530c25dc1a26438b81a18.zip |
Avoid caching in sigName
Use more complicated control flow with returns instead.
sigName is likely performance critical, so some
trickiness is justified.
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeErasure.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeErasure.scala | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/core/TypeErasure.scala b/src/dotty/tools/dotc/core/TypeErasure.scala index dd6589a08..35c24ff5a 100644 --- a/src/dotty/tools/dotc/core/TypeErasure.scala +++ b/src/dotty/tools/dotc/core/TypeErasure.scala @@ -446,17 +446,16 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean case tp: TypeRef => if (!tp.denot.exists) throw new MissingType(tp.prefix, tp.name) val sym = tp.symbol - var edvc: Type = null - def dvcErasure: Type = { - if (edvc == null) edvc = eraseDerivedValueClassRef(tp) - edvc - } if (!sym.isClass) { val info = tp.info if (!info.exists) assert(false, "undefined: $tp with symbol $sym") - sigName(info) - } else if (isDerivedValueClass(sym) && dvcErasure.exists) sigName(dvcErasure) - else normalizeClass(sym.asClass).fullName.asTypeName + return sigName(info) + } + if (isDerivedValueClass(sym)) { + val erasedVCRef = eraseDerivedValueClassRef(tp) + if (erasedVCRef.exists) return sigName(erasedVCRef) + } + normalizeClass(sym.asClass).fullName.asTypeName case defn.ArrayType(elem) => sigName(this(tp)) case JavaArrayType(elem) => |