Index: src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
===================================================================
--- src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java	(revision 9924)
+++ src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java	(working copy)
@@ -974,10 +974,15 @@
      * @return the original list
      */
     public static List reverseEach(List self, Closure closure) {
-        each(reverse(self).iterator(), closure);
+        each(new ReverseListIterator(self), closure);
         return self;
     }
 
+    public static Object[] reverseEach(Object[] self, Closure closure) {
+        each(new ReverseListIterator(Arrays.asList(self)), closure);
+        return self;
+    }
+
     /**
      * Used to determine if the given predicate closure is valid (i.e. returns
      * <code>true</code>) for all items in this data structure.
Index: src/main/org/codehaus/groovy/runtime/ReverseListIterator.java
===================================================================
--- src/main/org/codehaus/groovy/runtime/ReverseListIterator.java	(revision 0)
+++ src/main/org/codehaus/groovy/runtime/ReverseListIterator.java	(revision 0)
@@ -0,0 +1,44 @@
+package org.codehaus.groovy.runtime;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * A reverse iterator over a list. Utilizes the {@link ListIterator}
+ * obtained from the provided {@link List} and converts it to an
+ * {@link Iterator} that efficiently traverses the <code>List</code> in
+ * reverse. The fail-fast semantics of this iterator are the same as the
+ * semantics of the underlying <code>ListIterator</code>.
+ */
+public class ReverseListIterator implements Iterator {
+    private ListIterator delegate;
+
+    /**
+     * Constructs a new <code>ReverseListIterator</code> for the provided list.
+     */
+    public ReverseListIterator(List list) {
+        this.delegate = list.listIterator(list.size());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean hasNext() {
+        return delegate.hasPrevious();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object next() {
+        return delegate.previous();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void remove() {
+        delegate.remove();
+    }
+}
Index: src/test/groovy/GroovyMethodsTest.groovy
===================================================================
--- src/test/groovy/GroovyMethodsTest.groovy	(revision 9924)
+++ src/test/groovy/GroovyMethodsTest.groovy	(working copy)
@@ -218,11 +218,18 @@
     }
 
     void testReverseEach() {
+        // List
         def l = ["cheese", "loves", "Guillaume"]
         def expected = ["Guillaume", "loves", "cheese"]
         def answer = []
         l.reverseEach {answer << it}
         assert answer == expected
+
+        // Array
+        def ary = l as String[]
+        answer = []
+        ary.reverseEach { answer << it }
+        assert answer == expected
     }
 
     void testGrep() {

