12904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
22904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
32904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// found in the LICENSE file.
42904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
52904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// Flags: --allow-natives-syntax
62904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
72904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgfunction set_length(a, l) {
82904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  a.length = l;
92904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org}
102904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
112904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgfunction test1() {
122904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  var l = {};
132904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  var a = Array(l);
142904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 3);
152904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 3);
162904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  assertEquals(3, a.length);
172904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org}
182904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
192904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgfunction test2() {
202904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  var a = [];
212904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 10);
222904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 10);
232904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  Object.freeze(a);
242904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 3);
252904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 3);
262904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  assertEquals(10, a.length);
272904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org}
282904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
292904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgfunction test3() {
302904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  var a = [2];
312904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  Object.defineProperty(a, "length", {value:2, writable: false});
322904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  %ToFastProperties(a);
332904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length([], 10);
342904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length([], 10);
352904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 10);
362904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  set_length(a, 10);
372904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  assertEquals(2, a.length);
382904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org}
392904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
402904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgtest1();
412904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgtest2();
422904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgtest3();
43