summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-11-30 05:25:16 +0100
committerPaul Phillips <paulp@improving.org>2012-12-27 15:47:31 -0800
commitbf253b8983ec3a2807d2137a9e29b732135eb2dc (patch)
treebeae0e24d1af2d2668805efd58c6087c3bf85b0e
parent1697132ec8e0df21c98a1420d186c58e02af69ab (diff)
downloadscala-bf253b8983ec3a2807d2137a9e29b732135eb2dc.tar.gz
scala-bf253b8983ec3a2807d2137a9e29b732135eb2dc.tar.bz2
scala-bf253b8983ec3a2807d2137a9e29b732135eb2dc.zip
Eliminate allocations in TypeMap.
-rw-r--r--src/reflect/scala/reflect/api/Trees.scala2
-rw-r--r--src/reflect/scala/reflect/internal/Types.scala9
2 files changed, 8 insertions, 3 deletions
diff --git a/src/reflect/scala/reflect/api/Trees.scala b/src/reflect/scala/reflect/api/Trees.scala
index cfa6315797..94226ae866 100644
--- a/src/reflect/scala/reflect/api/Trees.scala
+++ b/src/reflect/scala/reflect/api/Trees.scala
@@ -2921,7 +2921,7 @@ trait Trees { self: Universe =>
def transform(tree: Tree): Tree = itransform(this, tree)
/** Transforms a list of trees. */
- def transformTrees(trees: List[Tree]): List[Tree] = trees mapConserve (transform(_))
+ def transformTrees(trees: List[Tree]): List[Tree] = trees mapConserve transform
/** Transforms a `Template`. */
def transformTemplate(tree: Template): Template =
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala
index 599bc2e264..b706ef8abe 100644
--- a/src/reflect/scala/reflect/internal/Types.scala
+++ b/src/reflect/scala/reflect/internal/Types.scala
@@ -4082,8 +4082,13 @@ trait Types extends api.Types { self: SymbolTable =>
/** Called by mapOver to determine whether the original symbols can
* be returned, or whether they must be cloned. Overridden in VariantTypeMap.
*/
- protected def noChangeToSymbols(origSyms: List[Symbol]) =
- origSyms forall (sym => sym.info eq this(sym.info))
+ protected def noChangeToSymbols(origSyms: List[Symbol]): Boolean = {
+ @tailrec def loop(syms: List[Symbol]): Boolean = syms match {
+ case Nil => true
+ case x :: xs => (x.info eq this(x.info)) && loop(xs)
+ }
+ loop(origSyms)
+ }
/** Map this function over given scope */
def mapOver(scope: Scope): Scope = {