]> git.kaiwu.me - njs.git/commitdiff
Array.of() method.
authorAndrey Zelenkov <zelenkov@nginx.com>
Thu, 30 Mar 2017 19:01:17 +0000 (22:01 +0300)
committerAndrey Zelenkov <zelenkov@nginx.com>
Thu, 30 Mar 2017 19:01:17 +0000 (22:01 +0300)
njs/njs_array.c
njs/test/njs_unit_test.c

index 920b8ad8cf31bffb21771196a7e143b1c5419240..4918fd817ab98ab548f51aa33b87c9e2696decd4 100644 (file)
@@ -291,6 +291,32 @@ njs_array_is_array(njs_vm_t *vm, njs_value_t *args,
 }
 
 
+static njs_ret_t
+njs_array_of(njs_vm_t *vm, njs_value_t *args,
+    nxt_uint_t nargs, njs_index_t unused)
+{
+        uint32_t     length, i;
+        njs_array_t  *array;
+
+        length = nargs > 1 ? nargs - 1 : 0;
+
+        array = njs_array_alloc(vm, length, NJS_ARRAY_SPARE);
+        if (nxt_slow_path(array == NULL)) {
+            return NXT_ERROR;
+        }
+
+        vm->retval.data.u.array = array;
+        vm->retval.type = NJS_ARRAY;
+        vm->retval.data.truth = 1;
+
+        for (i = 0; i < length; i++) {
+            array->start[i] = args[i + 1];
+        }
+
+        return NXT_OK;
+}
+
+
 static const njs_object_prop_t  njs_array_constructor_properties[] =
 {
     /* Array.name == "Array". */
@@ -320,6 +346,14 @@ static const njs_object_prop_t  njs_array_constructor_properties[] =
         .name = njs_string("isArray"),
         .value = njs_native_function(njs_array_is_array, 0, 0),
     },
+
+    /* ES6. */
+    /* Array.of(). */
+    {
+        .type = NJS_METHOD,
+        .name = njs_string("of"),
+        .value = njs_native_function(njs_array_of, 0, 0),
+    },
 };
 
 
index 24974b2264bc1191e393808b055525764d8c4f4e..453b427bfadaf94d498f8fd72716a10976f31803 100644 (file)
@@ -2499,6 +2499,18 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("Array.isArray([])"),
       nxt_string("true") },
 
+    { nxt_string("Array.of()"),
+      nxt_string("") },
+
+    { nxt_string("Array.of(1,2,3)"),
+      nxt_string("1,2,3") },
+
+    { nxt_string("Array.of(undefined,1)"),
+      nxt_string(",1") },
+
+    { nxt_string("Array.of(NaN,-1,{})"),
+      nxt_string("NaN,-1,[object Object]") },
+
     { nxt_string("var a = [1,2,3]; a.concat(4, [5, 6, 7], 8)"),
       nxt_string("1,2,3,4,5,6,7,8") },