diff options
author | Paul Phillips <paulp@improving.org> | 2011-12-20 08:18:37 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-12-30 10:57:49 -0800 |
commit | d3b05c0c34d57e2db5fa001fac5cb4ad57bb69dd (patch) | |
tree | db60f036ed041ca097a8fa0e9bcce2fbba71ae76 | |
parent | de6f825ba6ba28f594142f50abead8d2c21e765f (diff) | |
download | scala-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.
-rw-r--r-- | src/compiler/scala/reflect/internal/Flags.scala | 1 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/util/StringOps.scala | 7 |
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 |