| // 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. |
| |
| // Flags: --allow-natives-syntax |
| |
| |
| function f1() { |
| const x = [,]; |
| x[1] = 42; |
| assertEquals([undefined, 42], x); |
| } |
| |
| %PrepareFunctionForOptimization(f1); |
| f1(); |
| f1(); |
| %OptimizeFunctionOnNextCall(f1); |
| f1(); |
| f1(); |
| |
| |
| function f2() { |
| const x = [0]; |
| for (const y of [1, 2, 3, 4]) { |
| x[x.length] = y; |
| } |
| assertEquals([0, 1, 2, 3, 4], x); |
| } |
| |
| %PrepareFunctionForOptimization(f2); |
| f2(); |
| f2(); |
| %OptimizeFunctionOnNextCall(f2); |
| f2(); |
| f2(); |
| |
| |
| function f3() { |
| const x = [0]; |
| for (const y of [1.1, {}]) { |
| x[x.length] = y; |
| } |
| assertEquals([0, 1.1, {}], x); |
| } |
| |
| %PrepareFunctionForOptimization(f3); |
| f3(); |
| f3(); |
| %OptimizeFunctionOnNextCall(f3); |
| f3(); |
| f3(); |
| |
| |
| function f4(x) { |
| x[x.length] = x.length; |
| } |
| |
| %PrepareFunctionForOptimization(f4); |
| let x1 = []; |
| f4(x1); |
| assertEquals([0], x1); |
| f4(x1); |
| assertEquals([0, 1], x1); |
| %OptimizeFunctionOnNextCall(f4); |
| f4(x1); |
| assertEquals([0, 1, 2], x1); |
| f4(x1); |
| assertEquals([0, 1, 2, 3], x1); |
| |
| %PrepareFunctionForOptimization(f4); |
| let x2 = {length: 42}; |
| f4(x2); |
| assertEquals(42, x2[42]); |
| f4(x2); |
| assertEquals(42, x2[42]); |
| %OptimizeFunctionOnNextCall(f4); |
| f4(x2); |
| assertEquals(42, x2[42]); |
| f4(x2); |
| assertEquals(42, x2[42]); |