}
+static njs_ret_t
+njs_array_prototype_fill(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+ njs_index_t unused)
+{
+ nxt_int_t start, end, length;
+ njs_array_t *array;
+
+ vm->retval = args[0];
+
+ if (nargs < 2 || !njs_is_array(&args[0])) {
+ return NXT_OK;
+ }
+
+ array = args[0].data.u.array;
+ length = array->length;
+
+ if (length == 0) {
+ return NXT_OK;
+ }
+
+ start = 0;
+ end = length;
+
+ if (nargs > 2) {
+ start = args[2].data.u.number;
+
+ if (start > length) {
+ start = length;
+ }
+
+ if (start < 0) {
+ start += length;
+
+ if (start < 0) {
+ start = 0;
+ }
+ }
+
+ if (nargs > 3) {
+ end = args[3].data.u.number;
+
+ if (end > length) {
+ end = length;
+ }
+
+ if (end < 0) {
+ end += length;
+
+ if (end < 0) {
+ end = 0;
+ }
+ }
+ }
+ }
+
+ while (start < end) {
+ array->start[start++] = args[1];
+ }
+
+ return NXT_OK;
+}
+
+
static njs_ret_t
njs_array_prototype_filter(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
njs_continuation_size(njs_array_iter_t), 0),
},
+ /* ES6. */
+ {
+ .type = NJS_METHOD,
+ .name = njs_string("fill"),
+ .value = njs_native_function(njs_array_prototype_fill, 0,
+ NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_NUMBER_ARG,
+ NJS_NUMBER_ARG),
+ },
+
{
.type = NJS_METHOD,
.name = njs_string("filter"),
"a.every(function(v, i, a) { return v > 0 })"),
nxt_string("true") },
+ { nxt_string("[].fill(1);"),
+ nxt_string("") },
+
+ { nxt_string("[1,2,3].fill(5);"),
+ nxt_string("5,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, 0);"),
+ nxt_string("5,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, 1);"),
+ nxt_string("1,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, 4);"),
+ nxt_string("1,2,3") },
+
+ { nxt_string("[1,2,3].fill(5, -2);"),
+ nxt_string("1,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, -3);"),
+ nxt_string("5,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, -4);"),
+ nxt_string("5,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, 1, 0);"),
+ nxt_string("1,2,3") },
+
+ { nxt_string("[1,2,3].fill(5, 1, 1);"),
+ nxt_string("1,2,3") },
+
+ { nxt_string("[1,2,3].fill(5, 1, 2);"),
+ nxt_string("1,5,3") },
+
+ { nxt_string("[1,2,3].fill(5, 1, 3);"),
+ nxt_string("1,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, 1, 4);"),
+ nxt_string("1,5,5") },
+
+ { nxt_string("[1,2,3].fill(5, 1, -1);"),
+ nxt_string("1,5,3") },
+
+ { nxt_string("[1,2,3].fill(5, 1, -3);"),
+ nxt_string("1,2,3") },
+
+ { nxt_string("[1,2,3].fill(5, 1, -4);"),
+ nxt_string("1,2,3") },
+
+ { nxt_string("[1,2,3].fill(\"a\", 1, 2);"),
+ nxt_string("1,a,3") },
+
+ { nxt_string("[1,2,3].fill({a:\"b\"}, 1, 2);"),
+ nxt_string("1,[object Object],3") },
+
{ nxt_string("var a = [];"
"a.filter(function(v, i, a) { return v > 1 })"),
nxt_string("") },