| // Copyright 2018 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. |
| |
| let TypedArrayConstructors = [ |
| BigUint64Array, |
| BigInt64Array, |
| ]; |
| |
| // Test KeyedStore in uninitialized and monomorphic states. |
| for (let C of TypedArrayConstructors) { |
| let keyedSta = function(array) { |
| var didRun = false; |
| array[0] = { |
| valueOf() { |
| didRun = true; |
| return 42n; |
| } |
| }; |
| |
| return { didRun, array }; |
| }; |
| |
| for (var i = 0; i < 3; ++i) { |
| var { didRun, array } = keyedSta(new C(1)); |
| assertTrue(didRun); |
| assertEquals(array[0], 42n); |
| |
| // OOB store |
| // FIXME: Throw a TypeError when storing OOB in a TypedArray. |
| var { didRun } = keyedSta(new C); |
| assertTrue(didRun); |
| } |
| } |
| |
| // Test KeyedStore in polymorphic and megamorphic states. |
| do { |
| let keyedSta = function(array) { |
| var didRun = false; |
| array[0] = { |
| valueOf() { |
| didRun = true; |
| return 42n; |
| } |
| }; |
| |
| return { didRun, array }; |
| }; |
| |
| for (var i = 0; i < 3; ++i) { |
| for (var C of TypedArrayConstructors) { |
| var { didRun, array } = keyedSta(new C(1)); |
| assertTrue(didRun); |
| assertEquals(array[0], 42n); |
| |
| // OOB store |
| // FIXME: Throw a TypeError when storing OOB in a TypedArray. |
| var { didRun } = keyedSta(new C); |
| assertTrue(didRun); |
| } |
| } |
| } while (false); |