From 28193a6c53482cbec36530c25dc1a26438b81a18 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 22 Oct 2015 12:01:56 +0200 Subject: Avoid caching in sigName Use more complicated control flow with returns instead. sigName is likely performance critical, so some trickiness is justified. --- src/dotty/tools/dotc/core/TypeErasure.scala | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/dotty/tools/dotc/core/TypeErasure.scala') 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) => -- cgit v1.2.3