| // Copyright 2018 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. |
| |
| const impl = Symbol(); |
| class MyArrayLike { |
| constructor() { |
| this[impl] = [2, 1]; |
| Object.freeze(this); |
| } |
| get 0() { return this[impl][0]; } |
| set 0(value) { this[impl][0] = value; } |
| get 1() { return this[impl][1]; } |
| set 1(value) { this[impl][1] = value; } |
| get length() { return 2; } |
| } |
| |
| const xs = new MyArrayLike(); |
| Array.prototype.sort.call(xs); |
| |
| // Sort-order is implementation-defined as we actually hit two conditions from |
| // the spec: |
| // - "xs" is sparse and IsExtensible(xs) is false (its frozen). |
| // - "xs" is sparse and the prototype has properties in the sort range. |
| assertEquals(1, xs[0]); |
| assertEquals(2, xs[1]); |