summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-12-20 08:18:37 -0800
committerPaul Phillips <paulp@improving.org>2011-12-30 10:57:49 -0800
commitd3b05c0c34d57e2db5fa001fac5cb4ad57bb69dd (patch)
treedb60f036ed041ca097a8fa0e9bcce2fbba71ae76 /src
parentde6f825ba6ba28f594142f50abead8d2c21e765f (diff)
downloadscala-d3b05c0c34d57e2db5fa001fac5cb4ad57bb69dd.tar.gz
scala-d3b05c0c34d57e2db5fa001fac5cb4ad57bb69dd.tar.bz2
scala-d3b05c0c34d57e2db5fa001fac5cb4ad57bb69dd.zip
Optimization in method synthesis.
Discovered expensive flag operations being performed on the wrong side of the only-when-logging by-name argument.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/reflect/internal/Flags.scala1
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala6
-rw-r--r--src/compiler/scala/tools/util/StringOps.scala7
3 files changed, 9 insertions, 5 deletions
diff --git a/src/compiler/scala/reflect/internal/Flags.scala b/src/compiler/scala/reflect/internal/Flags.scala
index 8366c6d63a..489dee7092 100644
--- a/src/compiler/scala/reflect/internal/Flags.scala
+++ b/src/compiler/scala/reflect/internal/Flags.scala
@@ -7,6 +7,7 @@ package scala.reflect
package internal
import api.Modifier
+import scala.collection.{ mutable, immutable }
// Flags at each index of a flags Long. Those marked with /M are used in
// Parsers/JavaParsers and therefore definitely appear on Modifiers; but the
diff --git a/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala b/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala
index d75e119fd7..7915a64e21 100644
--- a/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala
@@ -7,6 +7,7 @@ package typechecker
import symtab.Flags._
import scala.collection.{ mutable, immutable }
+import scala.tools.util.StringOps.{ ojoin }
object listutil {
def mexists[T](xss: List[List[T]])(p: T => Boolean) =
@@ -166,8 +167,9 @@ trait MethodSynthesis {
}
}
private def logDerived(result: Tree): Tree = {
- val id = List(mods.defaultFlagString, basisSym.accurateKindString, basisSym.getterName) filterNot (_ == "") mkString " "
- log("[+derived] " + id + " (" + derivedSym + ")\n " + result)
+ log("[+derived] " + ojoin(mods.defaultFlagString, basisSym.accurateKindString, basisSym.getterName.decode)
+ + " (" + derivedSym + ")\n " + result)
+
result
}
final def derive(initial: List[AnnotationInfo]): Tree = {
diff --git a/src/compiler/scala/tools/util/StringOps.scala b/src/compiler/scala/tools/util/StringOps.scala
index 2773aad87f..02eb364abe 100644
--- a/src/compiler/scala/tools/util/StringOps.scala
+++ b/src/compiler/scala/tools/util/StringOps.scala
@@ -17,9 +17,10 @@ package util
* @version 1.0
*/
trait StringOps {
- def onull(s: String) = if (s == null) "" else s
- def oempty(xs: String*) = xs filterNot (x => x == null || x == "")
- def ojoin(xs: Seq[String], sep: String) = oempty(xs: _*) mkString sep
+ def onull(s: String) = if (s == null) "" else s
+ def oempty(xs: String*) = xs filterNot (x => x == null || x == "")
+ def ojoin(xs: String*): String = oempty(xs: _*) mkString " "
+ def ojoin(xs: Seq[String], sep: String): String = oempty(xs: _*) mkString sep
def ojoinOr(xs: Seq[String], sep: String, orElse: String) = {
val ys = oempty(xs: _*)
if (ys.isEmpty) orElse else ys mkString sep