| // 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 --no-always-opt |
| |
| function literals_sharing_test(warmup, optimize) { |
| function closure() { |
| // Ensure small array literals start in specific element kind mode. |
| assertTrue(%HasSmiElements([])); |
| assertTrue(%HasSmiElements([1])); |
| assertTrue(%HasSmiElements([1,2])); |
| assertTrue(%HasDoubleElements([1.1])); |
| assertTrue(%HasDoubleElements([1.1,2])); |
| |
| var a = [1, 2, 3]; |
| if (warmup) { |
| // Transition elements kind during warmup... |
| assertTrue(%HasSmiElements(a)); |
| assertEquals(4, a.push(1.3)); |
| } |
| // ... and ensure that the information about transitioning is |
| // propagated to the next closure. |
| assertTrue(%HasDoubleElements(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); |
| } |
| |
| test(); |