Index: test/mjsunit/array-length.js |
diff --git a/test/mjsunit/array-length.js b/test/mjsunit/array-length.js |
index 16867db733b6c98bb45b9428b86755d6c1e58e5d..7c3063ee1c0fbd2bfa4dcd2626ef4164403a0832 100644 |
--- a/test/mjsunit/array-length.js |
+++ b/test/mjsunit/array-length.js |
@@ -25,6 +25,8 @@ |
// (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 |
+ |
var a = [0,1,2,3]; |
assertEquals(0, a.length = 0); |
@@ -119,3 +121,42 @@ for (var i = 0; i < 7; i++) { |
t = a.length = 7; |
assertEquals(7, t); |
} |
+ |
+function TestLengthAccess() { |
+ var TestGetLength = function(a, l, getLength, getKeyedLength) { |
+ assertEquals(l, getLength(a)); |
+ assertEquals(l, getKeyedLength(a)); |
+ } |
+ |
+ var Test = function(a, l, getLength, getKeyedLength) { |
+ // Make the ICs reach the state we want. |
+ TestGetLength(a, l, getLength, getKeyedLength); |
+ TestGetLength(a, l, getLength, getKeyedLength); |
+ TestGetLength(a, l, getLength, getKeyedLength); |
+ // Also test crankshaft. |
+ %OptimizeFunctionOnNextCall(getLength); |
+ %OptimizeFunctionOnNextCall(getKeyedLength); |
+ TestGetLength(a, l, getLength, getKeyedLength); |
+ } |
+ |
+ var getLength = function(a) { return a.length; } |
+ var getKeyedLength = function(a) { return a['length']; } |
+ Test(new Array(4), 4, getLength, getKeyedLength); |
+ |
+ getLength = function(a) { return a.length; } |
+ getKeyedLength = function(a) { return a['length']; } |
+ Test([1, 2, 3, 4], 4, getLength, getKeyedLength); |
+ |
+ getLength = function(a) { return a.length; } |
+ getKeyedLength = function(a) { return a['length']; } |
+ Test(Object.create(new Array(4)), 4, getLength, getKeyedLength); |
+ |
+ getLength = function(a) { return a.length; } |
+ getKeyedLength = function(a) { return a['length']; } |
+ // Set the 'length' of the global object. |
+ length = 4; |
+ var globalObject = (1,eval)("this"); |
+ Test(globalObject, 4, getLength, getKeyedLength); |
+} |
+TestLengthAccess(); |
+ |