details: https://hg.nginx.org/njs/rev/fa60c896acaa branches: changeset: 2140:fa60c896acaa user: Dmitry Volyntsev <xei...@nginx.com> date: Fri May 26 20:58:22 2023 -0700 description: Added %TypedArray%.prototype.toSorted().
diffstat: src/njs_typed_array.c | 20 +++++++++++++++++--- src/test/njs_unit_test.c | 11 +++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diffs (69 lines): diff -r 84eadc155d46 -r fa60c896acaa src/njs_typed_array.c --- a/src/njs_typed_array.c Fri May 26 20:58:19 2023 -0700 +++ b/src/njs_typed_array.c Fri May 26 20:58:22 2023 -0700 @@ -1897,13 +1897,13 @@ exception: static njs_int_t njs_typed_array_prototype_sort(njs_vm_t *vm, njs_value_t *args, - njs_uint_t nargs, njs_index_t unused, njs_value_t *retval) + njs_uint_t nargs, njs_index_t to_sorted, njs_value_t *retval) { u_char *base, *orig; int64_t length; uint32_t element_size; - njs_value_t *this, *comparefn; - njs_typed_array_t *array; + njs_value_t *this, *comparefn, arguments[1]; + njs_typed_array_t *array, *self; njs_array_buffer_t *buffer; njs_typed_array_cmp_t cmp; njs_typed_array_sort_ctx_t ctx; @@ -1920,6 +1920,18 @@ njs_typed_array_prototype_sort(njs_vm_t return NJS_ERROR; } + if (to_sorted) { + self = array; + njs_set_number(&arguments[0], njs_typed_array_length(self)); + array = njs_typed_array_alloc(vm, arguments, 1, 0, self->type); + if (njs_slow_path(array == NULL)) { + return NJS_ERROR; + } + + memcpy(&array->buffer->u.u8[0], &self->buffer->u.u8[0], + self->byte_length); + } + ctx.vm = vm; ctx.buffer = array->buffer; ctx.exception = 0; @@ -2284,6 +2296,8 @@ static const njs_object_prop_t njs_type NJS_DECLARE_PROP_NATIVE("subarray", njs_typed_array_prototype_slice, 2, 0), + NJS_DECLARE_PROP_NATIVE("toSorted", njs_typed_array_prototype_sort, 1, 1), + NJS_DECLARE_PROP_NATIVE("toString", njs_array_prototype_to_string, 0, 0), NJS_DECLARE_PROP_NATIVE("values", njs_typed_array_prototype_iterator_obj, diff -r 84eadc155d46 -r fa60c896acaa src/test/njs_unit_test.c --- a/src/test/njs_unit_test.c Fri May 26 20:58:19 2023 -0700 +++ b/src/test/njs_unit_test.c Fri May 26 20:58:22 2023 -0700 @@ -6751,6 +6751,17 @@ static njs_unit_test_t njs_test[] = { njs_str("(new Float64Array([255,255,NaN,3,NaN,Infinity,3,-Infinity,0,-0,2,1,-5])).slice(2).sort()"), njs_str("-Infinity,-5,0,0,1,2,3,3,Infinity,NaN,NaN") }, + { njs_str(NJS_TYPED_ARRAY_LIST + ".every(v=>{var a = new v([3,2,1]);" + " return [a.toSorted(),a].toString() === '1,2,3,3,2,1'})"), + njs_str("true") }, + + { njs_str(NJS_TYPED_ARRAY_LIST + ".every(v=>{var a = (new v([3,2,1]));" + " a.constructor = (v == Uint8Array) ? Uint32Array : Uint8Array;" + " return Object.getPrototypeOf(a.toSorted()) === v.prototype})"), + njs_str("true") }, + { njs_str("(new DataView(new ArrayBuffer(3)))"), njs_str("[object DataView]") }, _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel