summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-06 14:15:25 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-06 14:15:25 +0100
commited3709a5dfd84f073a9a99e43418f693adbac07c (patch)
treeab1b04a4893109a7e0e3a831f86bddb16714672d
parent757a3a738cbb373f8f10fdc1f01e9ab6176a7076 (diff)
downloadscala-ed3709a5dfd84f073a9a99e43418f693adbac07c.tar.gz
scala-ed3709a5dfd84f073a9a99e43418f693adbac07c.tar.bz2
scala-ed3709a5dfd84f073a9a99e43418f693adbac07c.zip
Revert "Refactor guards checking for a particular overload of Array.apply."
This reverts commit 092345a24c22a821204fb358d33272ae8f7353be.
-rw-r--r--src/compiler/scala/tools/nsc/transform/CleanUp.scala11
-rw-r--r--src/reflect/scala/reflect/internal/Definitions.scala2
2 files changed, 9 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/CleanUp.scala b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
index 3b74cb1168..6af7b78181 100644
--- a/src/compiler/scala/tools/nsc/transform/CleanUp.scala
+++ b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
@@ -624,10 +624,17 @@ abstract class CleanUp extends Transform with ast.TreeDSL {
//
// See SI-6611; we must *only* do this for literal vararg arrays.
case Apply(appMeth, List(Apply(wrapRefArrayMeth, List(arg @ StripCast(ArrayValue(_, _)))), _))
- if wrapRefArrayMeth.symbol == Predef_wrapRefArray && appMeth.symbol == ArrayModule_genericApply =>
+ if (wrapRefArrayMeth.symbol == Predef_wrapRefArray &&
+ appMeth.symbol == ArrayModule_overloadedApply.suchThat {
+ _.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_apply(elemtpt.tpe) =>
+ 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 _ =>
diff --git a/src/reflect/scala/reflect/internal/Definitions.scala b/src/reflect/scala/reflect/internal/Definitions.scala
index df4258253f..60a1913548 100644
--- a/src/reflect/scala/reflect/internal/Definitions.scala
+++ b/src/reflect/scala/reflect/internal/Definitions.scala
@@ -471,8 +471,6 @@ trait Definitions extends api.StandardDefinitions {
// arrays and their members
lazy val ArrayModule = requiredModule[scala.Array.type]
lazy val ArrayModule_overloadedApply = getMemberMethod(ArrayModule, nme.apply)
- def ArrayModule_genericApply = ArrayModule_overloadedApply.suchThat(_.paramss.flatten.last.tpe.typeSymbol == ClassTagClass) // [T: ClassTag](xs: T*): Array[T]
- def ArrayModule_apply(tp: Type) = ArrayModule_overloadedApply.suchThat(_.tpe.resultType =:= arrayType(tp)) // (p1: AnyVal1, ps: AnyVal1*): Array[AnyVal1]
lazy val ArrayClass = getRequiredClass("scala.Array") // requiredClass[scala.Array[_]]
lazy val Array_apply = getMemberMethod(ArrayClass, nme.apply)
lazy val Array_update = getMemberMethod(ArrayClass, nme.update)