summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/CleanUp.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-04 14:17:25 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-04 14:17:25 +0100
commit8265175ecc42293997d59049f430396c77a2b891 (patch)
treea24c7820bee892eb802d5c691e1e57a62ff43bb4 /src/compiler/scala/tools/nsc/transform/CleanUp.scala
parentdad886659faca4fba2d4937c9bc6780591b02c27 (diff)
downloadscala-8265175ecc42293997d59049f430396c77a2b891.tar.gz
scala-8265175ecc42293997d59049f430396c77a2b891.tar.bz2
scala-8265175ecc42293997d59049f430396c77a2b891.zip
Expand optimization of Array(e1, ..., en) to primitive arrays.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/CleanUp.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/CleanUp.scala7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/CleanUp.scala b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
index bdcebf47b8..4f145d3d7e 100644
--- a/src/compiler/scala/tools/nsc/transform/CleanUp.scala
+++ b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
@@ -629,6 +629,13 @@ abstract class CleanUp extends Transform with ast.TreeDSL {
_.tpe.resultType.dealias.typeSymbol == ObjectClass // [T: ClassTag](xs: T*): Array[T] post erasure
}) =>
super.transform(arg)
+ case Apply(appMeth, List(elem0, Apply(wrapArrayMeth, List(rest @ ArrayValue(elemtpt, _)))))
+ if wrapArrayMeth.symbol == Predef_wrapArray(elemtpt.tpe) &&
+ appMeth.symbol == ArrayModule_overloadedApply.suchThat {
+ tp => tp.tpe.paramss.flatten.lift.apply(1).exists(_.tpe.typeSymbol == SeqClass) &&
+ tp.tpe.resultType =:= arrayType(elemtpt.tpe) // (p1: AnyVal1, ps: AnyVal1*): Array[AnyVal1] post erasure
+ } =>
+ super.transform(rest.copy(elems = elem0 :: rest.elems))
case _ =>
super.transform(tree)