blob: 73785cb443d8470202e238c77027dd0aadee62d2 [file] [log] [blame]
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-%typedarray%.prototype.subarray
description: Throws a TypeError creating a new instance with a detached buffer
info: |
22.2.3.27 %TypedArray%.prototype.subarray( begin , end )
...
7. Let relativeBegin be ? ToInteger(begin).
...
9. If end is undefined, let relativeEnd be srcLength; else, let relativeEnd be
? ToInteger(end).
...
17. Return ? TypedArraySpeciesCreate(O, argumentsList).
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
...
3. Let constructor be ? SpeciesConstructor(exemplar, defaultConstructor).
4. Return ? TypedArrayCreate(constructor, argumentList).
22.2.4.6 TypedArrayCreate ( constructor, argumentList )
1. Let newTypedArray be ? Construct(constructor, argumentList).
...
22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] )
...
11. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
...
includes: [testTypedArray.js, detachArrayBuffer.js]
features: [TypedArray]
---*/
var begin, end;
var o1 = {
valueOf: function() {
begin = true;
return 0;
}
};
var o2 = {
valueOf: function() {
end = true;
return 2;
}
};
testWithTypedArrayConstructors(function(TA) {
var sample = new TA(2);
begin = false;
end = false;
$DETACHBUFFER(sample.buffer);
assert.throws(TypeError, function() {
sample.subarray(o1, o2);
});
assert(begin, "observable ToInteger(begin)");
assert(end, "observable ToInteger(end)");
});