blob: 1ac6efbe26bde0e3ee1b8b4f09fe0979b351a569 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00005// ArrayBuffer.prototype.slice makes subclass and checks length
6
7class MyArrayBuffer extends ArrayBuffer { }
8assertEquals(MyArrayBuffer, new MyArrayBuffer(0).slice().constructor);
9
10class MyShortArrayBuffer extends ArrayBuffer {
11 constructor(length) { super(length - 1); }
12}
13assertThrows(() => new MyShortArrayBuffer(5).slice(0, 4), TypeError);
14
15class SingletonArrayBuffer extends ArrayBuffer {
16 constructor(...args) {
17 if (SingletonArrayBuffer.cached) return SingletonArrayBuffer.cached;
18 super(...args);
19 SingletonArrayBuffer.cached = this;
20 }
21}
22assertThrows(() => new SingletonArrayBuffer(5).slice(0, 4), TypeError);
23
24class NonArrayBuffer extends ArrayBuffer {
25 constructor() {
26 return {};
27 }
28}
29assertThrows(() => new NonArrayBuffer(5).slice(0, 4), TypeError);
30
31// Species fallback is ArrayBuffer
32class UndefinedArrayBuffer extends ArrayBuffer { }
33UndefinedArrayBuffer.prototype.constructor = undefined;
34assertEquals(ArrayBuffer, new UndefinedArrayBuffer(0).slice().constructor);