summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-11-30 11:04:58 +0100
committerPaul Phillips <paulp@improving.org>2012-12-27 15:47:32 -0800
commit57c40c54d6119c42e256d6f7c4c7681a5257b266 (patch)
tree4f03c9273baf17eed9508420788348b03b5ba504 /src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
parent113405b935db20705b88df4fd3ff24273e4391bc (diff)
downloadscala-57c40c54d6119c42e256d6f7c4c7681a5257b266.tar.gz
scala-57c40c54d6119c42e256d6f7c4c7681a5257b266.tar.bz2
scala-57c40c54d6119c42e256d6f7c4c7681a5257b266.zip
Eliminate allocations in Specialize.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
index 173ca1e628..116b6ab58f 100644
--- a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
+++ b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
@@ -10,6 +10,7 @@ import scala.tools.nsc.symtab.Flags
import scala.collection.{ mutable, immutable }
import scala.language.postfixOps
import scala.language.existentials
+import scala.annotation.tailrec
/** Specialize code on types.
*
@@ -403,11 +404,11 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
case _ => false
})
def specializedTypeVars(tpes: List[Type]): immutable.Set[Symbol] = {
- if (tpes.isEmpty) immutable.Set.empty else {
- val buf = Set.newBuilder[Symbol]
- tpes foreach (tp => buf ++= specializedTypeVars(tp))
- buf.result
+ @tailrec def loop(result: immutable.Set[Symbol], xs: List[Type]): immutable.Set[Symbol] = {
+ if (xs.isEmpty) result
+ else loop(result ++ specializedTypeVars(xs.head), xs.tail)
}
+ loop(immutable.Set.empty, tpes)
}
def specializedTypeVars(sym: Symbol): immutable.Set[Symbol] = (
if (definitions.neverHasTypeParameters(sym)) immutable.Set.empty