diff options
author | Paul Phillips <paulp@improving.org> | 2009-08-28 11:25:43 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-08-28 11:25:43 +0000 |
commit | 8814de2aa0fc14df0785dfa9ee96d154c32e5646 (patch) | |
tree | 87d828b2f937057f84239cbb4be67bce843ef483 /src/library | |
parent | e7bd2c9fe58e4d6bebc529614bd0ec11031d21d5 (diff) | |
download | scala-8814de2aa0fc14df0785dfa9ee96d154c32e5646.tar.gz scala-8814de2aa0fc14df0785dfa9ee96d154c32e5646.tar.bz2 scala-8814de2aa0fc14df0785dfa9ee96d154c32e5646.zip |
Fix and test case for #2276.
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/scala/xml/transform/BasicTransformer.scala | 16 |
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] = { |