| // 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 = [,,]; | 
 |     proto_set_func(b.__proto__, s); | 
 |     b[1] = 0; | 
 |     b[2] = 2; | 
 |     var sum = function(v,i,o) { | 
 |       result += v; | 
 |     }; | 
 |     b.forEach(sum); | 
 |   }; | 
 |   %PrepareFunctionForOptimization(f); | 
 |   f(); | 
 |   f(); | 
 |   %OptimizeFunctionOnNextCall(f); | 
 |   f(); | 
 |   f(true); | 
 |   f(); | 
 |   assertEquals(12, result); | 
 | })(); |