| // 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 --expose-gc --turbo-inline-array-builtins | |
| (function() { | |
| var result = 0; | |
| var proto_set_func = function(p, s) { | |
| %NeverOptimizeFunction(proto_set_func); | |
| if (s) { | |
| p[0] = 1; | |
| } | |
| } | |
| var f = function(s) { | |
| var b = [,,]; | |
| b[1] = 0; | |
| b[2] = 2; | |
| var sum = function(v,i,o) { | |
| if (i==1) proto_set_func(b.__proto__, s); | |
| result += v; | |
| }; | |
| b.forEach(sum); | |
| } | |
| f(); | |
| f(); | |
| %OptimizeFunctionOnNextCall(f); | |
| f(); | |
| f(true); | |
| f(); | |
| assertEquals(11, result); | |
| })(); |