// 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 modifyArrayIterator() {
  'use strict';

  class Point {
    constructor(x, y) {
      this.x = x;
      this.y = y;
    }
  }

  class RestPoint extends Point {
    constructor(...args) {
      super(...args);
    }
  }

  function testRestPoint(x, y) {
    return new RestPoint(x, y);
  }
  testRestPoint(1, 2);
  testRestPoint(1, 2);
  % OptimizeFunctionOnNextCall(testRestPoint);
  var r = testRestPoint(1, 2);

  assertInstanceof(r, RestPoint);
  assertInstanceof(r, Point);
  assertEquals(1, r.x);
  assertEquals(2, r.y);

  Object.defineProperty(Array.prototype, Symbol.iterator, {
    value: function*
        () {
          yield 3;
          yield 4;
        },
    configurable: true
  });

  var r2 = testRestPoint(1, 2);

  assertInstanceof(r2, RestPoint);
  assertInstanceof(r2, Point);
  assertEquals(3, r2.x);
  assertEquals(4, r2.y);
})();
