summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-11-30 06:23:51 +0100
committerPaul Phillips <paulp@improving.org>2012-12-27 15:47:32 -0800
commitcdf6feb1aea366c33ac99e3e5f1e235f7ea0ae19 (patch)
tree289b80a32c98dbebd3aed7ef6e5e4f33c749245d /src
parent9a6320b882495e93210b0e11dad02271306d83d2 (diff)
downloadscala-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.scala9
-rw-r--r--src/compiler/scala/tools/nsc/transform/UnCurry.scala3
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.