Source code

Revision control

Copy as Markdown

Other Tools

for (var constructor of anyTypedArrayConstructors) {
// Note %TypedArray%.from(iterable) calls 'this' with an argument whose value is
// `[...iterable].length`, while Array.from(iterable) doesn't pass any argument.
constructor.from.call(function(len){
assertEq(len, 3);
return new constructor(len);
}, Array(3));
// If the 'this' value passed to %TypedArray.from is not a constructor,
// then an exception is thrown, while Array.from will use Array as it's constructor.
var arr = [3, 4, 5];
var nonconstructors = [
{}, Math, Object.getPrototypeOf, undefined, 17,
() => ({}) // arrow functions are not constructors
];
for (var v of nonconstructors) {
assertThrowsInstanceOf(() => {
constructor.from.call(v, arr);
}, TypeError);
}
// %TypedArray%.from does not get confused if global constructors for typed arrays
// are replaced with another constructor.
function NotArray(...rest) {
return new constructor(...rest);
}
var RealArray = constructor;
NotArray.from = constructor.from;
this[constructor.name] = NotArray;
assertEq(RealArray.from([1]) instanceof RealArray, true);
assertEq(NotArray.from([1]) instanceof RealArray, true);
this[constructor.name] = RealArray;
}
if (typeof reportCompare === "function")
reportCompare(true, true);