]> git.kaiwu.me - njs.git/commitdiff
Array.join() optimization.
authorIgor Sysoev <igor@sysoev.ru>
Thu, 11 Feb 2016 08:36:14 +0000 (11:36 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Thu, 11 Feb 2016 08:36:14 +0000 (11:36 +0300)
njs/njs_array.c

index ef53cd5741b1e30ed1d6b40d593dd244baeaeec5..29434b1f8a14ee8e0779ca15cd88811e2a0bc93b 100644 (file)
@@ -601,33 +601,24 @@ njs_array_prototype_join_continuation(njs_vm_t *vm, njs_param_t *param)
     njs_array_join_t   *join;
     njs_string_prop_t  separator, string;
 
-    if (param->nargs != 0) {
-        value = &param->args[0];
-
-    } else {
-        value = (njs_value_t *) &njs_string_comma;
-    }
-
-    (void) njs_string_prop(&separator, value);
-
-    array = param->this->data.u.array;
-
-    size = separator.size * (array->length - 1);
-    length = separator.length * (array->length - 1);
-    n = 0;
-
-    max = 0;
-    values = NULL;
-
     join = (njs_array_join_t *) vm->frame->continuation;
 
     if (join != NULL) {
         values = join->values;
         max = join->max;
+
+    } else {
+        values = NULL;
+        max = 0;
     }
 
+    size = 0;
+    length = 0;
+    n = 0;
     mask = -1;
 
+    array = param->this->data.u.array;
+
     for (i = 0; i < array->length; i++) {
         value = &array->start[i];
 
@@ -654,6 +645,18 @@ njs_array_prototype_join_continuation(njs_vm_t *vm, njs_param_t *param)
         }
     }
 
+    if (param->nargs != 0) {
+        value = &param->args[0];
+
+    } else {
+        value = (njs_value_t *) &njs_string_comma;
+    }
+
+    (void) njs_string_prop(&separator, value);
+
+    size += separator.size * (array->length - 1);
+    length += separator.length * (array->length - 1);
+
     length &= mask;
 
     p = njs_string_alloc(vm, &vm->retval, size, length);