diff options
author | Paul Phillips <paulp@improving.org> | 2012-11-30 05:25:16 +0100 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-12-27 15:47:31 -0800 |
commit | bf253b8983ec3a2807d2137a9e29b732135eb2dc (patch) | |
tree | beae0e24d1af2d2668805efd58c6087c3bf85b0e /src | |
parent | 1697132ec8e0df21c98a1420d186c58e02af69ab (diff) | |
download | scala-bf253b8983ec3a2807d2137a9e29b732135eb2dc.tar.gz scala-bf253b8983ec3a2807d2137a9e29b732135eb2dc.tar.bz2 scala-bf253b8983ec3a2807d2137a9e29b732135eb2dc.zip |
Eliminate allocations in TypeMap.
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/api/Trees.scala | 2 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 9 |
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 = { |