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 9 class MyArrayBuffer extends ArrayBuffer { } 10 assertEquals(MyArrayBuffer, new MyArrayBuffer(0).slice().constructor); 11 12 class MyShortArrayBuffer extends ArrayBuffer { 13 constructor(length) { super(length - 1); } 14 } 15 assertThrows(() => new MyShortArrayBuffer(5).slice(0, 4), TypeError); 16 17 class SingletonArrayBuffer extends ArrayBuffer { 18 constructor(...args) { 19 if (SingletonArrayBuffer.cached) return SingletonArrayBuffer.cached; 20 super(...args); 21 SingletonArrayBuffer.cached = this; 22 } 23 } 24 assertThrows(() => new SingletonArrayBuffer(5).slice(0, 4), TypeError); 25 26 class NonArrayBuffer extends ArrayBuffer { 27 constructor() { 28 return {}; 29 } 30 } 31 assertThrows(() => new NonArrayBuffer(5).slice(0, 4), TypeError); 32 33 // Species fallback is ArrayBuffer 34 class UndefinedArrayBuffer extends ArrayBuffer { } 35 UndefinedArrayBuffer.prototype.constructor = undefined; 36 assertEquals(ArrayBuffer, new UndefinedArrayBuffer(0).slice().constructor); 37