1// Copyright 2015 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Flags: --harmony-species 6 7// ArrayBuffer.prototype.slice makes subclass and checks length 8 9class MyArrayBuffer extends ArrayBuffer { } 10assertEquals(MyArrayBuffer, new MyArrayBuffer(0).slice().constructor); 11 12class MyShortArrayBuffer extends ArrayBuffer { 13 constructor(length) { super(length - 1); } 14} 15assertThrows(() => new MyShortArrayBuffer(5).slice(0, 4), TypeError); 16 17class SingletonArrayBuffer extends ArrayBuffer { 18 constructor(...args) { 19 if (SingletonArrayBuffer.cached) return SingletonArrayBuffer.cached; 20 super(...args); 21 SingletonArrayBuffer.cached = this; 22 } 23} 24assertThrows(() => new SingletonArrayBuffer(5).slice(0, 4), TypeError); 25 26class NonArrayBuffer extends ArrayBuffer { 27 constructor() { 28 return {}; 29 } 30} 31assertThrows(() => new NonArrayBuffer(5).slice(0, 4), TypeError); 32 33// Species fallback is ArrayBuffer 34class UndefinedArrayBuffer extends ArrayBuffer { } 35UndefinedArrayBuffer.prototype.constructor = undefined; 36assertEquals(ArrayBuffer, new UndefinedArrayBuffer(0).slice().constructor); 37