diff options
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/scala/collection/mutable/StringBuilder.scala | 11 | ||||
-rwxr-xr-x | src/library/scala/reflect/generic/Flags.scala | 39 |
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 _)) } |