summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-05-09 19:07:40 +0000
committerPaul Phillips <paulp@improving.org>2011-05-09 19:07:40 +0000
commit1a92fb60e6853fca4b4e5bd0d03f913c300100ae (patch)
treeb287e88e828d2dd788d6b9c1bb0242ae4f03c21b /src/library
parent41ac77599ce022087ec595b6da4874b39472019b (diff)
downloadscala-1a92fb60e6853fca4b4e5bd0d03f913c300100ae.tar.gz
scala-1a92fb60e6853fca4b4e5bd0d03f913c300100ae.tar.bz2
scala-1a92fb60e6853fca4b4e5bd0d03f913c300100ae.zip
Another round of optimization.
exciting as the original, but not a bad way to spend a rainy afternoon. Most changes involve files and paths, which are we find exercised rather heavily at startup. This patch takes about 15 seconds off my time to build quick. No review.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/collection/mutable/StringBuilder.scala11
-rwxr-xr-xsrc/library/scala/reflect/generic/Flags.scala39
2 files changed, 36 insertions, 14 deletions
diff --git a/src/library/scala/collection/mutable/StringBuilder.scala b/src/library/scala/collection/mutable/StringBuilder.scala
index edd59a8221..8d7ed8bcd2 100644
--- a/src/library/scala/collection/mutable/StringBuilder.scala
+++ b/src/library/scala/collection/mutable/StringBuilder.scala
@@ -171,6 +171,17 @@ final class StringBuilder(private val underlying: JavaStringBuilder)
*/
def +=(x: Char): this.type = { append(x); this }
+ /** Optimization.
+ */
+ def ++=(s: String): this.type = {
+ underlying append s
+ this
+ }
+ def appendAll(xs: String): StringBuilder = {
+ underlying append xs
+ this
+ }
+
/** !!! This should create a new sequence.
*/
def +(x: Char): this.type = { +=(x); this }
diff --git a/src/library/scala/reflect/generic/Flags.scala b/src/library/scala/reflect/generic/Flags.scala
index d7c8ff9296..3291047831 100755
--- a/src/library/scala/reflect/generic/Flags.scala
+++ b/src/library/scala/reflect/generic/Flags.scala
@@ -102,7 +102,7 @@ class Flags extends ModifierFlags {
final val PickledFlags: Long = 0xFFFFFFFFL
- private val rawPickledCorrespondence = List(
+ private def rawPickledCorrespondence = Array(
(IMPLICIT, IMPLICIT_PKL),
(FINAL, FINAL_PKL),
(PRIVATE, PRIVATE_PKL),
@@ -116,20 +116,31 @@ class Flags extends ModifierFlags {
(MODULE, MODULE_PKL),
(INTERFACE, INTERFACE_PKL)
)
- private def mkCorrespondenceArray(correspondence: List[(Int, Int)]) = {
- def f(flags: Int): Int = {
- correspondence.foldLeft(0) {
- case (result, (oldFlag, newFlag)) =>
- if ((flags & oldFlag) != 0) result | newFlag
- else result
- }
+ private val rawFlags: Array[Int] = rawPickledCorrespondence map (_._1)
+ private val pickledFlags: Array[Int] = rawPickledCorrespondence map (_._2)
+
+ private def r2p(flags: Int): Int = {
+ var result = 0
+ var i = 0
+ while (i < rawFlags.length) {
+ if ((flags & rawFlags(i)) != 0)
+ result |= pickledFlags(i)
+
+ i += 1
+ }
+ result
+ }
+ private def p2r(flags: Int): Int = {
+ var result = 0
+ var i = 0
+ while (i < rawFlags.length) {
+ if ((flags & pickledFlags(i)) != 0)
+ result |= rawFlags(i)
+
+ i += 1
}
- 0 to PKL_MASK map f toArray
+ result
}
- /** A map from the raw to pickled flags, and vice versa.
- */
- private val r2p = mkCorrespondenceArray(rawPickledCorrespondence)
- private val p2r = mkCorrespondenceArray(rawPickledCorrespondence map (_.swap))
// Generated by mkFlagToStringMethod() at Mon Oct 11 10:07:29 PDT 2010
@annotation.switch override def flagToString(flag: Long): String = flag match {
@@ -232,7 +243,7 @@ class Flags extends ModifierFlags {
// List of the raw flags, in pickled order
protected val pickledListOrder: List[Long] = {
val all = 0 to 62 map (1L << _)
- val front = rawPickledCorrespondence map (_._1.toLong)
+ val front = rawFlags map (_.toLong)
front.toList ++ (all filterNot (front contains _))
}