summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-08-28 11:25:43 +0000
committerPaul Phillips <paulp@improving.org>2009-08-28 11:25:43 +0000
commit8814de2aa0fc14df0785dfa9ee96d154c32e5646 (patch)
tree87d828b2f937057f84239cbb4be67bce843ef483 /src
parente7bd2c9fe58e4d6bebc529614bd0ec11031d21d5 (diff)
downloadscala-8814de2aa0fc14df0785dfa9ee96d154c32e5646.tar.gz
scala-8814de2aa0fc14df0785dfa9ee96d154c32e5646.tar.bz2
scala-8814de2aa0fc14df0785dfa9ee96d154c32e5646.zip
Fix and test case for #2276.
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/xml/transform/BasicTransformer.scala16
1 files changed, 4 insertions, 12 deletions
diff --git a/src/library/scala/xml/transform/BasicTransformer.scala b/src/library/scala/xml/transform/BasicTransformer.scala
index 917884617c..a79c32a5f0 100644
--- a/src/library/scala/xml/transform/BasicTransformer.scala
+++ b/src/library/scala/xml/transform/BasicTransformer.scala
@@ -25,7 +25,7 @@ abstract class BasicTransformer extends Function1[Node,Node]
* @return ...
*/
protected def unchanged(n: Node, ns: Seq[Node]) =
- ns.length == 1 && (ns.head eq n)
+ ns.length == 1 && (ns.head == n)
/** Call transform(Node) for each node in ns, append results
* to NodeBuffer.
@@ -37,18 +37,10 @@ abstract class BasicTransformer extends Function1[Node,Node]
* otherwise a new sequence of concatenated results.
*/
def transform(ns: Seq[Node]): Seq[Node] = {
- def testForChange(n: Node): Option[Seq[Node]] = {
- val n2 = transform(n)
- if (unchanged(n, n2)) None
- else Some(n2)
- }
- // if any node is changed by the transform, concatenate
- // the unchanged nodes with a recursive call.
- for ((n, i) <- ns.zipWithIndex ; n2 <- testForChange(n))
- return (ns take i) ++ transform(n2)
+ val (xs1, xs2) = ns span (n => unchanged(n, transform(n)))
- // no change, return original sequence
- ns
+ if (xs2.isEmpty) ns
+ else xs1 ++ transform(xs2.head) ++ transform(xs2.tail)
}
def transform(n: Node): Seq[Node] = {