// 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

function Baseline() {
  let array = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

  let it = array[Symbol.iterator]();
  assertEquals(0, it.next().value);
  assertEquals(1, it.next().value);
  assertEquals(2, it.next().value);
  %ArrayBufferNeuter(array.buffer);
  it.next();
};
%NeverOptimizeFunction(Baseline);

assertThrows(Baseline, TypeError,
    "Cannot perform Array Iterator.prototype.next on a detached ArrayBuffer");

function Turbo(count = 10000) {
  let array = Array(10000);
  for (let i = 0; i < 10000; ++i) {
    array[i] = 254;
  }
  array[5000] = 255;
  array = new Uint8Array(array);

  let sum = 0;
  let it = array[Symbol.iterator]();
  for (let i = 0; i < count; ++i) {
    let result = it.next();
    if (result.value === 255) {
      %ArrayBufferNeuter(array.buffer);
    }
    sum += result.value;
  }
  return sum;
}

Turbo(10);
Turbo(10);
%OptimizeFunctionOnNextCall(Turbo);

assertThrows(Turbo, TypeError,
    "Cannot perform Array Iterator.prototype.next on a detached ArrayBuffer");
