// 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)); }; %PrepareFunctionForOptimization(closure); ; %EnsureFeedbackVectorForFunction(closure); 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();