summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan@lightbend.com>2016-08-12 17:09:15 -0700
committerAdriaan Moors <adriaan@lightbend.com>2016-08-29 09:52:29 +0200
commitb5c5f30d1838d29e409d0ffab40966c996c644dd (patch)
tree0a8ad7851f7447a0c40395ae9edbe288ef2f76c9 /src
parent63f7b357f787b96ddf0440c779b1937844cbbb52 (diff)
downloadscala-b5c5f30d1838d29e409d0ffab40966c996c644dd.tar.gz
scala-b5c5f30d1838d29e409d0ffab40966c996c644dd.tar.bz2
scala-b5c5f30d1838d29e409d0ffab40966c996c644dd.zip
optimize/simplify erasure of class info type
Diffstat (limited to 'src')
-rw-r--r--src/reflect/scala/reflect/internal/transform/Erasure.scala19
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)
}