// 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); } %PrepareFunctionForOptimization(testRestPoint); 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); })();