// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --allow-natives-syntax

(function () {
  var o = [];
  o.__proto__ = {};

  function store(o, i, v) {
    o[i] = v;
  }

  store(o, 0, 0);
  store(o, 1, 0);
  store(o, 2, 0);
  o.__proto__[10000000] = 1;

  var set = 0;

  Object.defineProperty(o, "3", {
    get:function() { return 100; },
    set:function(v) { set = v; }});

  store(o, 3, 1000);
  assertEquals(1000, set);
  assertEquals(100, o[3]);
})();

(function () {
  var o = new Int32Array(1);
  assertThrows(
      () => Object.defineProperty(o, '0', {get: function() {}}), TypeError);
  assertEquals({
    value: 0,
    writable: true,
    enumerable: true,
    configurable: false
  }, Object.getOwnPropertyDescriptor(o, "0"));
})();

(function() {
  function f() {
    var a = new Array();
    a[1] = 1.5;
    return a;
  }

  f();
  f();
  %OptimizeFunctionOnNextCall(f);
  var a = f();
  a[2] = 2;
  assertEquals(3, a.length);
})();
