// Copyright 2015 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. // ArrayBuffer.prototype.slice makes subclass and checks length class MyArrayBuffer extends ArrayBuffer { } assertEquals(MyArrayBuffer, new MyArrayBuffer(0).slice().constructor); class MyShortArrayBuffer extends ArrayBuffer { constructor(length) { super(length - 1); } } assertThrows(() => new MyShortArrayBuffer(5).slice(0, 4), TypeError); class SingletonArrayBuffer extends ArrayBuffer { constructor(...args) { if (SingletonArrayBuffer.cached) return SingletonArrayBuffer.cached; super(...args); SingletonArrayBuffer.cached = this; } } assertThrows(() => new SingletonArrayBuffer(5).slice(0, 4), TypeError); class NonArrayBuffer extends ArrayBuffer { constructor() { return {}; } } assertThrows(() => new NonArrayBuffer(5).slice(0, 4), TypeError); // Species fallback is ArrayBuffer class UndefinedArrayBuffer extends ArrayBuffer { } UndefinedArrayBuffer.prototype.constructor = undefined; assertEquals(ArrayBuffer, new UndefinedArrayBuffer(0).slice().constructor);