diff options
author | Adriaan Moors <adriaan@lightbend.com> | 2016-08-12 17:09:15 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan@lightbend.com> | 2016-08-29 09:52:29 +0200 |
commit | b5c5f30d1838d29e409d0ffab40966c996c644dd (patch) | |
tree | 0a8ad7851f7447a0c40395ae9edbe288ef2f76c9 /src/reflect | |
parent | 63f7b357f787b96ddf0440c779b1937844cbbb52 (diff) | |
download | scala-b5c5f30d1838d29e409d0ffab40966c996c644dd.tar.gz scala-b5c5f30d1838d29e409d0ffab40966c996c644dd.tar.bz2 scala-b5c5f30d1838d29e409d0ffab40966c996c644dd.zip |
optimize/simplify erasure of class info type
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/scala/reflect/internal/transform/Erasure.scala | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/reflect/scala/reflect/internal/transform/Erasure.scala b/src/reflect/scala/reflect/internal/transform/Erasure.scala index 62ca50d035..a9e26c0f7d 100644 --- a/src/reflect/scala/reflect/internal/transform/Erasure.scala +++ b/src/reflect/scala/reflect/internal/transform/Erasure.scala @@ -147,21 +147,20 @@ trait Erasure { case AnnotatedType(_, atp) => apply(atp) case ClassInfoType(parents, decls, clazz) => - ClassInfoType( - if (clazz == ObjectClass || isPrimitiveValueClass(clazz) || parents.isEmpty) Nil + val newParents = + if (parents.isEmpty || clazz == ObjectClass || isPrimitiveValueClass(clazz)) Nil else if (clazz == ArrayClass) ObjectTpe :: Nil else { - val erasedParents = parents map this + val erasedParents = parents mapConserve this // drop first parent for traits -- it has been normalized to a class by now, // but we should drop that in bytecode - val firstParent = - if (clazz.hasFlag(Flags.TRAIT) && !clazz.hasFlag(Flags.JAVA)) ObjectTpe - else erasedParents.head - - firstParent :: erasedParents.tail.filter(_.typeSymbol != ObjectClass) - }, - decls, clazz) + if (clazz.hasFlag(Flags.TRAIT) && !clazz.hasFlag(Flags.JAVA)) + ObjectTpe :: erasedParents.tail.filter(_.typeSymbol != ObjectClass) + else erasedParents + } + if (newParents eq parents) tp + else ClassInfoType(newParents, decls, clazz) case _ => mapOver(tp) } |