diff options
Diffstat (limited to 'src')
-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] = { |