Index: test/mjsunit/es6/super-with-spread-modify-array-iterator.js |
diff --git a/test/mjsunit/es6/super-with-spread-modify-array-iterator.js b/test/mjsunit/es6/super-with-spread-modify-array-iterator.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..70ce9ca15915e8d2683f3a7d0c7448cafc210707 |
--- /dev/null |
+++ b/test/mjsunit/es6/super-with-spread-modify-array-iterator.js |
@@ -0,0 +1,51 @@ |
+// 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); |
+})(); |