| // 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: --expose-gc |
| |
| var proxy = new Proxy([], { |
| defineProperty() { |
| w.length = 1; // shorten the array so the backstore pointer is relocated |
| gc(); // force gc to move the array's elements backstore |
| return Object.defineProperty.apply(this, arguments); |
| } |
| }); |
| |
| class MyArray extends Array { |
| // custom constructor which returns a proxy object |
| static get[Symbol.species](){ |
| return function() { |
| return proxy; |
| } |
| }; |
| } |
| |
| var w = new MyArray(100); |
| w[1] = 0.1; |
| w[2] = 0.1; |
| |
| var result = Array.prototype.concat.call(w); |
| |
| assertEquals(undefined, result[0]); |
| assertEquals(0.1, result[1]); |
| |
| for (var i = 2; i < 200; i++) { |
| assertEquals(undefined, result[i]); |
| } |