From: Dmitry Volyntsev Date: Sat, 27 May 2023 02:13:41 +0000 (-0700) Subject: Introduced Array.prototype.toReversed(). X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=859c9a12c3fc3824190403d9eb6ea54690cdccc2;p=njs.git Introduced Array.prototype.toReversed(). --- diff --git a/src/njs_array.c b/src/njs_array.c index f73e0d1b..aa9447c3 100644 --- a/src/njs_array.c +++ b/src/njs_array.c @@ -1575,6 +1575,50 @@ njs_array_prototype_reverse(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, } +static njs_int_t +njs_array_prototype_to_reversed(njs_vm_t *vm, njs_value_t *args, + njs_uint_t nargs, njs_index_t unused, njs_value_t *retval) +{ + int64_t length, i; + njs_int_t ret; + njs_array_t *array; + njs_value_t *this, value; + + this = njs_argument(args, 0); + + ret = njs_value_to_object(vm, this); + if (njs_slow_path(ret != NJS_OK)) { + return ret; + } + + ret = njs_value_length(vm, this, &length); + if (njs_slow_path(ret != NJS_OK)) { + return ret; + } + + array = njs_array_alloc(vm, 0, length, 0); + if (njs_slow_path(array == NULL)) { + return NJS_ERROR; + } + + njs_set_array(retval, array); + + for (i = 0; i < length; i++) { + ret = njs_value_property_i64(vm, this, length - i - 1, &value); + if (njs_slow_path(ret == NJS_ERROR)) { + return NJS_ERROR; + } + + ret = njs_value_create_data_prop_i64(vm, retval, i, &value, 0); + if (njs_slow_path(ret != NJS_OK)) { + return ret; + } + } + + return NJS_OK; +} + + njs_int_t njs_array_prototype_to_string(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused, njs_value_t *retval) @@ -3189,6 +3233,8 @@ static const njs_object_prop_t njs_array_prototype_properties[] = NJS_DECLARE_PROP_NATIVE("splice", njs_array_prototype_splice, 2, 0), + NJS_DECLARE_PROP_NATIVE("toReversed", njs_array_prototype_to_reversed, 0, 0), + NJS_DECLARE_PROP_NATIVE("toSorted", njs_array_prototype_to_sorted, 1, 0), NJS_DECLARE_PROP_NATIVE("toSpliced", njs_array_prototype_to_spliced, 2, 0), diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 2b51cf85..f8a83e40 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -5218,6 +5218,9 @@ static njs_unit_test_t njs_test[] = { njs_str("Array.prototype[0] = 0; var x = [,1]; x.reverse(); x"), njs_str("1,0") }, + { njs_str("var a = [,3,2,1]; njs.dump([a.toReversed(),a])"), + njs_str("[[1,2,3,undefined],[,3,2,1]]") }, + { njs_str("var a = [1,2,3,4]; a.indexOf()"), njs_str("-1") },