// Copyright 2016 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 --expose-gc // Make sure literals are strongly rooted and safe from weak-code deopts. (function() { function foo() { var a = { y: 0 }; a.y = 1; return a; } foo(); foo(); %OptimizeFunctionOnNextCall(foo); foo(); gc(); assertOptimized(foo); })(); (function() { function hot(o) { return o.x + o.y; } function mapPlus(a, y) { return a.map(x => hot({x, y})); } var a = [1, 2, 3]; print(mapPlus(a, 1)); print(mapPlus(a, 2)); %OptimizeFunctionOnNextCall(hot); print(mapPlus(a, 3)); gc(); // BOOOM! assertOptimized(hot); print(mapPlus(a, 4)); })(); // Verify that we can handle the creation of a new script, where the // code is cached and the feedback vector has to be re-created. (function() { var sopen = "function wrapper() { "; var s1 = "function foo() { return bar(5); } "; var s2 = "foo(); foo(); %OptimizeFunctionOnNextCall(foo); foo(); "; var sclose = "} wrapper(); "; var s = sopen + s1 + s2 + sclose; function bar(i) { return i + 3 }; for (var i = 0; i < 4; i++) { eval(s); } })();