// 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 --opt --no-always-opt (()=> { function f(a, b, c) { return String.prototype.indexOf.call(a, b, c); } %PrepareFunctionForOptimization(f); f("abc", "de", 1); f("abc", "de", 1); %OptimizeFunctionOnNextCall(f); f("abc", "de", {}); %PrepareFunctionForOptimization(f); %OptimizeFunctionOnNextCall(f); f("abc", "de", {}); assertOptimized(f); })(); (()=> { function f(a, b, c) { return String.prototype.indexOf.apply(a, [b, c]); } %PrepareFunctionForOptimization(f); f("abc", "de", 1); f("abc", "de", 1); %OptimizeFunctionOnNextCall(f); f("abc", {}, 1); %PrepareFunctionForOptimization(f); %OptimizeFunctionOnNextCall(f); f("abc", {}, 1); assertOptimized(f); })(); (()=> { function f(a, b, c) { return Reflect.apply(String.prototype.indexOf, a, [b, c]); } %PrepareFunctionForOptimization(f); f("abc", "de", 1); f("abc", "de", 1); %PrepareFunctionForOptimization(f); %OptimizeFunctionOnNextCall(f); f({}, "de", 1); %PrepareFunctionForOptimization(f); %OptimizeFunctionOnNextCall(f); f({}, "de", 1); assertOptimized(f); })(); (()=> { function f(a, b) { return String.fromCharCode.call(a, b); } %PrepareFunctionForOptimization(f); f("abc", 1); f("abc", 1); %OptimizeFunctionOnNextCall(f); f("abc", {}); %PrepareFunctionForOptimization(f); %OptimizeFunctionOnNextCall(f); f({}, {}); assertOptimized(f); })(); (()=> { function f(a, b) { return String.fromCharCode.apply(undefined, [b, {}]); } %PrepareFunctionForOptimization(f); f("abc", 1); f("abc", 1); %OptimizeFunctionOnNextCall(f); f("abc", {}); %PrepareFunctionForOptimization(f); %OptimizeFunctionOnNextCall(f); f("abc", {}); assertOptimized(f); })(); (()=> { function f(a, b) { return Reflect.apply(String.fromCharCode, a, [b, {}]); } %PrepareFunctionForOptimization(f); f("abc", 1); f("abc", 1); %OptimizeFunctionOnNextCall(f); f("abc", {}); %PrepareFunctionForOptimization(f); %OptimizeFunctionOnNextCall(f); f("abc", {}); assertOptimized(f); })();