summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2007-06-11 09:05:15 +0000
committermihaylov <mihaylov@epfl.ch>2007-06-11 09:05:15 +0000
commit908decebd0f890068221ff586ebd7b3492f37c0f (patch)
tree7a06ff1249f693e16c93c22868b936ac165a510f
parent80d1c7de2a1562592bbbe15ba12c6985bab39274 (diff)
downloadscala-908decebd0f890068221ff586ebd7b3492f37c0f.tar.gz
scala-908decebd0f890068221ff586ebd7b3492f37c0f.tar.bz2
scala-908decebd0f890068221ff586ebd7b3492f37c0f.zip
Improved interface of scala.compat.StringBuilder
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala16
-rw-r--r--src/library/scala/compat/StringBuilder.scala82
-rw-r--r--src/library/scala/xml/PrettyPrinter.scala16
-rw-r--r--src/library/scala/xml/TextBuffer.scala4
-rw-r--r--src/library/scala/xml/Utility.scala14
-rw-r--r--src/library/scala/xml/parsing/ExternalSources.scala4
-rw-r--r--src/library/scala/xml/parsing/MarkupParser.scala34
-rw-r--r--test/files/run/Course-2002-03.scala2
8 files changed, 92 insertions, 80 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
index 6883cd745e..f0995d1b3c 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
@@ -134,7 +134,7 @@ trait MarkupParsers {
nextch
}
val str = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
// @todo: normalize attribute value
// well-formedness constraint
if (str.indexOf('<') != -1) {
@@ -188,7 +188,7 @@ trait MarkupParsers {
if (ch==']' &&
{ sb.append(ch); nextch; ch == ']' } &&
{ sb.append(ch); nextch; ch == '>' }) {
- sb.setLength(sb.length() - 2)
+ sb.length = sb.length - 2
nextch
return handle.charData(pos1, sb.toString())
} else
@@ -217,7 +217,7 @@ trait MarkupParsers {
{ sb.append(ch); nextch; ch == 'e' } &&
{ sb.append(ch); nextch; ch == 'd' } &&
{ sb.append(ch); nextch; ch == '>' }) {
- sb.setLength(sb.length - "</xml:unparsed".length)
+ sb.length = sb.length - "</xml:unparsed".length
nextch
return handle.unparsed(pos1, sb.toString())
} else sb.append(ch)
@@ -264,7 +264,7 @@ trait MarkupParsers {
xToken('-')
while (true) {
if (ch=='-' && { sb.append(ch); nextch; ch == '-' }) {
- sb.setLength(sb.length() - 1)
+ sb.length = sb.length - 1
nextch
xToken('>')
return handle.comment(pos, sb.toString())
@@ -416,10 +416,10 @@ trait MarkupParsers {
} while (xml.Parsing.isNameChar(ch))
if (':' == cbuf.charAt(cbuf.length-1)) {
reportSyntaxError( "name cannot end in ':'" )
- cbuf.setLength(cbuf.length-1)
+ cbuf.length = cbuf.length - 1
}
val n = cbuf.toString().intern()
- cbuf.setLength(0)
+ cbuf.length = 0
n
}
@@ -445,7 +445,7 @@ trait MarkupParsers {
xSpace
while (true) {
if (ch == '?' && { sb.append(ch); nextch; ch == '>' }) {
- sb.setLength(sb.length() - 1)
+ sb.length = sb.length - 1
nextch
return handle.procInstr(tmppos, n.toString(), sb.toString())
} else
@@ -484,7 +484,7 @@ trait MarkupParsers {
exit = xCheckEmbeddedBlock ||(ch == '<') || (ch == '&')
}
val str = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
str
//}
}
diff --git a/src/library/scala/compat/StringBuilder.scala b/src/library/scala/compat/StringBuilder.scala
index ddc80d82cc..ce49bc4cb9 100644
--- a/src/library/scala/compat/StringBuilder.scala
+++ b/src/library/scala/compat/StringBuilder.scala
@@ -11,49 +11,61 @@
package scala.compat
+
import java.lang.{String, StringBuffer}
-final class StringBuilder(str: StringBuffer) {
+
+/** Consult the documentation of java.lang.StringBuffer for more details
+ */
+final class StringBuilder(val self: StringBuffer) extends (Int => Char) with Proxy {
def this() = this(new StringBuffer())
def this(n: Int) = this(new StringBuffer(n))
def this(s: String) = this(new StringBuffer(s))
- def charAt(i: Int): Char = str.charAt(i)
-
- def setCharAt(index: Int, c: Char): Unit = str.setCharAt(index, c)
-
- def append(x: Any): StringBuilder = { str.append(x); this }
- def append(x: Boolean): StringBuilder = { str.append(x); this }
- def append(x: Byte): StringBuilder = { str.append(x); this }
- def append(x: Short): StringBuilder = { str.append(x); this }
- def append(x: Char): StringBuilder = { str.append(x); this }
- def append(x: Int): StringBuilder = { str.append(x); this }
- def append(x: Long): StringBuilder = { str.append(x); this }
- def append(x: Float): StringBuilder = { str.append(x); this }
- def append(x: Double): StringBuilder = { str.append(x); this }
- def append(x: String): StringBuilder = { str.append(x); this }
- def append(x: Array[Char]): StringBuilder = { str.append(x); this }
- def append(x: Array[Char], start: Int, length: Int): StringBuilder =
- { str.append(x, start, length); this }
-
- def insert(at: Int, x: Any): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Boolean): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Byte): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Short): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Char): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Int): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Long): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Float): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Double): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: String): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Array[Char]): StringBuilder = { str.insert(at, x); this }
- def insert(at: Int, x: Array[Char], start: Int, length: Int): StringBuilder =
- { str.insert(at, x, start, length); this }
+ def length: Int = self.length()
+ def length_=(n: Int) { self.setLength(n) }
+ def setLength(n: Int) { self.setLength(n) }
+
+ def capacity: Int = self.capacity
+ def capacity_=(n: Int) { self.ensureCapacity(n) }
+ def ensureCapacity(n: Int) { self.ensureCapacity(n) }
- def length(): Int = str.length()
+ def charAt(i: Int): Char = self.charAt(i)
+ def apply(i: Int): Char = self.charAt(i)
- def setLength(i: Int) = str.setLength(i)
+ def setCharAt(index: Int, c: Char): Unit = self.setCharAt(index, c)
+ def update(i: Int, c: Char) { self.setCharAt(i, c)}
+
+ def substring(i: Int): String = self.substring(i)
+ def substring(i: Int, j: Int): String = self.substring(i, j)
+
+ def append(x: Any): StringBuilder = { self.append(x); this }
+ def append(x: Boolean): StringBuilder = { self.append(x); this }
+ def append(x: Byte): StringBuilder = { self.append(x); this }
+ def append(x: Short): StringBuilder = { self.append(x); this }
+ def append(x: Char): StringBuilder = { self.append(x); this }
+ def append(x: Int): StringBuilder = { self.append(x); this }
+ def append(x: Long): StringBuilder = { self.append(x); this }
+ def append(x: Float): StringBuilder = { self.append(x); this }
+ def append(x: Double): StringBuilder = { self.append(x); this }
+ def append(x: String): StringBuilder = { self.append(x); this }
+ def append(x: Array[Char]): StringBuilder = { self.append(x); this }
+ def append(x: Array[Char], start: Int, length: Int): StringBuilder =
+ { self.append(x, start, length); this }
+
+ def insert(at: Int, x: Any): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Boolean): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Byte): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Short): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Char): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Int): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Long): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Float): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Double): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: String): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Array[Char]): StringBuilder = { self.insert(at, x); this }
+ def insert(at: Int, x: Array[Char], start: Int, length: Int): StringBuilder =
+ { self.insert(at, x, start, length); this }
- override def toString() = str.toString()
}
diff --git a/src/library/scala/xml/PrettyPrinter.scala b/src/library/scala/xml/PrettyPrinter.scala
index 8f92149c18..73d8fb54ac 100644
--- a/src/library/scala/xml/PrettyPrinter.scala
+++ b/src/library/scala/xml/PrettyPrinter.scala
@@ -53,7 +53,7 @@ class PrettyPrinter( width:Int, step:Int ) {
*/
protected def cut(s: String, ind: Int): List[Item] = {
val tmp = width - cur
- if (s.length() < tmp)
+ if (s.length < tmp)
return List(Box(ind, s))
val sb = new StringBuilder()
var i = s.indexOf(' ')
@@ -68,7 +68,7 @@ class PrettyPrinter( width:Int, step:Int ) {
while (Nil != last) try {
val b = Box(ind, s.substring(0, last.head))
cur = ind
- res = b :: Break :: cut(s.substring(last.head, s.length()), ind)
+ res = b :: Break :: cut(s.substring(last.head, s.length), ind)
// backtrack
} catch {
case _:BrokenException => last = last.tail
@@ -85,9 +85,9 @@ class PrettyPrinter( width:Int, step:Int ) {
protected def makeBox(ind: Int, s: String) = {
if (cur < ind)
cur == ind
- if (cur + s.length() > width) { // fits in this line
+ if (cur + s.length > width) { // fits in this line
items = Box(ind, s) :: items
- cur += s.length()
+ cur += s.length
} else try {
for (b <- cut(s, ind).elements) // break it up
items = b :: items
@@ -125,7 +125,7 @@ class PrettyPrinter( width:Int, step:Int ) {
protected def startTag(n: Node, pscope: NamespaceBinding): (String, Int) = {
val sb = new StringBuilder("<")
n.nameToString(sb) //Utility.appendPrefixedName( n.prefix, n.label, pmap, sb );
- val i = sb.length() + 1
+ val i = sb.length + 1
n.attributes.toString(sb)
n.scope.toString(sb, pscope)
sb.append('>')
@@ -151,7 +151,7 @@ class PrettyPrinter( width:Int, step:Int ) {
}
protected def fits(test: String) =
- test.length() < width - cur
+ test.length < width - cur
/** @param tail: what we'd like to sqeeze in */
protected def traverse(node: Node, pscope: NamespaceBinding, ind: Int): Unit = node match {
@@ -174,7 +174,7 @@ class PrettyPrinter( width:Int, step:Int ) {
} else {
val (stg, len2) = startTag(node, pscope)
val etg = endTag(node)
- if (stg.length() < width - cur) { // start tag fits
+ if (stg.length < width - cur) { // start tag fits
makeBox(ind, stg)
makeBreak()
traverse(node.child.elements, node.scope, ind + step)
@@ -192,7 +192,7 @@ class PrettyPrinter( width:Int, step:Int ) {
makeBreak()
}
}*/
- makeBox(ind, stg.substring(len2, stg.length()))
+ makeBox(ind, stg.substring(len2, stg.length))
makeBreak()
traverse(node.child.elements, node.scope, ind + step)
makeBox(cur, etg)
diff --git a/src/library/scala/xml/TextBuffer.scala b/src/library/scala/xml/TextBuffer.scala
index bc39b3514d..32383aea53 100644
--- a/src/library/scala/xml/TextBuffer.scala
+++ b/src/library/scala/xml/TextBuffer.scala
@@ -45,12 +45,12 @@ class TextBuffer {
* @return the text without whitespaces.
*/
def toText: Seq[Text] = {
- var len = sb.length() /* invariant */
+ var len = sb.length /* invariant */
if (len == 0) return Nil
if (Utility.isSpace(sb.charAt(len - 1))) {
len -= 1
- sb.setLength(len)
+ sb.length = len
}
if (len == 0) return Nil
diff --git a/src/library/scala/xml/Utility.scala b/src/library/scala/xml/Utility.scala
index 229f580bcc..fc7c024eca 100644
--- a/src/library/scala/xml/Utility.scala
+++ b/src/library/scala/xml/Utility.scala
@@ -348,10 +348,10 @@ object Utility extends AnyRef with parsing.TokenTests {
def getName(s: String, index: Int): String = {
var i = index;
val sb = new StringBuilder();
- if (i < s.length()) {
+ if (i < s.length) {
var c = s.charAt(i);
if (isNameStart(s.charAt(i)))
- while (i < s.length() && { c = s.charAt(i); isNameChar(c)}) {
+ while (i < s.length && { c = s.charAt(i); isNameChar(c)}) {
sb.append(c)
i = i + 1
}
@@ -368,7 +368,7 @@ object Utility extends AnyRef with parsing.TokenTests {
*/
def checkAttributeValue(value: String): String = {
var i = 0
- while (i < value.length()) {
+ while (i < value.length) {
value.charAt(i) match {
case '<' =>
return "< not allowed in attribute value";
@@ -376,8 +376,8 @@ object Utility extends AnyRef with parsing.TokenTests {
val n = getName(value, i+1)
if (n eq null)
return "malformed entity reference in attribute value ["+value+"]";
- i = i + n.length() + 1
- if (i >= value.length() || value.charAt(i) != ';')
+ i = i + n.length + 1
+ if (i >= value.length || value.charAt(i) != ';')
return "malformed entity reference in attribute value ["+value+"]";
case _ =>
}
@@ -420,7 +420,7 @@ object Utility extends AnyRef with parsing.TokenTests {
rfb.setLength(0)
unescape(ref,sb) match {
case null =>
- if (sb.length() > 0) { // flush buffer
+ if (sb.length > 0) { // flush buffer
nb += Text(sb.toString())
sb.setLength(0)
}
@@ -432,7 +432,7 @@ object Utility extends AnyRef with parsing.TokenTests {
sb.append(x)
}
}
- if (sb.length() > 0) { // flush buffer
+ if (sb.length > 0) { // flush buffer
val x = Text(sb.toString())
if (nb.length == 0)
return x
diff --git a/src/library/scala/xml/parsing/ExternalSources.scala b/src/library/scala/xml/parsing/ExternalSources.scala
index 699946be88..c9893beaa6 100644
--- a/src/library/scala/xml/parsing/ExternalSources.scala
+++ b/src/library/scala/xml/parsing/ExternalSources.scala
@@ -41,7 +41,7 @@ trait ExternalSources { self: ExternalSources with MarkupParser with MarkupHandl
def newIter = new Iterator[Char] {
var i = -1;
- private val len = str.length()-1;
+ private val len = str.length-1;
def hasNext = i < len;
def next = {
i = i + 1;
@@ -68,7 +68,7 @@ trait ExternalSources { self: ExternalSources with MarkupParser with MarkupHandl
var fileStr = input.descr;
if(input.descr.startsWith("file:")) {
- fileStr = input.descr.substring(5, input.descr.length());
+ fileStr = input.descr.substring(5, input.descr.length);
} else
fileStr = fileStr.substring(0,
fileStr.lastIndexOf(java.io.File.separator)+1);
diff --git a/src/library/scala/xml/parsing/MarkupParser.scala b/src/library/scala/xml/parsing/MarkupParser.scala
index 0dc0c03fa2..68eccf5261 100644
--- a/src/library/scala/xml/parsing/MarkupParser.scala
+++ b/src/library/scala/xml/parsing/MarkupParser.scala
@@ -216,7 +216,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
case _:EntityRef => // todo: fix entities, shouldn't be "special"
reportSyntaxError("no entity references alllowed here");
case s:SpecialNode =>
- if (s.toString().trim().length() > 0) //non-empty text nodes not allowed
+ if (s.toString().trim().length > 0) //non-empty text nodes not allowed
elemCount = elemCount + 2;
case m:Node =>
elemCount = elemCount + 1;
@@ -289,11 +289,11 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
Utility.prefix(qname) match {
case Some("xmlns") =>
- val prefix = qname.substring(6 /*xmlns:*/ , qname.length());
+ val prefix = qname.substring(6 /*xmlns:*/ , qname.length);
scope = new NamespaceBinding(prefix, value, scope);
case Some(prefix) =>
- val key = qname.substring(prefix.length()+1, qname.length());
+ val key = qname.substring(prefix.length+1, qname.length);
aMap = new PrefixedAttribute(prefix, key, value, aMap);
case _ =>
@@ -328,7 +328,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
}
nextch
val str = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
// well-formedness constraint
normalizeAttributeValue(str)
@@ -347,7 +347,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
}
nextch
val str = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
str
}
@@ -392,7 +392,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
if (ch==']' &&
{ sb.append(ch); nextch; ch == ']' } &&
{ sb.append(ch); nextch; ch == '>' } ) {
- sb.setLength(sb.length() - 2);
+ sb.length = sb.length - 2
nextch;
return handle.text( pos1, sb.toString() );
} else sb.append( ch );
@@ -443,7 +443,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
xToken('-')
while (true) {
if (ch == '-' && { sb.append(ch); nextch; ch == '-' }) {
- sb.setLength(sb.length() - 1)
+ sb.length = sb.length - 1
nextch
xToken('>')
return handle.comment(pos, sb.toString())
@@ -666,7 +666,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
val pos = this.pos
val Tuple3(qname, aMap, scope) = xTag(pscope)
val Tuple2(pre, local) = Utility.prefix(qname) match {
- case Some(p) => (p,qname.substring(p.length()+1, qname.length()))
+ case Some(p) => (p,qname.substring(p.length+1, qname.length))
case _ => (null,qname)
}
val ts = {
@@ -702,7 +702,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
nextch
}
val n = cbuf.toString().intern()
- cbuf.setLength(0)
+ cbuf.length = 0
n
} else {
reportSyntaxError("name expected")
@@ -732,7 +732,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
xSpace
while (true) {
if (ch == '?' && { sb.append( ch ); nextch; ch == '>' }) {
- sb.setLength(sb.length() - 1);
+ sb.length = sb.length - 1;
nextch;
return handle.procInstr(tmppos, n.toString(), sb.toString());
} else
@@ -768,7 +768,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
exit = eof || /*{ nextch; xCheckEmbeddedBlock }||*/( ch == '<' ) || ( ch == '&' );
}
val str = cbuf.toString();
- cbuf.setLength(0);
+ cbuf.length = 0;
str
/*}*/
}
@@ -788,7 +788,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
}
nextch
val str = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
str
}
@@ -808,7 +808,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
}
nextch
val str = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
str
}
@@ -971,7 +971,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
//Console.println("END["+ch+"]")
nextch
val cmstr = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
handle.elemDecl(n, cmstr)
}
@@ -996,7 +996,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
nextch;
}
val atpe = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
//Console.println("attr type: "+atpe);
ch match {
case '\'' | '"' =>
@@ -1020,7 +1020,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
xSpaceOpt
attList = AttrDecl(aname, atpe, defdecl) :: attList
- cbuf.setLength(0)
+ cbuf.length = 0
}
nextch
handle.attListDecl(n, attList.reverse)
@@ -1207,7 +1207,7 @@ trait MarkupParser extends AnyRef with TokenTests { self: MarkupParser with Mar
}
}
val name = cbuf.toString()
- cbuf.setLength(0)
+ cbuf.length = 0
name
}
diff --git a/test/files/run/Course-2002-03.scala b/test/files/run/Course-2002-03.scala
index 5a470a3561..efb3c81446 100644
--- a/test/files/run/Course-2002-03.scala
+++ b/test/files/run/Course-2002-03.scala
@@ -238,7 +238,7 @@ object M8 {
val buffer: StringBuilder = new StringBuilder();
buffer.append('[');
foreach(i => {
- if (buffer.length() > 1) {buffer.append(','); ()}; // !!! ; ()
+ if (buffer.length > 1) {buffer.append(','); ()}; // !!! ; ()
buffer.append(i);
()});
buffer.append(']');