| // 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); |
| })(); |
| |
| // 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); |
| })(); |
| |
| // crbug.com/1027461#c18 |
| (function() { |
| const v7 = Object(1); |
| v7[4294967297] = 1; |
| const v8 = Object.assign({}, v7); |
| })(); |
| |
| // 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); |
| })(); |
| |
| // crbug.com/1031175 |
| (function() { |
| var key = 4294967295; |
| var obj = { |
| boom() { |
| super[key]++; |
| }, |
| bang() { |
| super["4294967295"]++; |
| } |
| } |
| obj.boom(); |
| obj.bang(); |
| })(); |