summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-07-04 20:40:05 +0000
committerPaul Phillips <paulp@improving.org>2011-07-04 20:40:05 +0000
commit257a7e65deb01c9e161c83ea5fd7a2b3c862e5e1 (patch)
treebccde9a93d807606c604ba898968316ff61fbaf5 /src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala
parent9e7d7e021cd49851257aca44b81e20427d886529 (diff)
downloadscala-257a7e65deb01c9e161c83ea5fd7a2b3c862e5e1.tar.gz
scala-257a7e65deb01c9e161c83ea5fd7a2b3c862e5e1.tar.bz2
scala-257a7e65deb01c9e161c83ea5fd7a2b3c862e5e1.zip
Fixed a bug in the optimizer which was preventi...
Fixed a bug in the optimizer which was preventing private methods from being inlined. Also relaxes a condition related to the "liftedTry" problem: the inliner has to exclude certain methods from consideration if there is a value on the stack and the method being inlined has exception handlers. The new condition is as before, except that it does not exclude methods of the "try/finally" variety (i.e. finalizers, but no other exception handlers.) This is necessary to optimize this common pattern: @inline private def foo(body: => Unit) { val saved = something try body finally something = saved } The closure for "body" can be fully eliminated, but only if the contents of foo can be inlined into the caller. Closes #4764, review by rompf.
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala
index d458b2546f..cfce0878ed 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/SemiLattice.scala
@@ -3,7 +3,6 @@
* @author Martin Odersky
*/
-
package scala.tools.nsc
package backend.icode
package analysis
@@ -26,6 +25,11 @@ trait SemiLattice {
case _ =>
false
}
+ private def tstring(x: Any): String = x match {
+ case xs: TraversableOnce[_] => xs map tstring mkString " "
+ case _ => "" + x
+ }
+ override def toString = "IState(" + tstring(vars) + ", " + tstring(stack) + ")"
}
/** Return the least upper bound of a and b. */