return NJS_ERROR;
}
- if (!njs_is_typed_array(retval)) {
+ if (njs_slow_path(!njs_is_typed_array(retval))) {
njs_type_error(vm, "Derived TypedArray constructor "
"returned not a typed array");
return NJS_ERROR;
}
+ if (njs_slow_path(nargs == 1 && njs_is_number(&args[0])
+ && njs_typed_array_length(njs_typed_array(retval))
+ < njs_number(&args[0])))
+ {
+ njs_type_error(vm, "Derived TypedArray constructor "
+ "returned too short array");
+ return NJS_ERROR;
+ }
+
return NJS_OK;
}
" try {a.slice(0)} catch(e) {return e.name == 'TypeError'}})"),
njs_str("true") },
+ { njs_str(NJS_TYPED_ARRAY_LIST
+ ".every(v=>{var a = new v(2); "
+ " a.constructor = {}; "
+ " a.constructor[Symbol.species] = function() { return new v()};"
+ " try {a.filter(v=>true)} catch(e) {return e.name == 'TypeError'}})"),
+ njs_str("true") },
+
{ njs_str(NJS_TYPED_ARRAY_LIST
".every(v=>{var a = new v([1,2,3]); "
" var r = a.slice(1,3);"
" return a.buffer === r.buffer;})"),
njs_str("true") },
+ { njs_str(NJS_TYPED_ARRAY_LIST
+ ".every(v=>{var a = new v([1,2,3]); "
+ " return a.subarray(3).length === 0;})"),
+ njs_str("true") },
+
{ njs_str(NJS_TYPED_ARRAY_LIST
".every(v=>{var a = new v([1,2,3,4]); a.copyWithin(2); "
" return a.toString() === '1,2,1,2'})"),