<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>test/files/run/t2446.check</filename>
    </added>
    <added>
      <filename>test/files/run/t2446.scala</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -13,6 +13,7 @@ package scala.collection
 
 import generic._
 import mutable.ArrayBuffer
+import scala.annotation.tailrec
 
 /** Sequences that support O(1) element access and O(1) length computation.
  *  This class does not add any methods to Seq but overrides several
@@ -77,27 +78,22 @@ trait VectorLike[+A, +Repr] extends SeqLike[A, Repr] { self =&gt;
     if (i &lt; length) Some(this(i)) else None
   }
 
-  private def foldl[B](start: Int, z: B, op: (B, A) =&gt; B): B = {
-    var i = start
-    val len = length
-    var result = z
-    while (i &lt; len) {
-      result = op(result, this(i))
-      i += 1
-    }
-    result
-  }
-    
-  private def foldr[B](start: Int, len: Int, z: B, op: (A, B) =&gt; B): B = 
-    if (start == len) z
-    else op(this(start), foldr(start + 1, len, z, op))
+  @tailrec
+  private def foldl[B](start: Int, end: Int, z: B, op: (B, A) =&gt; B): B =
+    if (start == end) z
+    else foldl(start + 1, end, op(z, this(start)), op)
+
+  @tailrec
+  private def foldr[B](start: Int, end: Int, z: B, op: (A, B) =&gt; B): B =
+    if (start == end) z
+    else foldr(start, end - 1, op(this(end - 1), z), op)
 
   override def foldLeft[B](z: B)(op: (B, A) =&gt; B): B = 
-    foldl(0, z, op)
+    foldl(0, length, z, op)
   override def foldRight[B](z: B)(op: (A, B) =&gt; B): B = 
     foldr(0, length, z, op)
   override def reduceLeft[B &gt;: A](op: (B, A) =&gt; B): B = 
-    if (length &gt; 0) foldl(1, this(0), op) else super.reduceLeft(op)
+    if (length &gt; 0) foldl(1, length, this(0), op) else super.reduceLeft(op)
   override def reduceRight[B &gt;: A](op: (A, B) =&gt; B): B = 
     if (length &gt; 0) foldr(0, length - 1, this(length - 1), op) else super.reduceRight(op)
   </diff>
      <filename>src/library/scala/collection/VectorLike.scala</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>157d0a7712bc1f938ca20456b0c6d1fa624802e2</id>
    </parent>
  </parents>
  <author>
    <name>phaller</name>
    <email>phaller@5e8d7ff9-d8ef-0310-90f0-a4852d11357a</email>
  </author>
  <url>http://github.com/jorgeortiz85/scala/commit/4d6bc2e0607b778b18f2c30333cf2b9390550c0b</url>
  <id>4d6bc2e0607b778b18f2c30333cf2b9390550c0b</id>
  <committed-date>2009-10-21T03:08:34-07:00</committed-date>
  <authored-date>2009-10-21T03:08:34-07:00</authored-date>
  <message>Fix and test for #2446.

git-svn-id: http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk@19183 5e8d7ff9-d8ef-0310-90f0-a4852d11357a</message>
  <tree>68c8a41ba7991189147cbcb4c19eaac76b869508</tree>
  <committer>
    <name>phaller</name>
    <email>phaller@5e8d7ff9-d8ef-0310-90f0-a4852d11357a</email>
  </committer>
</commit>
