| Index: test/mjsunit/elements-transition.js
 | 
| diff --git a/test/mjsunit/elements-transition.js b/test/mjsunit/elements-transition.js
 | 
| index 7298e68a12cb77047f03d794b6aff732fcdd8cba..f6a8188e2f5a55c2f1ed9f1615618b9963770aa5 100644
 | 
| --- a/test/mjsunit/elements-transition.js
 | 
| +++ b/test/mjsunit/elements-transition.js
 | 
| @@ -25,107 +25,95 @@
 | 
|  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
|  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
|  
 | 
| -// Flags: --allow-natives-syntax --smi-only-arrays
 | 
| +// Flags: --allow-natives-syntax
 | 
|  // Flags: --nostress-opt
 | 
|  
 | 
| -support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
 | 
| -
 | 
| -if (support_smi_only_arrays) {
 | 
| -  print("Tests include smi-only arrays.");
 | 
| -} else {
 | 
| -  print("Tests do NOT include smi-only arrays.");
 | 
| +// This code exists to eliminate the learning influence of AllocationSites
 | 
| +// on the following tests.
 | 
| +var __sequence = 0;
 | 
| +function make_array_string(length) {
 | 
| +  this.__sequence = this.__sequence + 1;
 | 
| +  return "/* " + this.__sequence + " */  new Array(" + length + ");";
 | 
| +}
 | 
| +function make_array(length) {
 | 
| +  return eval(make_array_string(length));
 | 
|  }
 | 
|  
 | 
| -if (support_smi_only_arrays) {
 | 
| -  // This code exists to eliminate the learning influence of AllocationSites
 | 
| -  // on the following tests.
 | 
| -  var __sequence = 0;
 | 
| -  function make_array_string(length) {
 | 
| -    this.__sequence = this.__sequence + 1;
 | 
| -    return "/* " + this.__sequence + " */  new Array(" + length + ");";
 | 
| -  }
 | 
| -  function make_array(length) {
 | 
| -    return eval(make_array_string(length));
 | 
| -  }
 | 
| -
 | 
| -  function test(test_double, test_object, set, length) {
 | 
| -    // We apply the same operations to two identical arrays.  The first array
 | 
| -    // triggers an IC miss, upon which the conversion stub is generated, but the
 | 
| -    // actual conversion is done in runtime.  The second array, arriving at
 | 
| -    // the previously patched IC, is then converted using the conversion stub.
 | 
| -    var array_1 = make_array(length);
 | 
| -    var array_2 = make_array(length);
 | 
| +function test(test_double, test_object, set, length) {
 | 
| +  // We apply the same operations to two identical arrays.  The first array
 | 
| +  // triggers an IC miss, upon which the conversion stub is generated, but the
 | 
| +  // actual conversion is done in runtime.  The second array, arriving at
 | 
| +  // the previously patched IC, is then converted using the conversion stub.
 | 
| +  var array_1 = make_array(length);
 | 
| +  var array_2 = make_array(length);
 | 
|  
 | 
| -    // false, true, nice setter function, 20
 | 
| -    assertTrue(%HasFastSmiElements(array_1));
 | 
| -    assertTrue(%HasFastSmiElements(array_2));
 | 
| -    for (var i = 0; i < length; i++) {
 | 
| -      if (i == length - 5 && test_double) {
 | 
| -        // Trigger conversion to fast double elements at length-5.
 | 
| -        set(array_1, i, 0.5);
 | 
| -        set(array_2, i, 0.5);
 | 
| -        assertTrue(%HasFastDoubleElements(array_1));
 | 
| -        assertTrue(%HasFastDoubleElements(array_2));
 | 
| -      } else if (i == length - 3 && test_object) {
 | 
| -        // Trigger conversion to fast object elements at length-3.
 | 
| -        set(array_1, i, 'object');
 | 
| -        set(array_2, i, 'object');
 | 
| -        assertTrue(%HasFastObjectElements(array_1));
 | 
| -        assertTrue(%HasFastObjectElements(array_2));
 | 
| -      } else if (i != length - 7) {
 | 
| -        // Set the element to an integer but leave a hole at length-7.
 | 
| -        set(array_1, i, 2*i+1);
 | 
| -        set(array_2, i, 2*i+1);
 | 
| -      }
 | 
| +  // false, true, nice setter function, 20
 | 
| +  assertTrue(%HasFastSmiElements(array_1));
 | 
| +  assertTrue(%HasFastSmiElements(array_2));
 | 
| +  for (var i = 0; i < length; i++) {
 | 
| +    if (i == length - 5 && test_double) {
 | 
| +      // Trigger conversion to fast double elements at length-5.
 | 
| +      set(array_1, i, 0.5);
 | 
| +      set(array_2, i, 0.5);
 | 
| +      assertTrue(%HasFastDoubleElements(array_1));
 | 
| +      assertTrue(%HasFastDoubleElements(array_2));
 | 
| +    } else if (i == length - 3 && test_object) {
 | 
| +      // Trigger conversion to fast object elements at length-3.
 | 
| +      set(array_1, i, 'object');
 | 
| +      set(array_2, i, 'object');
 | 
| +      assertTrue(%HasFastObjectElements(array_1));
 | 
| +      assertTrue(%HasFastObjectElements(array_2));
 | 
| +    } else if (i != length - 7) {
 | 
| +      // Set the element to an integer but leave a hole at length-7.
 | 
| +      set(array_1, i, 2*i+1);
 | 
| +      set(array_2, i, 2*i+1);
 | 
|      }
 | 
| +  }
 | 
|  
 | 
| -    for (var i = 0; i < length; i++) {
 | 
| -      if (i == length - 5 && test_double) {
 | 
| -        assertEquals(0.5, array_1[i]);
 | 
| -        assertEquals(0.5, array_2[i]);
 | 
| -      } else if (i == length - 3 && test_object) {
 | 
| -        assertEquals('object', array_1[i]);
 | 
| -        assertEquals('object', array_2[i]);
 | 
| -      } else if (i != length - 7) {
 | 
| -        assertEquals(2*i+1, array_1[i]);
 | 
| -        assertEquals(2*i+1, array_2[i]);
 | 
| -      } else {
 | 
| -        assertEquals(undefined, array_1[i]);
 | 
| -        assertEquals(undefined, array_2[i]);
 | 
| -      }
 | 
| +  for (var i = 0; i < length; i++) {
 | 
| +    if (i == length - 5 && test_double) {
 | 
| +      assertEquals(0.5, array_1[i]);
 | 
| +      assertEquals(0.5, array_2[i]);
 | 
| +    } else if (i == length - 3 && test_object) {
 | 
| +      assertEquals('object', array_1[i]);
 | 
| +      assertEquals('object', array_2[i]);
 | 
| +    } else if (i != length - 7) {
 | 
| +      assertEquals(2*i+1, array_1[i]);
 | 
| +      assertEquals(2*i+1, array_2[i]);
 | 
| +    } else {
 | 
| +      assertEquals(undefined, array_1[i]);
 | 
| +      assertEquals(undefined, array_2[i]);
 | 
|      }
 | 
| -
 | 
| -    assertEquals(length, array_1.length);
 | 
| -    assertEquals(length, array_2.length);
 | 
|    }
 | 
|  
 | 
| -  function run_test(test_double, test_object, set, length) {
 | 
| -    test(test_double, test_object, set, length);
 | 
| +  assertEquals(length, array_1.length);
 | 
| +  assertEquals(length, array_2.length);
 | 
| +}
 | 
| +
 | 
| +function run_test(test_double, test_object, set, length) {
 | 
| +  test(test_double, test_object, set, length);
 | 
|      %ClearFunctionTypeFeedback(test);
 | 
| -  }
 | 
| +}
 | 
|  
 | 
| -  run_test(false, false, function(a,i,v){ a[i] = v; }, 20);
 | 
| -  run_test(true,  false, function(a,i,v){ a[i] = v; }, 20);
 | 
| -  run_test(false, true,  function(a,i,v){ a[i] = v; }, 20);
 | 
| -  run_test(true,  true,  function(a,i,v){ a[i] = v; }, 20);
 | 
| +run_test(false, false, function(a,i,v){ a[i] = v; }, 20);
 | 
| +run_test(true,  false, function(a,i,v){ a[i] = v; }, 20);
 | 
| +run_test(false, true,  function(a,i,v){ a[i] = v; }, 20);
 | 
| +run_test(true,  true,  function(a,i,v){ a[i] = v; }, 20);
 | 
|  
 | 
| -  run_test(false, false, function(a,i,v){ a[i] = v; }, 10000);
 | 
| -  run_test(true,  false, function(a,i,v){ a[i] = v; }, 10000);
 | 
| -  run_test(false, true,  function(a,i,v){ a[i] = v; }, 10000);
 | 
| -  run_test(true,  true,  function(a,i,v){ a[i] = v; }, 10000);
 | 
| +run_test(false, false, function(a,i,v){ a[i] = v; }, 10000);
 | 
| +run_test(true,  false, function(a,i,v){ a[i] = v; }, 10000);
 | 
| +run_test(false, true,  function(a,i,v){ a[i] = v; }, 10000);
 | 
| +run_test(true,  true,  function(a,i,v){ a[i] = v; }, 10000);
 | 
|  
 | 
| -  // Check COW arrays
 | 
| -  function get_cow() { return [1, 2, 3]; }
 | 
| +// Check COW arrays
 | 
| +function get_cow() { return [1, 2, 3]; }
 | 
|  
 | 
| -  function transition(x) { x[0] = 1.5; }
 | 
| +function transition(x) { x[0] = 1.5; }
 | 
|  
 | 
| -  var ignore = get_cow();
 | 
| -  transition(ignore);  // Handled by runtime.
 | 
| -  var a = get_cow();
 | 
| -  var b = get_cow();
 | 
| -  transition(a);  // Handled by IC.
 | 
| -  assertEquals(1.5, a[0]);
 | 
| -  assertEquals(1, b[0]);
 | 
| -} else {
 | 
| -  print("Test skipped because smi only arrays are not supported.");
 | 
| -}
 | 
| +var ignore = get_cow();
 | 
| +transition(ignore);  // Handled by runtime.
 | 
| +var a = get_cow();
 | 
| +var b = get_cow();
 | 
| +transition(a);  // Handled by IC.
 | 
| +assertEquals(1.5, a[0]);
 | 
| +assertEquals(1, b[0]);
 | 
| 
 |