diff options
author | Paul Phillips <paulp@improving.org> | 2012-11-30 06:23:51 +0100 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-12-27 15:47:32 -0800 |
commit | cdf6feb1aea366c33ac99e3e5f1e235f7ea0ae19 (patch) | |
tree | 289b80a32c98dbebd3aed7ef6e5e4f33c749245d /src | |
parent | 9a6320b882495e93210b0e11dad02271306d83d2 (diff) | |
download | scala-cdf6feb1aea366c33ac99e3e5f1e235f7ea0ae19.tar.gz scala-cdf6feb1aea366c33ac99e3e5f1e235f7ea0ae19.tar.bz2 scala-cdf6feb1aea366c33ac99e3e5f1e235f7ea0ae19.zip |
Eliminate allocations in uncurry and the backend.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/icode/Members.scala | 9 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/UnCurry.scala | 3 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/Members.scala b/src/compiler/scala/tools/nsc/backend/icode/Members.scala index 12daa32186..248a505b54 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/Members.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/Members.scala @@ -46,8 +46,13 @@ trait Members { def touched = _touched def touched_=(b: Boolean): Unit = { - if (b) - blocks foreach (_.touched = true) + @annotation.tailrec def loop(xs: List[BasicBlock]) { + xs match { + case Nil => + case x :: xs => x.touched = true ; loop(xs) + } + } + if (b) loop(blocks.toList) _touched = b } diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala index 6e89f6387e..f4e40a216e 100644 --- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala +++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala @@ -114,7 +114,8 @@ abstract class UnCurry extends InfoTransform def isByNameRef(tree: Tree) = ( tree.isTerm && !byNameArgs(tree) - && tree.hasSymbolWhich(isByName) + && (tree.symbol ne null) + && (isByName(tree.symbol)) ) /** Uncurry a type of a tree node. |