}
+static njs_ret_t
+njs_array_prototype_reverse(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+ njs_index_t unused)
+{
+ nxt_uint_t i, n, length;
+ njs_value_t value;
+ njs_array_t *array;
+
+ if (njs_is_array(&args[0])) {
+ array = args[0].data.u.array;
+ length = array->length;
+
+ if (length > 1) {
+ for (i = 0, n = length - 1; i < n; i++, n--) {
+ value = array->start[i];
+ array->start[i] = array->start[n];
+ array->start[n] = value;
+ }
+ }
+
+ vm->retval.data.u.array = array;
+ vm->retval.type = NJS_ARRAY;
+ vm->retval.data.truth = 1;
+
+ } else {
+ /* STUB */
+ vm->retval = args[0];
+ }
+
+ return NXT_OK;
+}
+
+
/*
* ECMAScript 5.1: try first to use object method "join", then
* use the standard built-in method Object.prototype.toString().
.value = njs_native_function(njs_array_prototype_shift, 0, 0),
},
+ {
+ .type = NJS_METHOD,
+ .name = njs_string("reverse"),
+ .value = njs_native_function(njs_array_prototype_reverse, 0,
+ NJS_OBJECT_ARG),
+ },
+
{
.type = NJS_METHOD,
.name = njs_string("toString"),
"len +' '+ a +' '+ a.shift()"),
nxt_string("5 3,4,5,1,2 3") },
+ { nxt_string("var a = []; a.reverse()"),
+ nxt_string("") },
+
+ { nxt_string("var a = [1]; a.reverse()"),
+ nxt_string("1") },
+
+ { nxt_string("var a = [1,2]; a.reverse()"),
+ nxt_string("2,1") },
+
+ { nxt_string("var a = [1,2,3]; a.reverse()"),
+ nxt_string("3,2,1") },
+
+ { nxt_string("var a = [1,2,3,4]; a.reverse()"),
+ nxt_string("4,3,2,1") },
+
{ nxt_string("var a = []; var s = { sum: 0 };"
"a.forEach(function(v, i, a) { this.sum += v }, s); s.sum"),
nxt_string("0") },
{ nxt_string("'abc'.split(/abc/)"),
nxt_string(",") },
+ { nxt_string("'0123456789'.split('').reverse().join('')"),
+ nxt_string("9876543210") },
+
/* Functions. */
{ nxt_string("function f() { } f()"),