| // 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 literals_sharing_test(warmup, optimize) { |
| function closure() { |
| // Ensure small array literals start in specific element kind mode. |
| assertTrue(%HasFastSmiElements([])); |
| assertTrue(%HasFastSmiElements([1])); |
| assertTrue(%HasFastSmiElements([1,2])); |
| assertTrue(%HasFastDoubleElements([1.1])); |
| assertTrue(%HasFastDoubleElements([1.1,2])); |
| |
| var a = [1, 2, 3]; |
| if (warmup) { |
| // Transition elements kind during warmup... |
| assertTrue(%HasFastSmiElements(a)); |
| assertEquals(4, a.push(1.3)); |
| } |
| // ... and ensure that the information about transitioning is |
| // propagated to the next closure. |
| assertTrue(%HasFastDoubleElements(a)); |
| }; |
| if (optimize) %OptimizeFunctionOnNextCall(closure); |
| closure(); |
| } |
| |
| |
| function test() { |
| var warmup = true; |
| for (var i = 0; i < 3; i++) { |
| print("iter: " + i + ", warmup: "+ warmup); |
| literals_sharing_test(warmup, false); |
| warmup = false; |
| } |
| print("iter: " + i + ", opt: true"); |
| literals_sharing_test(warmup, true); |
| } |
| |
| |
| function stress_opt_test() {} |
| stress_opt_test(); |
| if (%GetOptimizationStatus(stress_opt_test) == 2) { |
| // This test is not suitable for --always-opt mode. |
| test(); |
| } |