| // Copyright 2019 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 | |
| (function() { | |
| function foo(string) { return string.startsWith('a'); } | |
| %PrepareFunctionForOptimization(foo); | |
| assertEquals(false, foo('')); | |
| assertEquals(true, foo('a')); | |
| assertEquals(false, foo('ba')); | |
| assertEquals(true, foo('abc')); | |
| %OptimizeFunctionOnNextCall(foo); | |
| assertEquals(false, foo('')); | |
| assertEquals(true, foo('a')); | |
| assertEquals(false, foo('ba')); | |
| assertEquals(true, foo('abc')); | |
| assertOptimized(foo); | |
| })(); | |
| (function() { | |
| function f() { return "abc".startsWith(); } | |
| %PrepareFunctionForOptimization(f); | |
| assertEquals(false, f()); | |
| assertEquals(false, f()); | |
| %OptimizeFunctionOnNextCall(f); | |
| assertEquals(false, f()); | |
| assertOptimized(f); | |
| })(); | |
| (function() { | |
| function g(n) { return "abc".startsWith("a", n); } | |
| %PrepareFunctionForOptimization(g); | |
| assertEquals(true, g(-1)); | |
| assertEquals(true, g(0)); | |
| assertEquals(false, g(1)); | |
| assertEquals(false, g(2)); | |
| assertEquals(false, g(3)); | |
| assertEquals(false, g(4)); | |
| %OptimizeFunctionOnNextCall(g); | |
| assertEquals(true, g(-1)); | |
| assertEquals(true, g(0)); | |
| assertEquals(false, g(1)); | |
| assertEquals(false, g(2)); | |
| assertEquals(false, g(3)); | |
| assertEquals(false, g(4)); | |
| assertOptimized(g); | |
| })(); | |
| (function() { | |
| function g(n) { return "cba".startsWith("a", n); } | |
| %PrepareFunctionForOptimization(g); | |
| assertEquals(false, g(-1)); | |
| assertEquals(false, g(0)); | |
| assertEquals(false, g(1)); | |
| assertEquals(true, g(2)); | |
| assertEquals(false, g(3)); | |
| assertEquals(false, g(4)); | |
| %OptimizeFunctionOnNextCall(g); | |
| assertEquals(false, g(-1)); | |
| assertEquals(false, g(0)); | |
| assertEquals(false, g(1)); | |
| assertEquals(true, g(2)); | |
| assertEquals(false, g(3)); | |
| assertEquals(false, g(4)); | |
| assertOptimized(g); | |
| })(); | |
| (function() { | |
| function f(n) { return "cba".startsWith("a", n); } | |
| %PrepareFunctionForOptimization(f); | |
| f(); | |
| f(); | |
| %OptimizeFunctionOnNextCall(f); | |
| assertEquals(false, f(1073741824)); | |
| })(); |