large-indices.js 3.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
// Copyright 2019 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

// crbug.com/1026974
(function() {
  function store(obj, key) {
    obj[key] = 10;
  }
  %PrepareFunctionForOptimization(store);
  for (let i = 0; i < 3; i++) {
    let obj = {}
    store(obj, 1152921506754330624);
    assertEquals(["1152921506754330600"], Object.keys(obj));
  }
})();
(function() {
  function store(obj, key) {
    obj[key] = 10;
  }
  %PrepareFunctionForOptimization(store);
  for (let i = 0; i < 3; i++) {
    let obj2 = new Int32Array(0);
    store(obj2, 1152921506754330624);
    assertEquals([], Object.keys(obj2));
    store(obj2, "1152921506754330624");
    assertEquals(["1152921506754330624"], Object.keys(obj2));
  }
})();

// crbug.com/1026729
(function() {
  let key = 0xFFFFFFFF;
  let object = {};
  assertFalse(object.hasOwnProperty(key));
  let proxy = new Proxy({}, {});
  assertFalse(proxy.hasOwnProperty(key));
})();

// crbug.com/1026909
(function() {
  function load(obj, key) {
    return obj[key];
  }
  %PrepareFunctionForOptimization(load);
  const array = new Float64Array();
  assertEquals(undefined, load(array, 'monomorphic'));
  assertEquals(undefined, load(array, '4294967296'));
})();

// crbug.com/1026856
(function() {
  let key = 0xFFFFFFFF;
  let receiver = new Int32Array();
  var value = {};
  var target = {};
  Reflect.set(target, key, value, receiver);
})();
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

// crbug.com/1028213
(function() {
  function load(obj, key) {
    return obj[key];
  }
  %PrepareFunctionForOptimization(load);
  let obj = function() {};
  obj.__proto__ = new Int8Array(1);
  let key = Object(4294967297);
  for (let i = 0; i < 3; i++) {
    load(obj, key);
  }
})();
(function() {
  function load(obj, key) {
    return obj[key];
  }
  %PrepareFunctionForOptimization(load);
  let obj = new String("abc");
  obj.__proto__ = new Int8Array(1);
  let key = Object(4294967297);
  for (let i = 0; i < 3; i++) {
    load(obj, key);
  }
})();

// crbug.com/1027461#c12
(function() {
  let arr = new Int32Array(2);
  Object.defineProperty(arr, "foo", {get:function() { this.valueOf = 1; }});
  arr[9007199254740991] = 1;
  Object.values(arr);

  let obj = [1, 2, 3];
  Object.defineProperty(obj, 2, {get:function() { this.valueOf = 1; }});
  obj[9007199254740991] = 1;
  Object.values(obj);
})();
100 101 102 103 104 105 106

// crbug.com/1027461#c18
(function() {
  const v7 = Object(1);
  v7[4294967297] = 1;
  const v8 = Object.assign({}, v7);
})();
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124

// crbug.com/1029369
(function () {
  let obj = {};
  function AddProperty(o, k) {
    Object.defineProperty(o, k, {});
    if (!o.hasOwnProperty(k)) throw "Bug!";
  }
  AddProperty(obj, "1");  // Force dictionary-mode elements.
  AddProperty(obj, 4294967295);
})();

// crbug.com/1029338
(function() {
  var __v_11 = {};
  __v_11.__defineGetter__(4294967295, function () {});
  __v_12 = Object.entries(__v_11);
})();
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

// crbug.com/1031175
(function() {
  var key = 4294967295;
  var obj = {
    boom() {
      super[key]++;
    },
    bang() {
      super["4294967295"]++;
    }
  }
  obj.boom();
  obj.bang();
})();