| Index: test/mjsunit/array-unshift.js
 | 
| diff --git a/test/mjsunit/array-unshift.js b/test/mjsunit/array-unshift.js
 | 
| index dbe245b8b4fea0753ed73bdf35de3d8d06d15d8f..c4cc95cbb46f745203d62e472a07b688385b3d74 100644
 | 
| --- a/test/mjsunit/array-unshift.js
 | 
| +++ b/test/mjsunit/array-unshift.js
 | 
| @@ -37,8 +37,8 @@
 | 
|  })();
 | 
|  
 | 
|  
 | 
| -// Check that unshif with no args has a side-effect of
 | 
| -// feeling the holes with elements from the prototype
 | 
| +// Check that unshift with no args has a side-effect of
 | 
| +// filling the holes with elements from the prototype
 | 
|  // (if present, of course)
 | 
|  (function() {
 | 
|    var len = 3;
 | 
| @@ -115,6 +115,81 @@
 | 
|    assertTrue(delete Array.prototype[7]);
 | 
|  })();
 | 
|  
 | 
| +// Check that unshift with no args has a side-effect of
 | 
| +// filling the holes with elements from the prototype
 | 
| +// (if present, of course)
 | 
| +(function() {
 | 
| +  var len = 3;
 | 
| +  var array = new Array(len);
 | 
| +
 | 
| +  var at0 = '@0';
 | 
| +  var at2 = '@2';
 | 
| +
 | 
| +  var array_proto = [];
 | 
| +  array_proto[0] = at0;
 | 
| +  array_proto[2] = at2;
 | 
| +  array.__proto__ = array_proto;
 | 
| +
 | 
| +  // array owns nothing...
 | 
| +  assertFalse(array.hasOwnProperty(0));
 | 
| +  assertFalse(array.hasOwnProperty(1));
 | 
| +  assertFalse(array.hasOwnProperty(2));
 | 
| +
 | 
| +  // ... but sees values from array_proto.
 | 
| +  assertEquals(array[0], at0);
 | 
| +  assertEquals(array[1], undefined);
 | 
| +  assertEquals(array[2], at2);
 | 
| +
 | 
| +  assertEquals(len, array.unshift());
 | 
| +
 | 
| +  // unshift makes array own 0 and 2...
 | 
| +  assertTrue(array.hasOwnProperty(0));
 | 
| +  assertFalse(array.hasOwnProperty(1));
 | 
| +  assertTrue(array.hasOwnProperty(2));
 | 
| +
 | 
| +  // ... so they are not affected be delete.
 | 
| +  assertEquals(array[0], at0);
 | 
| +  assertEquals(array[1], undefined);
 | 
| +  assertEquals(array[2], at2);
 | 
| +})();
 | 
| +
 | 
| +
 | 
| +// Now check the case with array of holes and some elements on prototype.
 | 
| +(function() {
 | 
| +  var len = 9;
 | 
| +  var array = new Array(len);
 | 
| +  var array_proto = []
 | 
| +  array_proto[3] = "@3";
 | 
| +  array_proto[7] = "@7";
 | 
| +  array.__proto__ = array_proto;
 | 
| +
 | 
| +  assertEquals(len, array.length);
 | 
| +  for (var i = 0; i < array.length; i++) {
 | 
| +    assertEquals(array[i], array_proto[i]);
 | 
| +  }
 | 
| +
 | 
| +  assertEquals(len + 1, array.unshift('head'));
 | 
| +
 | 
| +  assertEquals(len + 1, array.length);
 | 
| +  // Note that unshift copies values from prototype into the array.
 | 
| +  assertEquals(array[4], array_proto[3]);
 | 
| +  assertTrue(array.hasOwnProperty(4));
 | 
| +
 | 
| +  assertEquals(array[8], array_proto[7]);
 | 
| +  assertTrue(array.hasOwnProperty(8));
 | 
| +
 | 
| +  // ... but keeps the rest as holes:
 | 
| +  array_proto[5] = "@5";
 | 
| +  assertEquals(array[5], array_proto[5]);
 | 
| +  assertFalse(array.hasOwnProperty(5));
 | 
| +
 | 
| +  assertEquals(array[3], array_proto[3]);
 | 
| +  assertFalse(array.hasOwnProperty(3));
 | 
| +
 | 
| +  assertEquals(array[7], array_proto[7]);
 | 
| +  assertFalse(array.hasOwnProperty(7));
 | 
| +})();
 | 
| +
 | 
|  // Check the behaviour when approaching maximal values for length.
 | 
|  (function() {
 | 
|    for (var i = 0; i < 7; i++) {
 | 
| 
 |