| // Copyright 2017 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-flush-bytecode --no-stress-flush-bytecode |
| |
| /* Test MapCheck behavior */ |
| |
| (function testForEachMapCheck() { |
| function f(v,n,o) { |
| Object.freeze(o); |
| } |
| function g() { |
| [1,2,3].forEach(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| assertOptimized(g); |
| })(); |
| |
| |
| (function testFindMapCheck() { |
| function f(v,n,o) { |
| Object.freeze(o); |
| return false; |
| } |
| function g() { |
| [1,2,3].find(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| assertOptimized(g); |
| })(); |
| |
| (function testMapMapCheck() { |
| function f(v,n,o) { |
| Object.freeze(o); |
| return false; |
| } |
| function g() { |
| [1,2,3].map(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| assertOptimized(g); |
| })(); |
| |
| (function testFilterMapCheck() { |
| function f(v,n,o) { |
| Object.freeze(o); |
| return true; |
| } |
| function g() { |
| [1,2,3].filter(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| assertOptimized(g); |
| })(); |
| |
| |
| /* Test CheckBounds behavior */ |
| |
| (function testForEachCheckBounds() { |
| function f(v,n,o) { |
| o.length=2; |
| } |
| function g() { |
| [1,2,3].forEach(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| assertOptimized(g); |
| })(); |
| |
| |
| (function testFindCheckBounds() { |
| function f(v,n,o) { |
| o.length=2; |
| return false; |
| } |
| function g() { |
| [1,2,3].find(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| assertOptimized(g); |
| })(); |
| |
| (function testMapCheckBounds() { |
| function f(v,n,o) { |
| o.length=2; |
| return false; |
| } |
| function g() { |
| [1,2,3].map(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| assertOptimized(g); |
| })(); |
| |
| (function testFilterCheckBounds() { |
| function f(v,n,o) { |
| o.length = 2; |
| return true; |
| } |
| function g() { |
| [1,2,3].filter(f); |
| } |
| %PrepareFunctionForOptimization(g); |
| g(); |
| g(); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| g(); |
| %PrepareFunctionForOptimization(g); |
| %OptimizeFunctionOnNextCall(g); |
| g(); |
| g(); |
| assertOptimized(g); |
| })(); |