]> git.kaiwu.me - njs.git/commitdiff
Refactored functions inlining.
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 2 Jul 2019 18:37:10 +0000 (21:37 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Tue, 2 Jul 2019 18:37:10 +0000 (21:37 +0300)
Allowing compiler to decide whether inline a function or not by
removing most of nxt_noinline prefixes.

Inlining simple functions.

Splitting public function getters from njs internal value getters.

25 files changed:
njs/njs.c
njs/njs_array.c
njs/njs_builtin.c
njs/njs_crypto.c
njs/njs_date.c
njs/njs_error.c
njs/njs_error.h
njs/njs_event.c
njs/njs_extern.c
njs/njs_fs.c
njs/njs_function.c
njs/njs_generator.c
njs/njs_json.c
njs/njs_math.c
njs/njs_module.c
njs/njs_number.c
njs/njs_number.h
njs/njs_object.c
njs/njs_object_property.c
njs/njs_regexp.c
njs/njs_string.c
njs/njs_string.h
njs/njs_vm.c
njs/njs_vm.h
nxt/nxt_lvlhsh.c

index 950ee708b141d54a2a8e000090ba67c61d449e14..9ee745543119eb15a256984d33f10239956c91f4 100644 (file)
--- a/njs/njs.c
+++ b/njs/njs.c
@@ -663,20 +663,174 @@ njs_vm_add_path(njs_vm_t *vm, const nxt_str_t *path)
 }
 
 
-nxt_noinline njs_value_t *
+njs_value_t *
 njs_vm_retval(njs_vm_t *vm)
 {
     return &vm->retval;
 }
 
 
-nxt_noinline void
+void
 njs_vm_retval_set(njs_vm_t *vm, const njs_value_t *value)
 {
     vm->retval = *value;
 }
 
 
+void
+njs_value_undefined_set(njs_value_t *value)
+{
+    njs_set_undefined(value);
+}
+
+
+void
+njs_value_boolean_set(njs_value_t *value, int yn)
+{
+    njs_set_boolean(value, yn);
+}
+
+
+void
+njs_value_number_set(njs_value_t *value, double num)
+{
+    njs_set_number(value, num);
+}
+
+
+void
+njs_value_data_set(njs_value_t *value, void *data)
+{
+    njs_set_data(value, data);
+}
+
+
+njs_ret_t
+njs_vm_value_string_set(njs_vm_t *vm, njs_value_t *value, const u_char *start,
+    uint32_t size)
+{
+    return njs_string_set(vm, value, start, size);
+}
+
+
+u_char *
+njs_vm_value_string_alloc(njs_vm_t *vm, njs_value_t *value, uint32_t size)
+{
+    return njs_string_alloc(vm, value, size, 0);
+}
+
+
+nxt_noinline void
+njs_vm_value_error_set(njs_vm_t *vm, njs_value_t *value, const char *fmt, ...)
+{
+    va_list  args;
+    u_char   buf[NXT_MAX_ERROR_STR], *p;
+
+    p = buf;
+
+    if (fmt != NULL) {
+        va_start(args, fmt);
+        p = nxt_vsprintf(buf, buf + sizeof(buf), fmt, args);
+        va_end(args);
+    }
+
+    njs_error_new(vm, value, NJS_OBJECT_ERROR, buf, p - buf);
+}
+
+
+uint8_t
+njs_value_bool(const njs_value_t *value)
+{
+    return njs_bool(value);
+}
+
+
+double
+njs_value_number(const njs_value_t *value)
+{
+    return njs_number(value);
+}
+
+
+void *
+njs_value_data(const njs_value_t *value)
+{
+    return njs_data(value);
+}
+
+
+njs_function_t *
+njs_value_function(const njs_value_t *value)
+{
+    return njs_function(value);
+}
+
+
+nxt_int_t
+njs_value_is_null(const njs_value_t *value)
+{
+    return njs_is_null(value);
+}
+
+
+nxt_int_t
+njs_value_is_undefined(const njs_value_t *value)
+{
+    return njs_is_undefined(value);
+}
+
+
+nxt_int_t
+njs_value_is_null_or_undefined(const njs_value_t *value)
+{
+    return njs_is_null_or_undefined(value);
+}
+
+
+nxt_int_t
+njs_value_is_boolean(const njs_value_t *value)
+{
+    return njs_is_boolean(value);
+}
+
+
+nxt_int_t
+njs_value_is_number(const njs_value_t *value)
+{
+    return njs_is_number(value);
+}
+
+
+nxt_int_t
+njs_value_is_valid_number(const njs_value_t *value)
+{
+    return njs_is_number(value)
+           && !isnan(value->data.u.number)
+           && !isinf(value->data.u.number);
+}
+
+
+nxt_int_t
+njs_value_is_string(const njs_value_t *value)
+{
+    return njs_is_string(value);
+}
+
+
+nxt_int_t
+njs_value_is_object(const njs_value_t *value)
+{
+    return njs_is_object(value);
+}
+
+
+nxt_int_t
+njs_value_is_function(const njs_value_t *value)
+{
+    return njs_is_function(value);
+}
+
+
 nxt_noinline void
 njs_vm_memory_error(njs_vm_t *vm)
 {
@@ -770,9 +924,7 @@ njs_vm_object_alloc(njs_vm_t *vm, njs_value_t *retval, ...)
 
     rc = NJS_OK;
 
-    retval->data.u.object = object;
-    retval->type = NJS_OBJECT;
-    retval->data.truth = 1;
+    njs_set_object(retval, object);
 
 done:
 
@@ -797,7 +949,7 @@ njs_vm_object_prop(njs_vm_t *vm, const njs_value_t *value, const nxt_str_t *key)
     lhq.key_hash = nxt_djb_hash(lhq.key.start, lhq.key.length);
     lhq.proto = &njs_object_hash_proto;
 
-    ret = nxt_lvlhsh_find(&value->data.u.object->hash, &lhq);
+    ret = nxt_lvlhsh_find(njs_object_hash(value), &lhq);
     if (nxt_slow_path(ret != NXT_OK)) {
         return NULL;
     }
index c935647f2be2d30b924c9503624fa26caebb197e..b418b74f8e77030e563afadb34a0e70e34222f03 100644 (file)
@@ -118,15 +118,15 @@ static njs_ret_t njs_array_prototype_find_index_continuation(njs_vm_t *vm,
     njs_value_t *args, nxt_uint_t nargs, njs_index_t unused);
 static njs_ret_t njs_array_prototype_map_continuation(njs_vm_t *vm,
     njs_value_t *args, nxt_uint_t nargs, njs_index_t unused);
-static nxt_noinline uint32_t njs_array_prototype_map_index(njs_array_t *array,
+static uint32_t njs_array_prototype_map_index(njs_array_t *array,
     njs_array_map_t *map);
-static nxt_noinline njs_ret_t njs_array_iterator_args(njs_vm_t *vm,
+static njs_ret_t njs_array_iterator_args(njs_vm_t *vm,
     njs_value_t *args, nxt_uint_t nargs);
-static nxt_noinline uint32_t njs_array_iterator_index(njs_array_t *array,
+static uint32_t njs_array_iterator_index(njs_array_t *array,
     njs_array_iter_t *iter);
-static nxt_noinline njs_ret_t njs_array_iterator_apply(njs_vm_t *vm,
+static njs_ret_t njs_array_iterator_apply(njs_vm_t *vm,
     njs_array_iter_t *iter, njs_value_t *args, nxt_uint_t nargs);
-static nxt_noinline njs_ret_t njs_array_prototype_find_apply(njs_vm_t *vm,
+static njs_ret_t njs_array_prototype_find_apply(njs_vm_t *vm,
     njs_array_iter_t *iter, njs_value_t *args, nxt_uint_t nargs);
 static njs_ret_t njs_array_prototype_reduce_continuation(njs_vm_t *vm,
     njs_value_t *args, nxt_uint_t nargs, njs_index_t unused);
@@ -138,7 +138,7 @@ static njs_ret_t njs_array_prototype_sort_continuation(njs_vm_t *vm,
     njs_value_t *args, nxt_uint_t nargs, njs_index_t unused);
 
 
-nxt_noinline njs_array_t *
+njs_array_t *
 njs_array_alloc(njs_vm_t *vm, uint64_t length, uint32_t spare)
 {
     uint64_t     size;
@@ -308,7 +308,6 @@ njs_array_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
     if (nxt_fast_path(array != NULL)) {
 
-        vm->retval.data.u.array = array;
         value = array->start;
 
         if (args == NULL) {
@@ -326,8 +325,8 @@ njs_array_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             }
         }
 
-        vm->retval.type = NJS_ARRAY;
-        vm->retval.data.truth = 1;
+
+        njs_set_array(&vm->retval, array);
 
         return NXT_OK;
     }
@@ -369,9 +368,7 @@ njs_array_of(njs_vm_t *vm, njs_value_t *args,
             return NXT_ERROR;
         }
 
-        vm->retval.data.u.array = array;
-        vm->retval.type = NJS_ARRAY;
-        vm->retval.data.truth = 1;
+        njs_set_array(&vm->retval, array);
 
         for (i = 0; i < length; i++) {
             array->start[i] = args[i + 1];
@@ -464,7 +461,7 @@ njs_array_length(njs_vm_t *vm, njs_value_t *value, njs_value_t *setval,
 
         array = (njs_array_t *) proto;
 
-        njs_value_number_set(retval, array->length);
+        njs_set_number(retval, array->length);
         return NJS_OK;
     }
 
@@ -506,7 +503,7 @@ njs_array_length(njs_vm_t *vm, njs_value_t *value, njs_value_t *setval,
 
     array->length = length;
 
-    njs_value_number_set(retval, length);
+    njs_set_number(retval, length);
     return NJS_OK;
 }
 
@@ -619,15 +616,13 @@ njs_array_prototype_slice_copy(njs_vm_t *vm, njs_value_t *this,
         return NXT_ERROR;
     }
 
-    vm->retval.data.u.array = array;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, array);
 
     if (length != 0) {
         n = 0;
 
         if (nxt_fast_path(njs_is_array(this))) {
-            value = this->data.u.array->start;
+            value = njs_array_start(this);
 
             do {
                 /* GC: retain long string and object in values[start]. */
@@ -704,7 +699,7 @@ njs_array_prototype_push(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_array_t  *array;
 
     if (njs_is_array(&args[0])) {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
 
         if (nargs != 0) {
             ret = njs_array_expand(vm, array, 0, nargs);
@@ -718,7 +713,7 @@ njs_array_prototype_push(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             }
         }
 
-        njs_value_number_set(&vm->retval, array->length);
+        njs_set_number(&vm->retval, array->length);
     }
 
     return NXT_OK;
@@ -735,7 +730,7 @@ njs_array_prototype_pop(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     retval = &njs_value_undefined;
 
     if (njs_is_array(&args[0])) {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
 
         if (array->length != 0) {
             array->length--;
@@ -762,7 +757,7 @@ njs_array_prototype_unshift(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_array_t  *array;
 
     if (njs_is_array(&args[0])) {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
         n = nargs - 1;
 
         if (n != 0) {
@@ -782,7 +777,7 @@ njs_array_prototype_unshift(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             } while (n > 1);
         }
 
-        njs_value_number_set(&vm->retval, array->length);
+        njs_set_number(&vm->retval, array->length);
     }
 
     return NXT_OK;
@@ -799,7 +794,7 @@ njs_array_prototype_shift(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     retval = &njs_value_undefined;
 
     if (njs_is_array(&args[0])) {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
 
         if (array->length != 0) {
             array->length--;
@@ -833,7 +828,7 @@ njs_array_prototype_splice(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     delete = 0;
 
     if (njs_is_array(&args[0])) {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
         length = array->length;
 
         if (nargs > 1) {
@@ -913,9 +908,7 @@ njs_array_prototype_splice(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         }
     }
 
-    vm->retval.data.u.array = deleted;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, deleted);
 
     return NXT_OK;
 }
@@ -930,7 +923,7 @@ njs_array_prototype_reverse(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_array_t  *array;
 
     if (njs_is_array(&args[0])) {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
         length = array->length;
 
         if (length > 1) {
@@ -941,9 +934,7 @@ njs_array_prototype_reverse(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             }
         }
 
-        vm->retval.data.u.array = array;
-        vm->retval.type = NJS_ARRAY;
-        vm->retval.data.truth = 1;
+        njs_set_array(&vm->retval, array);
 
     } else {
         /* STUB */
@@ -991,7 +982,7 @@ njs_array_prototype_join(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         goto empty;
     }
 
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
 
     if (array->length == 0) {
         goto empty;
@@ -1076,7 +1067,7 @@ njs_array_prototype_join_continuation(njs_vm_t *vm, njs_value_t *args,
     n = 0;
     mask = -1;
 
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
 
     for (i = 0; i < array->length; i++) {
         value = &array->start[i];
@@ -1168,7 +1159,7 @@ njs_array_prototype_concat(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
     for (i = 0; i < nargs; i++) {
         if (njs_is_array(&args[i])) {
-            length += args[i].data.u.array->length;
+            length += njs_array_len(&args[i]);
 
         } else {
             length++;
@@ -1180,9 +1171,7 @@ njs_array_prototype_concat(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         return NXT_ERROR;
     }
 
-    vm->retval.data.u.array = array;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, array);
 
     value = array->start;
 
@@ -1202,8 +1191,8 @@ njs_array_copy(njs_value_t *dst, njs_value_t *src)
     n = 1;
 
     if (njs_is_array(src)) {
-        n = src->data.u.array->length;
-        src = src->data.u.array->start;
+        n = njs_array_len(src);
+        src = njs_array_start(src);
     }
 
     while (n != 0) {
@@ -1230,7 +1219,7 @@ njs_array_prototype_index_of(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         goto done;
     }
 
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
     length = array->length;
 
     if (length == 0) {
@@ -1270,7 +1259,7 @@ njs_array_prototype_index_of(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
 done:
 
-    njs_value_number_set(&vm->retval, index);
+    njs_set_number(&vm->retval, index);
 
     return NXT_OK;
 }
@@ -1290,7 +1279,7 @@ njs_array_prototype_last_index_of(njs_vm_t *vm, njs_value_t *args,
         goto done;
     }
 
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
     length = array->length;
 
     if (length == 0) {
@@ -1329,7 +1318,7 @@ njs_array_prototype_last_index_of(njs_vm_t *vm, njs_value_t *args,
 
 done:
 
-    njs_value_number_set(&vm->retval, index);
+    njs_set_number(&vm->retval, index);
 
     return NXT_OK;
 }
@@ -1350,7 +1339,7 @@ njs_array_prototype_includes(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         goto done;
     }
 
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
     length = array->length;
 
     if (length == 0) {
@@ -1480,7 +1469,7 @@ njs_array_prototype_fill_continuation(njs_vm_t *vm, njs_value_t *args,
     fill = njs_vm_continuation(vm);
 
     if (njs_is_array(this)) {
-        array = this->data.u.array;
+        array = njs_array(this);
         length = array->length;
 
     } else {
@@ -1584,7 +1573,7 @@ njs_array_prototype_for_each_continuation(njs_vm_t *vm, njs_value_t *args,
 
     iter = njs_vm_continuation(vm);
 
-    index = njs_array_iterator_index(args[0].data.u.array, iter);
+    index = njs_array_iterator_index(njs_array(&args[0]), iter);
 
     if (index == NJS_ARRAY_INVALID_INDEX) {
         vm->retval = njs_value_undefined;
@@ -1628,7 +1617,7 @@ njs_array_prototype_some_continuation(njs_vm_t *vm, njs_value_t *args,
         retval = &njs_value_true;
 
     } else {
-        index = njs_array_iterator_index(args[0].data.u.array, iter);
+        index = njs_array_iterator_index(njs_array(&args[0]), iter);
 
         if (index == NJS_ARRAY_INVALID_INDEX) {
             retval = &njs_value_false;
@@ -1678,7 +1667,7 @@ njs_array_prototype_every_continuation(njs_vm_t *vm, njs_value_t *args,
         retval = &njs_value_false;
 
     } else {
-        index = njs_array_iterator_index(args[0].data.u.array, iter);
+        index = njs_array_iterator_index(njs_array(&args[0]), iter);
 
         if (index == NJS_ARRAY_INVALID_INDEX) {
             retval = &njs_value_true;
@@ -1736,13 +1725,11 @@ njs_array_prototype_filter_continuation(njs_vm_t *vm, njs_value_t *args,
         }
     }
 
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
     index = njs_array_iterator_index(array, &filter->iter);
 
     if (index == NJS_ARRAY_INVALID_INDEX) {
-        vm->retval.data.u.array = filter->array;
-        vm->retval.type = NJS_ARRAY;
-        vm->retval.data.truth = 1;
+        njs_set_array(&vm->retval, filter->array);
 
         return NXT_OK;
     }
@@ -1788,7 +1775,7 @@ njs_array_prototype_find_continuation(njs_vm_t *vm, njs_value_t *args,
     iter = &find->iter;
 
     if (!njs_is_true(&iter->retval)) {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
         iter->index++;
 
         if (iter->index < iter->length && iter->index < array->length) {
@@ -1843,7 +1830,7 @@ njs_array_prototype_find_index_continuation(njs_vm_t *vm, njs_value_t *args,
         iter->index++;
 
         if (iter->index < iter->length
-            && iter->index < args[0].data.u.array->length)
+            && iter->index < njs_array_len(&args[0]))
         {
             return njs_array_prototype_find_apply(vm, iter, args, nargs);
         }
@@ -1851,13 +1838,13 @@ njs_array_prototype_find_index_continuation(njs_vm_t *vm, njs_value_t *args,
         index = -1;
     }
 
-    njs_value_number_set(&vm->retval, index);
+    njs_set_number(&vm->retval, index);
 
     return NXT_OK;
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_array_prototype_find_apply(njs_vm_t *vm, njs_array_iter_t *iter,
     njs_value_t *args, nxt_uint_t nargs)
 {
@@ -1871,7 +1858,7 @@ njs_array_prototype_find_apply(njs_vm_t *vm, njs_array_iter_t *iter,
     arguments[0] = *value;
 
     n = iter->index;
-    value = &args[0].data.u.array->start[n];
+    value = &njs_array_start(&args[0])[n];
 
     if (!njs_is_valid(value)) {
         value = &njs_value_undefined;
@@ -1879,7 +1866,7 @@ njs_array_prototype_find_apply(njs_vm_t *vm, njs_array_iter_t *iter,
 
     arguments[1] = *value;
 
-    njs_value_number_set(&arguments[2], n);
+    njs_set_number(&arguments[2], n);
 
     arguments[3] = args[0];
 
@@ -1904,7 +1891,7 @@ njs_array_prototype_map(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     map->iter.u.cont.function = njs_array_prototype_map_continuation;
     njs_set_invalid(&map->iter.retval);
 
-    map->array = njs_array_alloc(vm, args[0].data.u.array->length, 0);
+    map->array = njs_array_alloc(vm, njs_array_len(&args[0]), 0);
     if (nxt_slow_path(map->array == NULL)) {
         return NXT_ERROR;
     }
@@ -1913,7 +1900,7 @@ njs_array_prototype_map(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_array_prototype_map_continuation(njs_vm_t *vm, njs_value_t *args,
     nxt_uint_t nargs, njs_index_t unused)
 {
@@ -1926,12 +1913,10 @@ njs_array_prototype_map_continuation(njs_vm_t *vm, njs_value_t *args,
         map->array->start[map->iter.index] = map->iter.retval;
     }
 
-    index = njs_array_prototype_map_index(args[0].data.u.array, map);
+    index = njs_array_prototype_map_index(njs_array(&args[0]), map);
 
     if (index == NJS_ARRAY_INVALID_INDEX) {
-        vm->retval.data.u.array = map->array;
-        vm->retval.type = NJS_ARRAY;
-        vm->retval.data.truth = 1;
+        njs_set_array(&vm->retval, map->array);
 
         return NXT_OK;
     }
@@ -1987,7 +1972,7 @@ njs_array_prototype_reduce(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         iter->retval = args[2];
 
     } else {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
         n = njs_array_iterator_index(array, iter);
 
         if (n == NJS_ARRAY_INVALID_INDEX) {
@@ -2012,7 +1997,7 @@ njs_array_prototype_reduce_continuation(njs_vm_t *vm, njs_value_t *args,
     njs_array_iter_t  *iter;
 
     iter = njs_vm_continuation(vm);
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
 
     n = njs_array_iterator_index(array, iter);
 
@@ -2028,7 +2013,7 @@ njs_array_prototype_reduce_continuation(njs_vm_t *vm, njs_value_t *args,
 
     arguments[2] = array->start[n];
 
-    njs_value_number_set(&arguments[3], n);
+    njs_set_number(&arguments[3], n);
 
     arguments[4] = args[0];
 
@@ -2037,7 +2022,7 @@ njs_array_prototype_reduce_continuation(njs_vm_t *vm, njs_value_t *args,
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_array_iterator_args(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs)
 {
     njs_array_iter_t  *iter;
@@ -2045,7 +2030,7 @@ njs_array_iterator_args(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs)
     if (nargs > 1 && njs_is_array(&args[0]) && njs_is_function(&args[1])) {
 
         iter = njs_vm_continuation(vm);
-        iter->length = args[0].data.u.array->length;
+        iter->length = njs_array_len(&args[0]);
         iter->retval.data.truth = 0;
         iter->index = NJS_ARRAY_INVALID_INDEX;
 
@@ -2058,7 +2043,7 @@ njs_array_iterator_args(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs)
 }
 
 
-static nxt_noinline uint32_t
+static uint32_t
 njs_array_iterator_index(njs_array_t *array, njs_array_iter_t *iter)
 {
     uint32_t  i, length;
@@ -2076,7 +2061,7 @@ njs_array_iterator_index(njs_array_t *array, njs_array_iter_t *iter)
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_array_iterator_apply(njs_vm_t *vm, njs_array_iter_t *iter,
     njs_value_t *args, nxt_uint_t nargs)
 {
@@ -2090,9 +2075,9 @@ njs_array_iterator_apply(njs_vm_t *vm, njs_array_iter_t *iter,
     arguments[0] = *value;
 
     n = iter->index;
-    arguments[1] = args[0].data.u.array->start[n];
+    arguments[1] = njs_array_start(&args[0])[n];
 
-    njs_value_number_set(&arguments[2], n);
+    njs_set_number(&arguments[2], n);
 
     arguments[3] = args[0];
 
@@ -2122,7 +2107,7 @@ njs_array_prototype_reduce_right(njs_vm_t *vm, njs_value_t *args,
         iter->retval = args[2];
 
     } else {
-        array = args[0].data.u.array;
+        array = njs_array(&args[0]);
         n = njs_array_reduce_right_index(array, iter);
 
         if (n == NJS_ARRAY_INVALID_INDEX) {
@@ -2139,7 +2124,7 @@ njs_array_prototype_reduce_right(njs_vm_t *vm, njs_value_t *args,
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_array_prototype_reduce_right_continuation(njs_vm_t *vm, njs_value_t *args,
     nxt_uint_t nargs, njs_index_t unused)
 {
@@ -2149,7 +2134,7 @@ njs_array_prototype_reduce_right_continuation(njs_vm_t *vm, njs_value_t *args,
     njs_array_iter_t  *iter;
 
     iter = njs_vm_continuation(vm);
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
 
     n = njs_array_reduce_right_index(array, iter);
 
@@ -2165,7 +2150,7 @@ njs_array_prototype_reduce_right_continuation(njs_vm_t *vm, njs_value_t *args,
 
     arguments[2] = array->start[n];
 
-    njs_value_number_set(&arguments[3], n);
+    njs_set_number(&arguments[3], n);
 
     arguments[4] = args[0];
 
@@ -2174,7 +2159,7 @@ njs_array_prototype_reduce_right_continuation(njs_vm_t *vm, njs_value_t *args,
 }
 
 
-static nxt_noinline uint32_t
+static uint32_t
 njs_array_reduce_right_index(njs_array_t *array, njs_array_iter_t *iter)
 {
     uint32_t  n;
@@ -2212,7 +2197,7 @@ njs_array_string_sort(njs_vm_t *vm, njs_value_t *args,
 
     ret = njs_string_cmp(&args[1], &args[2]);
 
-    njs_value_number_set(&vm->retval, ret);
+    njs_set_number(&vm->retval, ret);
 
     return NXT_OK;
 }
@@ -2234,7 +2219,7 @@ njs_array_prototype_sort(njs_vm_t *vm, njs_value_t *args,
 {
     njs_array_sort_t  *sort;
 
-    if (njs_is_array(&args[0]) && args[0].data.u.array->length > 1) {
+    if (njs_is_array(&args[0]) && njs_array_len(&args[0]) > 1) {
 
         sort = njs_vm_continuation(vm);
         sort->u.cont.function = njs_array_prototype_sort_continuation;
@@ -2266,7 +2251,7 @@ njs_array_prototype_sort_continuation(njs_vm_t *vm, njs_value_t *args,
     njs_value_t       value, *start, arguments[3];
     njs_array_sort_t  *sort;
 
-    array = args[0].data.u.array;
+    array = njs_array(&args[0]);
     start = array->start;
 
     sort = njs_vm_continuation(vm);
index 012c0caf25136d275de89d97eef2b82a7a2a4758..b0ef7460bfd8bc8c6183886e2d5b7db4e7960300 100644 (file)
@@ -840,7 +840,7 @@ njs_vm_expression_completions(njs_vm_t *vm, nxt_str_t *expression)
         lhq.key.length = p - lhq.key.start;
         lhq.key_hash = nxt_djb_hash(lhq.key.start, lhq.key.length);
 
-        ret = nxt_lvlhsh_find(&value->data.u.object->hash, &lhq);
+        ret = nxt_lvlhsh_find(njs_object_hash(value), &lhq);
         if (nxt_slow_path(ret != NXT_OK)) {
             return NULL;
         }
@@ -1178,9 +1178,7 @@ njs_process_object_argv(njs_vm_t *vm, njs_value_t *process,
         return NJS_ERROR;
     }
 
-    prop->value.data.u.array = argv;
-    prop->value.type = NJS_ARRAY;
-    prop->value.data.truth = 1;
+    njs_set_array(&prop->value, argv);
 
     lhq.value = prop;
     lhq.key_hash = NJS_ARGV_HASH;
@@ -1189,7 +1187,7 @@ njs_process_object_argv(njs_vm_t *vm, njs_value_t *process,
     lhq.pool = vm->mem_pool;
     lhq.proto = &njs_object_hash_proto;
 
-    ret = nxt_lvlhsh_insert(&process->data.u.object->hash, &lhq);
+    ret = nxt_lvlhsh_insert(njs_object_hash(process), &lhq);
 
     if (nxt_fast_path(ret == NXT_OK)) {
         *retval = prop->value;
@@ -1281,9 +1279,7 @@ njs_process_object_env(njs_vm_t *vm, njs_value_t *process,
         return NXT_ERROR;
     }
 
-    prop->value.data.u.object = env;
-    prop->value.type = NJS_OBJECT;
-    prop->value.data.truth = 1;
+    njs_set_object(&prop->value, env);
 
     lhq.replace = 0;
     lhq.pool = vm->mem_pool;
@@ -1292,7 +1288,7 @@ njs_process_object_env(njs_vm_t *vm, njs_value_t *process,
     lhq.key = nxt_string_value("env");
     lhq.key_hash = NJS_ENV_HASH;
 
-    ret = nxt_lvlhsh_insert(&process->data.u.object->hash, &lhq);
+    ret = nxt_lvlhsh_insert(njs_object_hash(process), &lhq);
 
     if (nxt_fast_path(ret == NXT_OK)) {
         *retval = prop->value;
index 99737105e58350b22d8bc317d5f933710dd945d9..92825df17b188b8392db271bf4dec011659ddd15 100644 (file)
@@ -186,7 +186,7 @@ njs_crypto_create_hash(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
     alg->init(&dgst->u);
 
-    njs_value_data_set(&hash->value, dgst);
+    njs_set_data(&hash->value, dgst);
 
     vm->retval.data.u.object_value = hash;
     vm->retval.type = NJS_OBJECT_VALUE;
@@ -452,7 +452,7 @@ njs_crypto_create_hmac(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         return NJS_ERROR;
     }
 
-    njs_value_data_set(&hmac->value, ctx);
+    njs_set_data(&hmac->value, ctx);
 
     vm->retval.data.u.object_value = hmac;
     vm->retval.type = NJS_OBJECT_VALUE;
index 08bb30b4d6f0bcc5b68d1a00455c228edb41d270..d4f5070181933acc0fc43681faa5d9ccad939c72 100644 (file)
     sizeof("Mon Sep 28 1970 12:00:00 GMT+0600 (XXXXX)")
 
 
-static nxt_noinline double njs_date_string_parse(njs_value_t *date);
+static double njs_date_string_parse(njs_value_t *date);
 static double njs_date_rfc2822_string_parse(struct tm *tm, const u_char *p,
     const u_char *end);
 static double njs_date_js_string_parse(struct tm *tm, const u_char *p,
     const u_char *end);
 static const u_char *njs_date_skip_week_day(const u_char *p, const u_char *end);
 static const u_char *njs_date_skip_spaces(const u_char *p, const u_char *end);
-static nxt_noinline nxt_int_t njs_date_month_parse(const u_char *p,
+static nxt_int_t njs_date_month_parse(const u_char *p, const u_char *end);
+static const u_char *njs_date_time_parse(struct tm *tm, const u_char *p,
     const u_char *end);
-static nxt_noinline const u_char *njs_date_time_parse(struct tm *tm,
-    const u_char *p, const u_char *end);
-static nxt_noinline nxt_int_t njs_date_gmtoff_parse(const u_char *start,
-    const u_char *end);
-static nxt_noinline const u_char *njs_date_number_parse(int *value,
-    const u_char *p, const u_char *end, size_t size);
+static nxt_int_t njs_date_gmtoff_parse(const u_char *start, const u_char *end);
+static const u_char *njs_date_number_parse(int *value, const u_char *p,
+    const u_char *end, size_t size);
 static int64_t njs_timegm(struct tm *tm);
-static nxt_noinline njs_ret_t njs_date_string(njs_vm_t *vm, const char *fmt,
-    double time);
-static nxt_noinline double njs_date_time(struct tm *tm, int64_t ms);
+static njs_ret_t njs_date_string(njs_vm_t *vm, const char *fmt, double time);
+static double njs_date_time(struct tm *tm, int64_t ms);
 static double njs_date_utc_time(struct tm *tm, double time);
 
 
 static const njs_value_t  njs_string_invalid_date = njs_string("Invalid Date");
 
 
-static nxt_noinline uint64_t
+static uint64_t
 njs_gettime(void)
 {
     struct timeval  tv;
@@ -59,7 +56,7 @@ njs_gettime(void)
 }
 
 
-static nxt_noinline double
+static double
 njs_timeclip(double time)
 {
     if (isinf(time) || isnan(time) || fabs(time) > 8.64e15) {
@@ -219,7 +216,7 @@ njs_date_utc(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
 done:
 
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -278,7 +275,7 @@ static njs_ret_t
 njs_date_now(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_index_t unused)
 {
-    njs_value_number_set(&vm->retval, njs_gettime());
+    njs_set_number(&vm->retval, njs_gettime());
 
     return NXT_OK;
 }
@@ -297,13 +294,13 @@ njs_date_parse(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         time = NAN;
     }
 
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
 
 
-static nxt_noinline double
+static double
 njs_date_string_parse(njs_value_t *date)
 {
     int                ext, ms, ms_length, skipped;
@@ -704,7 +701,7 @@ njs_date_skip_spaces(const u_char *p, const u_char *end)
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_date_month_parse(const u_char *p, const u_char *end)
 {
     if (p + 2 < end) {
@@ -792,7 +789,7 @@ njs_date_month_parse(const u_char *p, const u_char *end)
 }
 
 
-static nxt_noinline const u_char *
+static const u_char *
 njs_date_time_parse(struct tm *tm, const u_char *p, const u_char *end)
 {
     p = njs_date_number_parse(&tm->tm_hour, p, end, 2);
@@ -821,7 +818,7 @@ njs_date_time_parse(struct tm *tm, const u_char *p, const u_char *end)
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_date_gmtoff_parse(const u_char *start, const u_char *end)
 {
     int           gmtoff, hour, min;
@@ -852,7 +849,7 @@ njs_date_gmtoff_parse(const u_char *start, const u_char *end)
 }
 
 
-static nxt_noinline const u_char *
+static const u_char *
 njs_date_number_parse(int *value, const u_char *p, const u_char *end,
     size_t size)
 {
@@ -950,7 +947,7 @@ static njs_ret_t
 njs_date_prototype_value_of(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_index_t unused)
 {
-    njs_value_number_set(&vm->retval, args[0].data.u.date->time);
+    njs_set_number(&vm->retval, args[0].data.u.date->time);
 
     return NXT_OK;
 }
@@ -981,7 +978,7 @@ njs_date_prototype_to_time_string(njs_vm_t *vm, njs_value_t *args,
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_date_string(njs_vm_t *vm, const char *fmt, double time)
 {
     size_t     size;
@@ -1097,7 +1094,7 @@ njs_date_prototype_get_full_year(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_year + 1900;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1120,7 +1117,7 @@ njs_date_prototype_get_utc_full_year(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_year + 1900;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1143,7 +1140,7 @@ njs_date_prototype_get_month(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         value = tm.tm_mon;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1167,7 +1164,7 @@ njs_date_prototype_get_utc_month(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_mon;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1190,7 +1187,7 @@ njs_date_prototype_get_date(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         value = tm.tm_mday;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1213,7 +1210,7 @@ njs_date_prototype_get_utc_date(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_mday;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1236,7 +1233,7 @@ njs_date_prototype_get_day(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         value = tm.tm_wday;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1259,7 +1256,7 @@ njs_date_prototype_get_utc_day(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_wday;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1283,7 +1280,7 @@ njs_date_prototype_get_hours(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         value = tm.tm_hour;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1306,7 +1303,7 @@ njs_date_prototype_get_utc_hours(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_hour;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1330,7 +1327,7 @@ njs_date_prototype_get_minutes(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_min;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1353,7 +1350,7 @@ njs_date_prototype_get_utc_minutes(njs_vm_t *vm, njs_value_t *args,
         value = tm.tm_min;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1371,7 +1368,7 @@ njs_date_prototype_get_seconds(njs_vm_t *vm, njs_value_t *args,
         value = (int64_t) (value / 1000) % 60;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1389,7 +1386,7 @@ njs_date_prototype_get_milliseconds(njs_vm_t *vm, njs_value_t *args,
         value = (int64_t) value % 1000;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1412,7 +1409,7 @@ njs_date_prototype_get_timezone_offset(njs_vm_t *vm, njs_value_t *args,
         value = - nxt_timezone(&tm) / 60;
     }
 
-    njs_value_number_set(&vm->retval, value);
+    njs_set_number(&vm->retval, value);
 
     return NXT_OK;
 }
@@ -1437,7 +1434,7 @@ njs_date_prototype_set_time(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1462,7 +1459,7 @@ njs_date_prototype_set_milliseconds(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1491,7 +1488,7 @@ njs_date_prototype_set_seconds(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1530,7 +1527,7 @@ njs_date_prototype_set_minutes(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1565,7 +1562,7 @@ njs_date_prototype_set_utc_minutes(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1608,7 +1605,7 @@ njs_date_prototype_set_hours(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1644,7 +1641,7 @@ njs_date_prototype_set_utc_hours(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1676,7 +1673,7 @@ njs_date_prototype_set_date(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1708,7 +1705,7 @@ njs_date_prototype_set_utc_date(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1744,7 +1741,7 @@ njs_date_prototype_set_month(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1780,7 +1777,7 @@ njs_date_prototype_set_utc_month(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1820,7 +1817,7 @@ njs_date_prototype_set_full_year(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
@@ -1860,13 +1857,13 @@ njs_date_prototype_set_utc_full_year(njs_vm_t *vm, njs_value_t *args,
     }
 
     args[0].data.u.date->time = time;
-    njs_value_number_set(&vm->retval, time);
+    njs_set_number(&vm->retval, time);
 
     return NXT_OK;
 }
 
 
-static nxt_noinline double
+static double
 njs_date_time(struct tm *tm, int64_t ms)
 {
     double  time;
index 82967adb74843581b14b9ebf6d8b405f100d958a..22e228f8bcb38e38d44baa8ac70093e56d26400c 100644 (file)
@@ -55,7 +55,7 @@ njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
 }
 
 
-nxt_noinline njs_object_t *
+njs_object_t *
 njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name,
     const njs_value_t *message)
 {
index 6e7bf12aa78f575d49b53e202cdfdc930ee42efb..05a8ad671dc8f19a4b626ecbfdd8f7ab53285914 100644 (file)
@@ -34,8 +34,8 @@
 
 void njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
     u_char *start, size_t size);
-void njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
-    const char *fmt, ...);
+void nxt_noinline njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst,
+    njs_value_type_t type, const char *fmt, ...);
 
 void njs_memory_error(njs_vm_t *vm);
 void njs_memory_error_set(njs_vm_t *vm, njs_value_t *value);
index fc4c00a2138276b6f13139b981550e5e7e2ef9a0..90f71ed9a3e2dfeb1adf88a447eb2e4b744d668c 100644 (file)
@@ -62,7 +62,7 @@ njs_add_event(njs_vm_t *vm, njs_event_t *event)
         return NJS_ERROR;
     }
 
-    njs_value_number_set(&vm->retval, vm->event_id - 1);
+    njs_set_number(&vm->retval, vm->event_id - 1);
 
     return NJS_OK;
 }
index f0743b7eee132dc9beae418a78477b32bf805e66..6f33fddbc3461725ec6df5615fe6d1de28dfde62 100644 (file)
@@ -234,7 +234,7 @@ njs_vm_external_bind(njs_vm_t *vm, const nxt_str_t *var_name,
 }
 
 
-nxt_noinline njs_external_ptr_t
+njs_external_ptr_t
 njs_vm_external(njs_vm_t *vm, const njs_value_t *value)
 {
     if (nxt_fast_path(njs_is_external(value))) {
index 3f897e2d528008ab7125ef6353fc76aac9db4fec..b1f8008e53b9e693d9aac37cea4b8c18012a1a4f 100644 (file)
@@ -120,7 +120,7 @@ njs_fs_read_file(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             lhq.key = nxt_string_value("flag");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[2].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[2]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &flag);
@@ -130,7 +130,7 @@ njs_fs_read_file(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             lhq.key = nxt_string_value("encoding");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[2].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[2]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &encoding);
@@ -339,7 +339,7 @@ njs_fs_read_file_sync(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             lhq.key = nxt_string_value("flag");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[2].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[2]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &flag);
@@ -349,7 +349,7 @@ njs_fs_read_file_sync(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             lhq.key = nxt_string_value("encoding");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[2].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[2]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &encoding);
@@ -573,7 +573,7 @@ static njs_ret_t njs_fs_write_file_internal(njs_vm_t *vm, njs_value_t *args,
             lhq.key = nxt_string_value("flag");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[3].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[3]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &flag);
@@ -583,7 +583,7 @@ static njs_ret_t njs_fs_write_file_internal(njs_vm_t *vm, njs_value_t *args,
             lhq.key = nxt_string_value("encoding");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[3].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[3]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &encoding);
@@ -593,7 +593,7 @@ static njs_ret_t njs_fs_write_file_internal(njs_vm_t *vm, njs_value_t *args,
             lhq.key = nxt_string_value("mode");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[3].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[3]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 mode = &prop->value;
@@ -760,7 +760,7 @@ njs_fs_write_file_sync_internal(njs_vm_t *vm, njs_value_t *args,
             lhq.key = nxt_string_value("flag");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[3].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[3]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &flag);
@@ -770,7 +770,7 @@ njs_fs_write_file_sync_internal(njs_vm_t *vm, njs_value_t *args,
             lhq.key = nxt_string_value("encoding");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[3].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[3]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 njs_string_get(&prop->value, &encoding);
@@ -780,7 +780,7 @@ njs_fs_write_file_sync_internal(njs_vm_t *vm, njs_value_t *args,
             lhq.key = nxt_string_value("mode");
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&args[3].data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&args[3]), &lhq);
             if (ret == NXT_OK) {
                 prop = lhq.value;
                 mode = &prop->value;
index 2c58a5199710c39f7d86bf5044140a73ef247123..5568517724be92f17a1345f8ad1468363c223b33 100644 (file)
@@ -171,7 +171,7 @@ njs_function_arguments_object_init(njs_vm_t *vm, njs_native_frame_t *frame)
 
     nargs = frame->nargs;
 
-    njs_value_number_set(&value, nargs);
+    njs_set_number(&value, nargs);
 
     prop = njs_object_prop_alloc(vm, &njs_string_length, &value, 1);
     if (nxt_slow_path(prop == NULL)) {
@@ -247,9 +247,7 @@ njs_function_rest_parameters_init(njs_vm_t *vm, njs_native_frame_t *frame)
     rest_arguments = &frame->arguments[frame->function->u.lambda->nargs];
 
     /* GC: retain. */
-    rest_arguments->type = NJS_ARRAY;
-    rest_arguments->data.u.array = array;
-    rest_arguments->data.truth = 1;
+    njs_set_array(rest_arguments, array);
 
     return NXT_OK;
 }
@@ -347,7 +345,7 @@ njs_function_native_frame(njs_vm_t *vm, njs_function_t *function,
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_function_lambda_frame(njs_vm_t *vm, njs_function_t *function,
     const njs_value_t *this, const njs_value_t *args, nxt_uint_t nargs,
     nxt_bool_t ctor)
@@ -422,7 +420,7 @@ njs_function_lambda_frame(njs_vm_t *vm, njs_function_t *function,
 }
 
 
-nxt_noinline njs_native_frame_t *
+njs_native_frame_t *
 njs_function_frame_alloc(njs_vm_t *vm, size_t size)
 {
     size_t              spare_size, chunk_size;
@@ -474,7 +472,7 @@ njs_function_frame_alloc(njs_vm_t *vm, size_t size)
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_function_lambda_call(njs_vm_t *vm, njs_index_t retval,
     u_char *return_address)
 {
@@ -948,7 +946,7 @@ njs_function_instance_length(njs_vm_t *vm, njs_value_t *value,
         n = 0;
     }
 
-    njs_value_number_set(retval, n);
+    njs_set_number(retval, n);
 
     return NXT_OK;
 }
index c1ea3e4949a7a1f32ff06781e2b7d7ad92e6d1d6..be60bbf62a28f1e8d800f78c5b46a141739309a1 100644 (file)
@@ -79,20 +79,20 @@ static nxt_int_t njs_generate_for_statement(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
 static nxt_int_t njs_generate_for_in_statement(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline nxt_int_t njs_generate_start_block(njs_vm_t *vm,
+static nxt_int_t njs_generate_start_block(njs_vm_t *vm,
     njs_generator_t *generator, njs_generator_block_type_t type,
     const nxt_str_t *label);
 static njs_generator_block_t *njs_generate_lookup_block(
     njs_generator_block_t *block, uint32_t mask, const nxt_str_t *label);
 static njs_generator_block_t *njs_generate_find_block(
     njs_generator_block_t *block, uint32_t mask, const nxt_str_t *label);
-static nxt_noinline void njs_generate_patch_block(njs_vm_t *vm,
-    njs_generator_t *generator, njs_generator_patch_t *list);
+static void njs_generate_patch_block(njs_vm_t *vm, njs_generator_t *generator,
+    njs_generator_patch_t *list);
 static njs_generator_patch_t *njs_generate_make_continuation_patch(njs_vm_t *vm,
     njs_generator_block_t *block, const nxt_str_t *label, njs_ret_t offset);
 static njs_generator_patch_t *njs_generate_make_exit_patch(njs_vm_t *vm,
     njs_generator_block_t *block, const nxt_str_t *label, njs_ret_t offset);
-static nxt_noinline void njs_generate_patch_block_exit(njs_vm_t *vm,
+static void njs_generate_patch_block_exit(njs_vm_t *vm,
     njs_generator_t *generator);
 static const nxt_str_t *njs_generate_jump_destination(njs_vm_t *vm,
     njs_generator_block_t *block, const char *inst_type, uint32_t mask,
@@ -148,8 +148,8 @@ static nxt_int_t njs_generate_function_call(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
 static nxt_int_t njs_generate_method_call(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline nxt_int_t njs_generate_call(njs_vm_t *vm,
-    njs_generator_t *generator, njs_parser_node_t *node);
+static nxt_int_t njs_generate_call(njs_vm_t *vm, njs_generator_t *generator,
+    njs_parser_node_t *node);
 static nxt_int_t njs_generate_try_statement(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
 static nxt_int_t njs_generate_throw_statement(njs_vm_t *vm,
@@ -158,21 +158,19 @@ static nxt_int_t njs_generate_import_statement(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
 static nxt_int_t njs_generate_export_statement(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline njs_index_t njs_generate_dest_index(njs_vm_t *vm,
+static njs_index_t njs_generate_dest_index(njs_vm_t *vm,
+    njs_generator_t *generator, njs_parser_node_t *node);
+static njs_index_t njs_generate_object_dest_index(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline njs_index_t
-    njs_generate_object_dest_index(njs_vm_t *vm, njs_generator_t *generator,
-    njs_parser_node_t *node);
 static njs_index_t njs_generate_node_temp_index_get(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline njs_index_t njs_generate_temp_index_get(njs_vm_t *vm,
+static njs_index_t njs_generate_temp_index_get(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline nxt_int_t
-    njs_generate_children_indexes_release(njs_vm_t *vm,
+static nxt_int_t njs_generate_children_indexes_release(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline nxt_int_t njs_generate_node_index_release(njs_vm_t *vm,
+static nxt_int_t njs_generate_node_index_release(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
-static nxt_noinline nxt_int_t njs_generate_index_release(njs_vm_t *vm,
+static nxt_int_t njs_generate_index_release(njs_vm_t *vm,
     njs_generator_t *generator, njs_index_t index);
 static nxt_int_t njs_generate_reference_error(njs_vm_t *vm,
     njs_generator_t *generator, njs_parser_node_t *node);
@@ -1239,7 +1237,7 @@ njs_generate_for_in_statement(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_generate_start_block(njs_vm_t *vm, njs_generator_t *generator,
     njs_generator_block_type_t type, const nxt_str_t *label)
 {
@@ -1354,7 +1352,7 @@ njs_generate_make_continuation_patch(njs_vm_t *vm, njs_generator_block_t *block,
 }
 
 
-static nxt_noinline void
+static void
 njs_generate_patch_block(njs_vm_t *vm, njs_generator_t *generator,
     njs_generator_patch_t *list)
 {
@@ -1392,7 +1390,7 @@ njs_generate_make_exit_patch(njs_vm_t *vm, njs_generator_block_t *block,
 }
 
 
-static nxt_noinline void
+static void
 njs_generate_patch_block_exit(njs_vm_t *vm, njs_generator_t *generator)
 {
     njs_generator_block_t  *block;
@@ -2673,7 +2671,7 @@ njs_generate_method_call(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_generate_call(njs_vm_t *vm, njs_generator_t *generator,
     njs_parser_node_t *node)
 {
@@ -3136,7 +3134,7 @@ njs_generate_export_statement(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline njs_index_t
+static njs_index_t
 njs_generate_dest_index(njs_vm_t *vm, njs_generator_t *generator,
     njs_parser_node_t *node)
 {
@@ -3158,7 +3156,7 @@ njs_generate_dest_index(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline njs_index_t
+static njs_index_t
 njs_generate_object_dest_index(njs_vm_t *vm, njs_generator_t *generator,
     njs_parser_node_t *node)
 {
@@ -3197,7 +3195,7 @@ njs_generate_node_temp_index_get(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline njs_index_t
+static njs_index_t
 njs_generate_temp_index_get(njs_vm_t *vm, njs_generator_t *generator,
     njs_parser_node_t *node)
 {
@@ -3226,7 +3224,7 @@ njs_generate_temp_index_get(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_generate_children_indexes_release(njs_vm_t *vm, njs_generator_t *generator,
     njs_parser_node_t *node)
 {
@@ -3242,7 +3240,7 @@ njs_generate_children_indexes_release(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_generate_node_index_release(njs_vm_t *vm, njs_generator_t *generator,
     njs_parser_node_t *node)
 {
@@ -3254,7 +3252,7 @@ njs_generate_node_index_release(njs_vm_t *vm, njs_generator_t *generator,
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_generate_index_release(njs_vm_t *vm, njs_generator_t *generator,
     njs_index_t index)
 {
index 5358fd22219ee3c69d1be6817c7342ec45f48389..89b0a9c929774e857e0a3354c9d6ff676224dfd7 100644 (file)
@@ -519,9 +519,7 @@ njs_json_parse_object(njs_json_parse_ctx_t *ctx, njs_value_t *value,
         }
     }
 
-    value->data.u.object = object;
-    value->type = NJS_OBJECT;
-    value->data.truth = 1;
+    njs_set_object(value, object);
 
     ctx->depth++;
 
@@ -612,9 +610,7 @@ njs_json_parse_array(njs_json_parse_ctx_t *ctx, njs_value_t *value,
         }
     }
 
-    value->data.u.array = array;
-    value->type = NJS_ARRAY;
-    value->data.truth = 1;
+    njs_set_array(value, array);
 
     ctx->depth++;
 
@@ -939,8 +935,8 @@ njs_json_skip_space(const u_char *start, const u_char *end)
 
 #define njs_json_is_non_empty(_value)                                         \
     (((_value)->type == NJS_OBJECT)                                           \
-      && !nxt_lvlhsh_is_empty(&(_value)->data.u.object->hash))                \
-     || (((_value)->type == NJS_ARRAY) && (_value)->data.u.array->length != 0)
+      && !nxt_lvlhsh_is_empty(njs_object_hash(_value)))                              \
+     || (((_value)->type == NJS_ARRAY) && njs_array_len(_value) != 0)
 
 
 static njs_ret_t
@@ -966,7 +962,7 @@ njs_json_parse_continuation(njs_vm_t *vm, njs_value_t *args, nxt_uint_t unused,
                 lhq.key_hash = nxt_djb_hash(lhq.key.start, lhq.key.length);
                 lhq.proto = &njs_object_hash_proto;
 
-                ret = nxt_lvlhsh_find(&state->value.data.u.object->hash, &lhq);
+                ret = nxt_lvlhsh_find(njs_object_hash(&state->value), &lhq);
                 if (nxt_slow_path(ret == NXT_DECLINED)) {
                     state->index++;
                     break;
@@ -1010,8 +1006,7 @@ njs_json_parse_continuation(njs_vm_t *vm, njs_value_t *args, nxt_uint_t unused,
             lhq.pool = vm->mem_pool;
 
             if (njs_is_undefined(&parse->retval)) {
-                ret = nxt_lvlhsh_delete(&state->value.data.u.object->hash,
-                                        &lhq);
+                ret = nxt_lvlhsh_delete(njs_object_hash(&state->value), &lhq);
 
             } else {
                 prop = njs_object_prop_alloc(vm, key, &parse->retval, 1);
@@ -1020,8 +1015,7 @@ njs_json_parse_continuation(njs_vm_t *vm, njs_value_t *args, nxt_uint_t unused,
                 }
 
                 lhq.value = prop;
-                ret = nxt_lvlhsh_insert(&state->value.data.u.object->hash,
-                                        &lhq);
+                ret = nxt_lvlhsh_insert(njs_object_hash(&state->value), &lhq);
             }
 
             if (nxt_slow_path(ret != NXT_OK)) {
@@ -1035,8 +1029,8 @@ njs_json_parse_continuation(njs_vm_t *vm, njs_value_t *args, nxt_uint_t unused,
             break;
 
         case NJS_JSON_ARRAY_START:
-            if (state->index < state->value.data.u.array->length) {
-                value = &state->value.data.u.array->start[state->index];
+            if (state->index < njs_array_len(&state->value)) {
+                value = &njs_array_start(&state->value)[state->index];
 
                 if (njs_json_is_non_empty(value)) {
                     state = njs_json_push_parse_state(vm, parse, value);
@@ -1054,7 +1048,7 @@ njs_json_parse_continuation(njs_vm_t *vm, njs_value_t *args, nxt_uint_t unused,
             return njs_json_parse_continuation_apply(vm, parse);
 
         case NJS_JSON_ARRAY_REPLACED:
-            value = &state->value.data.u.array->start[state->index];
+            value = &njs_array_start(&state->value)[state->index];
             *value = parse->retval;
 
             state->index++;
@@ -1097,7 +1091,7 @@ njs_json_parse_continuation_apply(njs_vm_t *vm, njs_json_parse_t *parse)
 
     case NJS_JSON_ARRAY_START:
         njs_uint32_to_string(&arguments[1], state->index);
-        arguments[2] = state->value.data.u.array->start[state->index];
+        arguments[2] = njs_array_start(&state->value)[state->index];
 
         state->type = NJS_JSON_ARRAY_REPLACED;
         break;
@@ -1270,7 +1264,7 @@ njs_json_stringify_continuation(njs_vm_t *vm, njs_value_t *args,
             lhq.key_hash = nxt_djb_hash(lhq.key.start, lhq.key.length);
             lhq.proto = &njs_object_hash_proto;
 
-            ret = nxt_lvlhsh_find(&state->value.data.u.object->hash, &lhq);
+            ret = nxt_lvlhsh_find(njs_object_hash(&state->value), &lhq);
             if (nxt_slow_path(ret == NXT_DECLINED)) {
                 break;
             }
@@ -1360,7 +1354,7 @@ njs_json_stringify_continuation(njs_vm_t *vm, njs_value_t *args,
             /* Fall through. */
 
         case NJS_JSON_ARRAY_CONTINUE:
-            if (state->index >= state->value.data.u.array->length) {
+            if (state->index >= njs_array_len(&state->value)) {
                 njs_json_stringify_indent(stringify->stack.items - 1);
                 njs_json_stringify_append("]", 1);
 
@@ -1377,7 +1371,7 @@ njs_json_stringify_continuation(njs_vm_t *vm, njs_value_t *args,
                 njs_json_stringify_indent(stringify->stack.items);
             }
 
-            value = &state->value.data.u.array->start[state->index++];
+            value = &njs_array_start(&state->value)[state->index++];
 
             if (njs_is_object(value)) {
                 to_json = njs_object_to_json_function(vm, value);
@@ -1605,7 +1599,7 @@ njs_json_stringify_array(njs_vm_t *vm, njs_json_stringify_t  *stringify)
     njs_array_t  *properties, *array;
 
     properties_length = 1;
-    array = stringify->replacer.data.u.array;
+    array = njs_array(&stringify->replacer);
     array_length = array->length;
 
     for (i = 0; i < array_length; i++) {
@@ -1704,7 +1698,7 @@ njs_json_push_stringify_state(njs_vm_t *vm, njs_json_stringify_t *stringify,
         state->prop_value = NULL;
 
         if (njs_is_array(&stringify->replacer)) {
-            state->keys = stringify->replacer.data.u.array;
+            state->keys = njs_array(&stringify->replacer);
 
         } else {
             if (njs_is_external(value)) {
@@ -1953,7 +1947,7 @@ njs_json_wrap_value(njs_vm_t *vm, const njs_value_t *value)
 
     lhq.value = prop;
 
-    ret = nxt_lvlhsh_insert(&wrapper->data.u.object->hash, &lhq);
+    ret = nxt_lvlhsh_insert(njs_object_hash(wrapper), &lhq);
     if (nxt_slow_path(ret != NXT_OK)) {
         return NULL;
     }
@@ -2518,7 +2512,7 @@ njs_vm_value_dump(njs_vm_t *vm, nxt_str_t *retval, const njs_value_t *value,
             /* Fall through. */
 
         case NJS_JSON_ARRAY_CONTINUE:
-            if (state->index >= state->value.data.u.array->length) {
+            if (state->index >= njs_array_len(&state->value)) {
                 njs_json_stringify_indent(stringify->stack.items);
                 njs_json_stringify_append("]", 1);
 
@@ -2535,7 +2529,7 @@ njs_vm_value_dump(njs_vm_t *vm, nxt_str_t *retval, const njs_value_t *value,
                 njs_json_stringify_indent(stringify->stack.items + 1);
             }
 
-            val = &state->value.data.u.array->start[state->index++];
+            val = &njs_array_start(&state->value)[state->index++];
 
             if (njs_dump_is_object(val)) {
                 state = njs_json_push_stringify_state(vm, stringify, val);
index 9b4ef2e56624d013c4b11dc59741578801068df6..6ef257bdc01deb4bad0a9fd8faf6b0d7b1fc8125 100644 (file)
@@ -21,7 +21,7 @@ njs_object_math_abs(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -49,7 +49,7 @@ njs_object_math_acos(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -68,7 +68,7 @@ njs_object_math_acosh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -96,7 +96,7 @@ njs_object_math_asin(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -115,7 +115,7 @@ njs_object_math_asinh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -134,7 +134,7 @@ njs_object_math_atan(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -156,7 +156,7 @@ njs_object_math_atan2(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -175,7 +175,7 @@ njs_object_math_atanh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -194,7 +194,7 @@ njs_object_math_cbrt(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -213,7 +213,7 @@ njs_object_math_ceil(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -234,7 +234,7 @@ njs_object_math_clz32(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = 32;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -253,7 +253,7 @@ njs_object_math_cos(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -272,7 +272,7 @@ njs_object_math_cosh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -291,7 +291,7 @@ njs_object_math_exp(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -310,7 +310,7 @@ njs_object_math_expm1(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -329,7 +329,7 @@ njs_object_math_floor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -348,7 +348,7 @@ njs_object_math_fround(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -379,7 +379,7 @@ njs_object_math_hypot(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         }
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -402,7 +402,7 @@ njs_object_math_imul(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = 0;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -421,7 +421,7 @@ njs_object_math_log(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -440,7 +440,7 @@ njs_object_math_log10(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -459,7 +459,7 @@ njs_object_math_log1p(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -487,7 +487,7 @@ njs_object_math_log2(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -525,7 +525,7 @@ njs_object_math_max(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
 done:
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -557,7 +557,7 @@ njs_object_math_min(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = INFINITY;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -590,7 +590,7 @@ njs_object_math_pow(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -604,7 +604,7 @@ njs_object_math_random(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
     num = nxt_random(&vm->random) / 4294967296.0;
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -623,7 +623,7 @@ njs_object_math_round(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -646,7 +646,7 @@ njs_object_math_sign(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -665,7 +665,7 @@ njs_object_math_sin(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -684,7 +684,7 @@ njs_object_math_sinh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -703,7 +703,7 @@ njs_object_math_sqrt(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -722,7 +722,7 @@ njs_object_math_tan(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -741,7 +741,7 @@ njs_object_math_tanh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -760,7 +760,7 @@ njs_object_math_trunc(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = NAN;
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
index 17649c47e7f4b37d4d6068c2f52933b301aca3f3..a012604c8df5addd113f19580b58a44c7ad05714 100644 (file)
@@ -24,7 +24,7 @@ typedef struct {
 
 static nxt_int_t njs_module_lookup(njs_vm_t *vm, const nxt_str_t *cwd,
     njs_module_info_t *info);
-static nxt_noinline nxt_int_t njs_module_relative_path(njs_vm_t *vm,
+static nxt_int_t njs_module_relative_path(njs_vm_t *vm,
     const nxt_str_t *dir, njs_module_info_t *info);
 static nxt_int_t njs_module_absolute_path(njs_vm_t *vm,
     njs_module_info_t *info);
@@ -55,9 +55,7 @@ njs_module_load(njs_vm_t *vm)
 
         if (module->function.native) {
             value = njs_vmcode_operand(vm, module->index);
-            value->data.u.object = &module->object;
-            value->type = NJS_OBJECT;
-            value->data.truth = 1;
+            njs_set_object(value, &module->object);
 
         } else {
             ret = njs_vm_invoke(vm, &module->function, NULL, 0, module->index);
@@ -285,7 +283,7 @@ njs_module_absolute_path(njs_vm_t *vm, njs_module_info_t *info)
 }
 
 
-static nxt_noinline nxt_int_t
+static nxt_int_t
 njs_module_relative_path(njs_vm_t *vm, const nxt_str_t *dir,
     njs_module_info_t *info)
 {
@@ -532,9 +530,7 @@ njs_ret_t njs_module_require(njs_vm_t *vm, njs_value_t *args,
         module = lhq.value;
         module->object.__proto__ = &vm->prototypes[NJS_PROTOTYPE_OBJECT].object;
 
-        vm->retval.data.u.object = &module->object;
-        vm->retval.type = NJS_OBJECT;
-        vm->retval.data.truth = 1;
+        njs_set_object(&vm->retval, &module->object);
 
         return NXT_OK;
     }
index 2287472db23563b64d777b902025adc21ca5ef25..a0d83d229cd0d1d63770d77c881eba19616e6746 100644 (file)
@@ -38,7 +38,7 @@ njs_value_to_index(const njs_value_t *value)
 
     } else if (njs_is_array(value)) {
 
-        array = value->data.u.array;
+        array = njs_array(value);
 
         if (nxt_lvlhsh_is_empty(&array->object.hash)) {
 
@@ -62,45 +62,6 @@ njs_value_to_index(const njs_value_t *value)
 }
 
 
-double
-njs_primitive_value_to_number(const njs_value_t *value)
-{
-    if (nxt_fast_path(njs_is_numeric(value))) {
-        return value->data.u.number;
-    }
-
-    return njs_string_to_number(value, 1);
-}
-
-
-int32_t
-njs_primitive_value_to_integer(const njs_value_t *value)
-{
-    return njs_number_to_integer(njs_primitive_value_to_number(value));
-}
-
-
-int32_t
-njs_primitive_value_to_int32(const njs_value_t *value)
-{
-    return njs_number_to_int32(njs_primitive_value_to_number(value));
-}
-
-
-uint32_t
-njs_primitive_value_to_uint32(const njs_value_t *value)
-{
-    return njs_number_to_uint32(njs_primitive_value_to_number(value));
-}
-
-
-uint32_t
-njs_primitive_value_to_length(const njs_value_t *value)
-{
-    return njs_number_to_length(njs_primitive_value_to_number(value));
-}
-
-
 double
 njs_number_dec_parse(const u_char **start, const u_char *end)
 {
@@ -302,7 +263,7 @@ njs_number_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         vm->retval.data.truth = 1;
 
     } else {
-        njs_value_number_set(&vm->retval, value->data.u.number);
+        njs_set_number(&vm->retval, value->data.u.number);
     }
 
     return NXT_OK;
@@ -809,7 +770,7 @@ njs_number_parse_int(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
 done:
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -827,86 +788,12 @@ njs_number_parse_float(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = njs_string_to_number(&args[1], 1);
     }
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
 
 
-int64_t
-njs_number_to_int64(double num)
-{
-#if (NXT_NAN_TO_UINT_CONVERSION != 0)
-    /*
-     * PPC32: NaN and Inf are converted to 0x8000000080000000
-     * and become non-zero after truncation.
-     */
-
-    if (isnan(num) || isinf(num)) {
-        return 0;
-    }
-#endif
-
-    /*
-     * ES5.1: integer must be modulo 2^32.
-     * 2^53 is the largest integer number which can be stored safely
-     * in the IEEE-754 format and numbers less than 2^53 can be just
-     * converted to int64_t eliding more expensive fmod() operation.
-     * Then the int64 integer is truncated to uint32_t.  The NaN is
-     * converted to 0x8000000000000000 and becomes 0 after truncation.
-     * fmod() of the Infinity returns NaN.
-     */
-
-    if (fabs(num) > 9007199254740992.0) {
-        return (int64_t) fmod(num, 4294967296.0);
-    }
-
-    return (int64_t) num;
-}
-
-
-nxt_noinline int32_t
-njs_number_to_integer(double num)
-{
-    return (int32_t) njs_number_to_int64(num);
-}
-
-
-nxt_noinline int32_t
-njs_number_to_int32(double num)
-{
-    return (int32_t) njs_number_to_int64(num);
-}
-
-
-nxt_noinline uint32_t
-njs_number_to_uint32(double num)
-{
-    return (uint32_t) njs_number_to_int64(num);
-}
-
-
-nxt_noinline uint32_t
-njs_number_to_length(double num)
-{
-#if (NXT_NAN_TO_UINT_CONVERSION != 0)
-    if (isnan(num)) {
-        return 0;
-    }
-#endif
-
-    if (num > UINT32_MAX) {
-        return UINT32_MAX;
-
-    } else if (num < 0.0) {
-        return 0;
-    }
-
-    return (uint32_t) (int64_t) num;
-}
-
-
-
 static const njs_object_prop_t  njs_is_nan_function_properties[] =
 {
     /* isNaN.name == "isNaN". */
index 47c6c618c5b4c574bdd6a056e3210ca2feaeca1c..a1e7628580c1cb3b4d49422577ac886376e94301 100644 (file)
@@ -8,15 +8,11 @@
 #define _NJS_NUMBER_H_INCLUDED_
 
 
+#include <njs_string.h>
 #include <math.h>
 
 
 uint32_t njs_value_to_index(const njs_value_t *value);
-double njs_primitive_value_to_number(const njs_value_t *value);
-int32_t njs_primitive_value_to_integer(const njs_value_t *value);
-int32_t njs_primitive_value_to_int32(const njs_value_t *value);
-uint32_t njs_primitive_value_to_uint32(const njs_value_t *value);
-uint32_t njs_primitive_value_to_length(const njs_value_t *value);
 double njs_number_dec_parse(const u_char **start, const u_char *end);
 uint64_t njs_number_oct_parse(const u_char **start, const u_char *end);
 uint64_t njs_number_bin_parse(const u_char **start, const u_char *end);
@@ -35,11 +31,80 @@ njs_ret_t njs_number_parse_int(njs_vm_t *vm, njs_value_t *args,
     nxt_uint_t nargs, njs_index_t unused);
 njs_ret_t njs_number_parse_float(njs_vm_t *vm, njs_value_t *args,
     nxt_uint_t nargs, njs_index_t unused);
-int64_t njs_number_to_int64(double num);
-nxt_noinline int32_t njs_number_to_integer(double num);
-nxt_noinline int32_t njs_number_to_int32(double num);
-nxt_noinline uint32_t njs_number_to_uint32(double num);
-nxt_noinline uint32_t njs_number_to_length(double num);
+
+
+nxt_inline int64_t
+njs_number_to_int64(double num)
+{
+#if (NXT_NAN_TO_UINT_CONVERSION != 0)
+    /*
+     * PPC32: NaN and Inf are converted to 0x8000000080000000
+     * and become non-zero after truncation.
+     */
+
+    if (isnan(num) || isinf(num)) {
+        return 0;
+    }
+#endif
+
+    /*
+     * ES5.1: integer must be modulo 2^32.
+     * 2^53 is the largest integer number which can be stored safely
+     * in the IEEE-754 format and numbers less than 2^53 can be just
+     * converted to int64_t eliding more expensive fmod() operation.
+     * Then the int64 integer is truncated to uint32_t.  The NaN is
+     * converted to 0x8000000000000000 and becomes 0 after truncation.
+     * fmod() of the Infinity returns NaN.
+     */
+
+    if (fabs(num) > 9007199254740992.0) {
+        return (int64_t) fmod(num, 4294967296.0);
+    }
+
+    return (int64_t) num;
+}
+
+
+nxt_inline int32_t
+njs_number_to_integer(double num)
+{
+    return (int32_t) njs_number_to_int64(num);
+}
+
+
+nxt_inline int32_t
+njs_number_to_int32(double num)
+{
+    return (int32_t) njs_number_to_int64(num);
+}
+
+
+nxt_inline uint32_t
+njs_number_to_uint32(double num)
+{
+    return (uint32_t) njs_number_to_int64(num);
+}
+
+
+nxt_inline uint32_t
+njs_number_to_length(double num)
+{
+#if (NXT_NAN_TO_UINT_CONVERSION != 0)
+    if (isnan(num)) {
+        return 0;
+    }
+#endif
+
+    if (num > UINT32_MAX) {
+        return UINT32_MAX;
+
+    } else if (num < 0.0) {
+        return 0;
+    }
+
+    return (uint32_t) (int64_t) num;
+}
+
 
 nxt_inline nxt_int_t
 njs_char_to_hex(u_char c)
@@ -64,6 +129,45 @@ njs_char_to_hex(u_char c)
 }
 
 
+nxt_inline double
+njs_primitive_value_to_number(const njs_value_t *value)
+{
+    if (nxt_fast_path(njs_is_numeric(value))) {
+        return value->data.u.number;
+    }
+
+    return njs_string_to_number(value, 1);
+}
+
+
+nxt_inline int32_t
+njs_primitive_value_to_integer(const njs_value_t *value)
+{
+    return njs_number_to_integer(njs_primitive_value_to_number(value));
+}
+
+
+nxt_inline int32_t
+njs_primitive_value_to_int32(const njs_value_t *value)
+{
+    return njs_number_to_int32(njs_primitive_value_to_number(value));
+}
+
+
+nxt_inline uint32_t
+njs_primitive_value_to_uint32(const njs_value_t *value)
+{
+    return njs_number_to_uint32(njs_primitive_value_to_number(value));
+}
+
+
+nxt_inline uint32_t
+njs_primitive_value_to_length(const njs_value_t *value)
+{
+    return njs_number_to_length(njs_primitive_value_to_number(value));
+}
+
+
 nxt_inline void
 njs_uint32_to_string(njs_value_t *value, uint32_t u32)
 {
index 9d80124de766067c1c6cc17be42951021706d4c3..a5fd7f489dfca0caada30c27deb9538854660425 100644 (file)
@@ -29,7 +29,7 @@ static njs_ret_t njs_object_own_enumerate_object(njs_vm_t *vm,
     njs_object_enum_t kind, nxt_bool_t all);
 
 
-nxt_noinline njs_object_t *
+njs_object_t *
 njs_object_alloc(njs_vm_t *vm)
 {
     njs_object_t  *object;
@@ -79,7 +79,7 @@ njs_object_value_copy(njs_vm_t *vm, njs_value_t *value)
 }
 
 
-nxt_noinline njs_object_t *
+njs_object_t *
 njs_object_value_alloc(njs_vm_t *vm, const njs_value_t *value, nxt_uint_t type)
 {
     nxt_uint_t          index;
@@ -266,9 +266,7 @@ njs_object_create(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             object->__proto__ = NULL;
         }
 
-        vm->retval.data.u.object = object;
-        vm->retval.type = NJS_OBJECT;
-        vm->retval.data.truth = 1;
+        njs_set_object(&vm->retval, object);
 
         return NXT_OK;
     }
@@ -301,9 +299,7 @@ njs_object_keys(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         return NXT_ERROR;
     }
 
-    vm->retval.data.u.array = keys;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, keys);
 
     return NXT_OK;
 }
@@ -330,9 +326,7 @@ njs_object_values(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         return NXT_ERROR;
     }
 
-    vm->retval.data.u.array = array;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, array);
 
     return NXT_OK;
 }
@@ -359,9 +353,7 @@ njs_object_entries(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         return NXT_ERROR;
     }
 
-    vm->retval.data.u.array = array;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, array);
 
     return NXT_OK;
 }
@@ -739,9 +731,7 @@ njs_object_enumerate_array(njs_vm_t *vm, const njs_array_t *array,
                 /* GC: retain. */
                 entry->start[1] = array->start[i];
 
-                item->data.u.array = entry;
-                item->type = NJS_ARRAY;
-                item->data.truth = 1;
+                njs_set_array(item, entry);
 
                 item++;
             }
@@ -831,9 +821,7 @@ njs_object_enumerate_string(njs_vm_t *vm, const njs_value_t *value,
 
                 njs_string_short_set(string, 1, 1);
 
-                item->data.u.array = entry;
-                item->type = NJS_ARRAY;
-                item->data.truth = 1;
+                njs_set_array(item, entry);
 
                 item++;
             }
@@ -861,9 +849,7 @@ njs_object_enumerate_string(njs_vm_t *vm, const njs_value_t *value,
 
                 njs_string_short_set(string, size, 1);
 
-                item->data.u.array = entry;
-                item->type = NJS_ARRAY;
-                item->data.truth = 1;
+                njs_set_array(item, entry);
 
                 item++;
 
@@ -1049,9 +1035,7 @@ njs_object_own_enumerate_object(njs_vm_t *vm, const njs_object_t *object,
                 /* GC: retain. */
                 entry->start[1] = prop->value;
 
-                item->data.u.array = entry;
-                item->type = NJS_ARRAY;
-                item->data.truth = 1;
+                njs_set_array(item, entry);
 
                 item++;
             }
@@ -1088,9 +1072,7 @@ njs_object_own_enumerate_object(njs_vm_t *vm, const njs_object_t *object,
                         /* GC: retain. */
                         entry->start[1] = prop->value;
 
-                        item->data.u.array = entry;
-                        item->type = NJS_ARRAY;
-                        item->data.truth = 1;
+                        njs_set_array(item, entry);
 
                         item++;
                     }
@@ -1181,7 +1163,7 @@ njs_object_define_properties(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
     nxt_lvlhsh_each_init(&lhe, &njs_object_hash_proto);
 
-    hash = &desc->data.u.object->hash;
+    hash = njs_object_hash(desc);
 
     for ( ;; ) {
         prop = nxt_lvlhsh_each(hash, &lhe);
@@ -1286,9 +1268,7 @@ njs_object_get_own_property_descriptors(njs_vm_t *vm, njs_value_t *args,
         }
     }
 
-    vm->retval.data.u.object = descriptors;
-    vm->retval.type = NJS_OBJECT;
-    vm->retval.data.truth = 1;
+    njs_set_object(&vm->retval, descriptors);
 
     return NXT_OK;
 }
@@ -1315,9 +1295,7 @@ njs_object_get_own_property_names(njs_vm_t *vm, njs_value_t *args,
         return NXT_ERROR;
     }
 
-    vm->retval.data.u.array = names;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, names);
 
     return NXT_OK;
 }
index b415213a4f788a9b6e906c4abae0eddb602d0b8c..a307f3b397f47a1a2092dc2acb8ac2a0dce22cb8 100644 (file)
@@ -698,7 +698,7 @@ njs_value_property_set(njs_vm_t *vm, njs_value_t *object,
     pq.lhq.value = prop;
     pq.lhq.pool = vm->mem_pool;
 
-    ret = nxt_lvlhsh_insert(&object->data.u.object->hash, &pq.lhq);
+    ret = nxt_lvlhsh_insert(njs_object_hash(object), &pq.lhq);
     if (nxt_slow_path(ret != NXT_OK)) {
         njs_internal_error(vm, "lvlhsh insert failed");
         return NXT_ERROR;
@@ -712,7 +712,7 @@ found:
 }
 
 
-nxt_noinline njs_object_prop_t *
+njs_object_prop_t *
 njs_object_prop_alloc(njs_vm_t *vm, const njs_value_t *name,
     const njs_value_t *value, uint8_t attributes)
 {
@@ -745,7 +745,7 @@ njs_object_prop_alloc(njs_vm_t *vm, const njs_value_t *name,
 }
 
 
-nxt_noinline njs_object_prop_t *
+njs_object_prop_t *
 njs_object_property(njs_vm_t *vm, const njs_object_t *object,
     nxt_lvlhsh_query_t *lhq)
 {
@@ -848,7 +848,7 @@ njs_object_prop_define(njs_vm_t *vm, njs_value_t *object,
             pq.lhq.replace = 0;
             pq.lhq.pool = vm->mem_pool;
 
-            ret = nxt_lvlhsh_insert(&object->data.u.object->hash, &pq.lhq);
+            ret = nxt_lvlhsh_insert(njs_object_hash(object), &pq.lhq);
             if (nxt_slow_path(ret != NXT_OK)) {
                 njs_internal_error(vm, "lvlhsh insert failed");
                 return NXT_ERROR;
@@ -1315,9 +1315,7 @@ njs_object_prop_descriptor(njs_vm_t *vm, njs_value_t *dest,
         return NXT_ERROR;
     }
 
-    dest->data.u.object = desc;
-    dest->type = NJS_OBJECT;
-    dest->data.truth = 1;
+    njs_set_object(dest, desc);
 
     return NXT_OK;
 }
index a78025f41dd116d3691e21f0990fd48589068902..d25a914b129a46b439c77c74c8e1f0d4fcdc2b50 100644 (file)
@@ -600,7 +600,7 @@ njs_regexp_pattern_create(njs_vm_t *vm, u_char *start, size_t length,
         } while (n != pattern->ngroups);
     }
 
-    njs_value_undefined_set(&vm->retval);
+    njs_set_undefined(&vm->retval);
 
     return pattern;
 
@@ -734,7 +734,7 @@ njs_regexp_prototype_last_index(njs_vm_t *vm, njs_value_t *value,
     (void) njs_string_prop(&string, &regexp->string);
 
     index = njs_string_index(&string, regexp->last_index);
-    njs_value_number_set(retval, index);
+    njs_set_number(retval, index);
 
     return NXT_OK;
 }
@@ -1010,7 +1010,7 @@ njs_regexp_exec_result(njs_vm_t *vm, njs_regexp_t *regexp, njs_utf8_t utf8,
 
     /* TODO: Non UTF-8 position */
 
-    njs_value_number_set(&prop->value, regexp->last_index + captures[0]);
+    njs_set_number(&prop->value, regexp->last_index + captures[0]);
 
     if (regexp->pattern->global) {
         regexp->last_index += captures[1];
@@ -1062,9 +1062,7 @@ njs_regexp_exec_result(njs_vm_t *vm, njs_regexp_t *regexp, njs_utf8_t utf8,
             goto fail;
         }
 
-        prop->value.data.u.object = groups;
-        prop->value.type = NJS_OBJECT;
-        prop->value.data.truth = 1;
+        njs_set_object(&prop->value, groups);
 
         i = 0;
 
@@ -1097,9 +1095,7 @@ njs_regexp_exec_result(njs_vm_t *vm, njs_regexp_t *regexp, njs_utf8_t utf8,
         } while (i < regexp->pattern->ngroups);
     }
 
-    vm->retval.data.u.array = array;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, array);
 
     ret = NXT_OK;
     goto done;
index fa60e85cea03462240622df671e3c4539065ae91..cf036300e19bf61dc4186e41b8a9404026774138 100644 (file)
@@ -60,10 +60,10 @@ static void njs_encode_base64_core(nxt_str_t *dst, const nxt_str_t *src,
     const u_char *basis, nxt_uint_t padding);
 static njs_ret_t njs_decode_base64_core(njs_vm_t *vm,
     njs_value_t *value, const nxt_str_t *src, const u_char *basis);
-static nxt_noinline void njs_string_slice_prop(njs_string_prop_t *string,
+static void njs_string_slice_prop(njs_string_prop_t *string,
     njs_slice_prop_t *slice, njs_value_t *args, nxt_uint_t nargs);
-static nxt_noinline void njs_string_slice_args(njs_slice_prop_t *slice,
-    njs_value_t *args, nxt_uint_t nargs);
+static void njs_string_slice_args(njs_slice_prop_t *slice, njs_value_t *args,
+    nxt_uint_t nargs);
 static njs_ret_t njs_string_from_char_code(njs_vm_t *vm,
     njs_value_t *args, nxt_uint_t nargs, njs_index_t unused);
 static njs_ret_t njs_string_bytes_from(njs_vm_t *vm, njs_value_t *args,
@@ -165,7 +165,7 @@ njs_string_set(njs_vm_t *vm, njs_value_t *value, const u_char *start,
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_new(njs_vm_t *vm, njs_value_t *value, const u_char *start,
     uint32_t size, uint32_t length)
 {
@@ -182,7 +182,7 @@ njs_string_new(njs_vm_t *vm, njs_value_t *value, const u_char *start,
 }
 
 
-nxt_noinline u_char *
+u_char *
 njs_string_alloc(njs_vm_t *vm, njs_value_t *value, uint64_t size,
     uint64_t length)
 {
@@ -274,7 +274,7 @@ njs_string_truncate(njs_value_t *value, uint32_t size)
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_hex(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 {
     u_char        *p, c;
@@ -376,7 +376,7 @@ njs_encode_base64_core(nxt_str_t *dst, const nxt_str_t *src,
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_base64(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 {
     nxt_str_t  dst;
@@ -399,7 +399,7 @@ njs_string_base64(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_base64url(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 {
     size_t     padding;
@@ -444,7 +444,7 @@ njs_string_copy(njs_value_t *dst, njs_value_t *src)
  * sets njs_string_prop_t struct.
  */
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_validate(njs_vm_t *vm, njs_string_prop_t *string, njs_value_t *value)
 {
     u_char    *start;
@@ -517,7 +517,7 @@ njs_string_validate(njs_vm_t *vm, njs_string_prop_t *string, njs_value_t *value)
 }
 
 
-nxt_noinline size_t
+size_t
 njs_string_prop(njs_string_prop_t *string, const njs_value_t *value)
 {
     size_t     size;
@@ -680,7 +680,7 @@ njs_string_instance_length(njs_vm_t *vm, njs_value_t *value,
         length = (length == 0) ? size : length;
     }
 
-    njs_value_number_set(retval, length);
+    njs_set_number(retval, length);
 
     njs_release(vm, value);
 
@@ -1089,7 +1089,7 @@ njs_string_prototype_to_bytes(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
  * JavaScript 1.2, ECMAScript 3.
  */
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_string_prototype_slice(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_index_t unused)
 {
@@ -1243,7 +1243,7 @@ njs_string_prototype_char_at(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 }
 
 
-static nxt_noinline void
+static void
 njs_string_slice_prop(njs_string_prop_t *string, njs_slice_prop_t *slice,
     njs_value_t *args, nxt_uint_t nargs)
 {
@@ -1253,7 +1253,7 @@ njs_string_slice_prop(njs_string_prop_t *string, njs_slice_prop_t *slice,
 }
 
 
-static nxt_noinline void
+static void
 njs_string_slice_args(njs_slice_prop_t *slice, njs_value_t *args,
     nxt_uint_t nargs)
 {
@@ -1308,7 +1308,7 @@ njs_string_slice_args(njs_slice_prop_t *slice, njs_value_t *args,
 }
 
 
-nxt_noinline void
+void
 njs_string_slice_string_prop(njs_string_prop_t *dst,
     const njs_string_prop_t *string, const njs_slice_prop_t *slice)
 {
@@ -1352,7 +1352,7 @@ njs_string_slice_string_prop(njs_string_prop_t *dst,
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_slice(njs_vm_t *vm, njs_value_t *dst,
     const njs_string_prop_t *string, const njs_slice_prop_t *slice)
 {
@@ -1408,7 +1408,7 @@ njs_string_prototype_char_code_at(njs_vm_t *vm, njs_value_t *args,
 
 done:
 
-    njs_value_number_set(&vm->retval, num);
+    njs_set_number(&vm->retval, num);
 
     return NXT_OK;
 }
@@ -1453,7 +1453,7 @@ njs_string_bytes_from_array(njs_vm_t *vm, const njs_value_t *value)
     njs_array_t  *array;
     njs_value_t  *octet;
 
-    array = value->data.u.array;
+    array = njs_array(value);
     length = array->length;
 
     for (i = 0; i < length; i++) {
@@ -1514,7 +1514,7 @@ njs_string_bytes_from_string(njs_vm_t *vm, const njs_value_t *args,
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_decode_hex(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 {
     u_char        *p, *dst;
@@ -1561,7 +1561,7 @@ njs_string_decode_hex(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_decode_base64(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 {
     static u_char   basis64[] = {
@@ -1588,7 +1588,7 @@ njs_string_decode_base64(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src)
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_string_decode_base64url(njs_vm_t *vm, njs_value_t *value,
     const nxt_str_t *src)
 {
@@ -1796,7 +1796,7 @@ njs_string_prototype_index_of(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
 done:
 
-    njs_value_number_set(&vm->retval, index);
+    njs_set_number(&vm->retval, index);
 
     return NXT_OK;
 }
@@ -1900,7 +1900,7 @@ njs_string_prototype_last_index_of(njs_vm_t *vm, njs_value_t *args,
 
 done:
 
-    njs_value_number_set(&vm->retval, index);
+    njs_set_number(&vm->retval, index);
 
     return NXT_OK;
 }
@@ -2063,7 +2063,7 @@ done:
  * njs_string_offset() assumes that index is correct.
  */
 
-nxt_noinline const u_char *
+const u_char *
 njs_string_offset(const u_char *start, const u_char *end, size_t index)
 {
     uint32_t    *map;
@@ -2091,7 +2091,7 @@ njs_string_offset(const u_char *start, const u_char *end, size_t index)
  * njs_string_index() assumes that offset is correct.
  */
 
-nxt_noinline uint32_t
+uint32_t
 njs_string_index(njs_string_prop_t *string, uint32_t offset)
 {
     uint32_t      *map, last, index;
@@ -2134,7 +2134,7 @@ njs_string_index(njs_string_prop_t *string, uint32_t offset)
 }
 
 
-nxt_noinline void
+void
 njs_string_offset_map_init(const u_char *start, size_t size)
 {
     size_t        offset;
@@ -2613,7 +2613,7 @@ njs_string_prototype_search(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
 done:
 
-    njs_value_number_set(&vm->retval, index);
+    njs_set_number(&vm->retval, index);
 
     return NXT_OK;
 }
@@ -2760,9 +2760,7 @@ njs_string_match_multiple(njs_vm_t *vm, njs_value_t *args,
 
         } while (p <= end);
 
-        vm->retval.data.u.array = array;
-        vm->retval.type = NJS_ARRAY;
-        vm->retval.data.truth = 1;
+        njs_set_array(&vm->retval, array);
     }
 
     return NXT_OK;
@@ -2932,9 +2930,7 @@ single:
 
 done:
 
-    vm->retval.data.u.array = array;
-    vm->retval.type = NJS_ARRAY;
-    vm->retval.data.truth = 1;
+    njs_set_array(&vm->retval, array);
 
     return NXT_OK;
 }
@@ -3237,7 +3233,7 @@ njs_string_replace_regexp_function(njs_vm_t *vm, njs_value_t *args,
     r->empty = (captures[0] == captures[1]);
 
     /* The offset of the matched substring. */
-    njs_value_number_set(&arguments[n + 1], captures[0]);
+    njs_set_number(&arguments[n + 1], captures[0]);
 
     /* The whole string being examined. */
     length = njs_string_calc_length(r->utf8, r->part[0].start, r->part[0].size);
@@ -3375,7 +3371,7 @@ njs_string_replace_search_function(njs_vm_t *vm, njs_value_t *args,
     arguments[1] = args[1];
 
     /* The offset of the matched substring. */
-    njs_value_number_set(&arguments[2], r->part[0].size);
+    njs_set_number(&arguments[2], r->part[0].size);
 
     /* The whole string being examined. */
     arguments[3] = args[0];
index 1f621ca7ae82ee06177162d083e23f2a387ff76e..b8426ae9f90e184c3210c868a4a80fa81cd205c3 100644 (file)
@@ -165,20 +165,18 @@ void njs_string_truncate(njs_value_t *value, uint32_t size);
 void njs_string_copy(njs_value_t *dst, njs_value_t *src);
 njs_ret_t njs_string_validate(njs_vm_t *vm, njs_string_prop_t *string,
     njs_value_t *value);
-nxt_noinline size_t njs_string_prop(njs_string_prop_t *string,
-    const njs_value_t *value);
+size_t njs_string_prop(njs_string_prop_t *string, const njs_value_t *value);
 njs_ret_t njs_string_constructor(njs_vm_t *vm, njs_value_t *args,
     nxt_uint_t nargs, njs_index_t unused);
 nxt_bool_t njs_string_eq(const njs_value_t *val1, const njs_value_t *val2);
 nxt_int_t njs_string_cmp(const njs_value_t *val1, const njs_value_t *val2);
-nxt_noinline void njs_string_slice_string_prop(njs_string_prop_t *dst,
+void njs_string_slice_string_prop(njs_string_prop_t *dst,
     const njs_string_prop_t *string, const njs_slice_prop_t *slice);
 njs_ret_t njs_string_slice(njs_vm_t *vm, njs_value_t *dst,
     const njs_string_prop_t *string, const njs_slice_prop_t *slice);
 const u_char *njs_string_offset(const u_char *start, const u_char *end,
     size_t index);
-nxt_noinline uint32_t njs_string_index(njs_string_prop_t *string,
-    uint32_t offset);
+uint32_t njs_string_index(njs_string_prop_t *string, uint32_t offset);
 void njs_string_offset_map_init(const u_char *start, size_t size);
 njs_ret_t njs_primitive_value_to_string(njs_vm_t *vm, njs_value_t *dst,
     const njs_value_t *src);
index cb87bcc39afe20615b10e849d48c13cb425c882e..3bab70a39a015513392058c23d60b31a060d7ed8 100644 (file)
@@ -21,12 +21,12 @@ struct njs_property_next_s {
  * and should fit in CPU L1 instruction cache.
  */
 
-static nxt_noinline njs_ret_t njs_string_concat(njs_vm_t *vm,
-    njs_value_t *val1, njs_value_t *val2);
-static nxt_noinline njs_ret_t njs_values_equal(njs_vm_t *vm,
-    const njs_value_t *val1, const njs_value_t *val2);
-static nxt_noinline njs_ret_t njs_values_compare(njs_vm_t *vm,
-    const njs_value_t *val1, const njs_value_t *val2);
+static njs_ret_t njs_string_concat(njs_vm_t *vm, njs_value_t *val1,
+    njs_value_t *val2);
+static njs_ret_t njs_values_equal(njs_vm_t *vm, const njs_value_t *val1,
+    const njs_value_t *val2);
+static njs_ret_t njs_values_compare(njs_vm_t *vm, const njs_value_t *val1,
+    const njs_value_t *val2);
 static njs_ret_t njs_function_frame_create(njs_vm_t *vm, njs_value_t *value,
     const njs_value_t *this, uintptr_t nargs, nxt_bool_t ctor);
 static njs_object_t *njs_function_new_object(njs_vm_t *vm, njs_value_t *value);
@@ -108,7 +108,7 @@ const nxt_str_t  njs_entry_anonymous =      nxt_string("anonymous");
  * values is passed as arguments although they are not always used.
  */
 
-nxt_noinline nxt_int_t
+nxt_int_t
 njs_vmcode_interpreter(njs_vm_t *vm)
 {
     u_char                *catch;
@@ -255,7 +255,7 @@ start:
 }
 
 
-nxt_noinline void
+void
 njs_value_retain(njs_value_t *value)
 {
     njs_string_t  *string;
@@ -276,7 +276,7 @@ njs_value_retain(njs_value_t *value)
 }
 
 
-nxt_noinline void
+void
 njs_value_release(njs_vm_t *vm, njs_value_t *value)
 {
     njs_string_t  *string;
@@ -318,9 +318,7 @@ njs_vmcode_object(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2)
     object = njs_object_alloc(vm);
 
     if (nxt_fast_path(object != NULL)) {
-        vm->retval.data.u.object = object;
-        vm->retval.type = NJS_OBJECT;
-        vm->retval.data.truth = 1;
+        njs_set_object(&vm->retval, object);
 
         return sizeof(njs_vmcode_object_t);
     }
@@ -359,9 +357,7 @@ njs_vmcode_array(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2)
             array->length = 0;
         }
 
-        vm->retval.data.u.array = array;
-        vm->retval.type = NJS_ARRAY;
-        vm->retval.data.truth = 1;
+        njs_set_array(&vm->retval, array);
 
         return sizeof(njs_vmcode_array_t);
     }
@@ -430,9 +426,7 @@ njs_vmcode_arguments(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2)
     code = (njs_vmcode_arguments_t *) vm->current;
 
     value = njs_vmcode_operand(vm, code->dst);
-    value->data.u.object = frame->native.arguments_object;
-    value->type = NJS_OBJECT;
-    value->data.truth = 1;
+    njs_set_object(value, frame->native.arguments_object);
 
     return sizeof(njs_vmcode_arguments_t);
 }
@@ -477,7 +471,7 @@ njs_vmcode_template_literal(njs_vm_t *vm, njs_value_t *invld1,
     value = njs_vmcode_operand(vm, retval);
 
     if (!njs_is_primitive(value)) {
-        array = value->data.u.array;
+        array = njs_array(value);
 
         ret = njs_function_activate(vm, (njs_function_t *) &concat,
                                     &njs_string_empty, array->start,
@@ -996,7 +990,7 @@ njs_vmcode_increment(njs_vm_t *vm, njs_value_t *reference, njs_value_t *value)
 
         njs_release(vm, reference);
 
-        njs_value_number_set(reference, num);
+        njs_set_number(reference, num);
         vm->retval = *reference;
 
         return sizeof(njs_vmcode_3addr_t);
@@ -1016,7 +1010,7 @@ njs_vmcode_decrement(njs_vm_t *vm, njs_value_t *reference, njs_value_t *value)
 
         njs_release(vm, reference);
 
-        njs_value_number_set(reference, num);
+        njs_set_number(reference, num);
         vm->retval = *reference;
 
         return sizeof(njs_vmcode_3addr_t);
@@ -1037,8 +1031,8 @@ njs_vmcode_post_increment(njs_vm_t *vm, njs_value_t *reference,
 
         njs_release(vm, reference);
 
-        njs_value_number_set(reference, num + 1.0);
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(reference, num + 1.0);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1058,8 +1052,8 @@ njs_vmcode_post_decrement(njs_vm_t *vm, njs_value_t *reference,
 
         njs_release(vm, reference);
 
-        njs_value_number_set(reference, num - 1.0);
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(reference, num - 1.0);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1140,7 +1134,7 @@ njs_ret_t
 njs_vmcode_unary_plus(njs_vm_t *vm, njs_value_t *value, njs_value_t *invld)
 {
     if (nxt_fast_path(njs_is_numeric(value))) {
-        njs_value_number_set(&vm->retval, value->data.u.number);
+        njs_set_number(&vm->retval, value->data.u.number);
         return sizeof(njs_vmcode_2addr_t);
     }
 
@@ -1152,7 +1146,7 @@ njs_ret_t
 njs_vmcode_unary_negation(njs_vm_t *vm, njs_value_t *value, njs_value_t *invld)
 {
     if (nxt_fast_path(njs_is_numeric(value))) {
-        njs_value_number_set(&vm->retval, - value->data.u.number);
+        njs_set_number(&vm->retval, - value->data.u.number);
         return sizeof(njs_vmcode_2addr_t);
     }
 
@@ -1170,7 +1164,7 @@ njs_vmcode_addition(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
     if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
 
         num = val1->data.u.number + val2->data.u.number;
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1205,7 +1199,7 @@ njs_vmcode_addition(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_string_concat(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 {
     u_char             *start;
@@ -1251,7 +1245,7 @@ njs_vmcode_substraction(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
     if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
 
         num = val1->data.u.number - val2->data.u.number;
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1268,7 +1262,7 @@ njs_vmcode_multiplication(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
     if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
 
         num = val1->data.u.number * val2->data.u.number;
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1302,7 +1296,7 @@ njs_vmcode_exponentiation(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
             num = NAN;
         }
 
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1319,7 +1313,7 @@ njs_vmcode_division(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
     if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
 
         num = val1->data.u.number / val2->data.u.number;
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1336,7 +1330,7 @@ njs_vmcode_remainder(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
     if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
 
         num = fmod(val1->data.u.number, val2->data.u.number);
-        njs_value_number_set(&vm->retval, num);
+        njs_set_number(&vm->retval, num);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1355,7 +1349,7 @@ njs_vmcode_left_shift(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 
         num1 = njs_number_to_int32(val1->data.u.number);
         num2 = njs_number_to_uint32(val2->data.u.number);
-        njs_value_number_set(&vm->retval, num1 << (num2 & 0x1f));
+        njs_set_number(&vm->retval, num1 << (num2 & 0x1f));
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1374,7 +1368,7 @@ njs_vmcode_right_shift(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 
         num1 = njs_number_to_int32(val1->data.u.number);
         num2 = njs_number_to_uint32(val2->data.u.number);
-        njs_value_number_set(&vm->retval, num1 >> (num2 & 0x1f));
+        njs_set_number(&vm->retval, num1 >> (num2 & 0x1f));
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1393,7 +1387,7 @@ njs_vmcode_unsigned_right_shift(njs_vm_t *vm, njs_value_t *val1,
 
         num1 = njs_number_to_uint32(val1->data.u.number);
         num2 = njs_number_to_uint32(val2->data.u.number);
-        njs_value_number_set(&vm->retval, num1 >> (num2 & 0x1f));
+        njs_set_number(&vm->retval, num1 >> (num2 & 0x1f));
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1459,7 +1453,7 @@ njs_vmcode_bitwise_not(njs_vm_t *vm, njs_value_t *value, njs_value_t *invld)
 
     if (nxt_fast_path(njs_is_numeric(value))) {
         num = njs_number_to_integer(value->data.u.number);
-        njs_value_number_set(&vm->retval, ~num);
+        njs_set_number(&vm->retval, ~num);
 
         return sizeof(njs_vmcode_2addr_t);
     }
@@ -1477,7 +1471,7 @@ njs_vmcode_bitwise_and(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 
         num1 = njs_number_to_integer(val1->data.u.number);
         num2 = njs_number_to_integer(val2->data.u.number);
-        njs_value_number_set(&vm->retval, num1 & num2);
+        njs_set_number(&vm->retval, num1 & num2);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1495,7 +1489,7 @@ njs_vmcode_bitwise_xor(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 
         num1 = njs_number_to_integer(val1->data.u.number);
         num2 = njs_number_to_integer(val2->data.u.number);
-        njs_value_number_set(&vm->retval, num1 ^ num2);
+        njs_set_number(&vm->retval, num1 ^ num2);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1513,7 +1507,7 @@ njs_vmcode_bitwise_or(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 
         num1 = njs_number_to_uint32(val1->data.u.number);
         num2 = njs_number_to_uint32(val2->data.u.number);
-        njs_value_number_set(&vm->retval, num1 | num2);
+        njs_set_number(&vm->retval, num1 | num2);
 
         return sizeof(njs_vmcode_3addr_t);
     }
@@ -1562,7 +1556,7 @@ njs_vmcode_not_equal(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 }
 
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_values_equal(njs_vm_t *vm, const njs_value_t *val1, const njs_value_t *val2)
 {
     nxt_bool_t         nv1, nv2;
@@ -1616,7 +1610,7 @@ njs_values_equal(njs_vm_t *vm, const njs_value_t *val1, const njs_value_t *val2)
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_vmcode_less(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 {
     njs_ret_t          ret;
@@ -1650,7 +1644,7 @@ njs_vmcode_less_or_equal(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 }
 
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_vmcode_greater_or_equal(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 {
     njs_ret_t          ret;
@@ -1679,7 +1673,7 @@ njs_vmcode_greater_or_equal(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
  *  or negative trap number if convertion to primitive is required.
  */
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_values_compare(njs_vm_t *vm, const njs_value_t *val1,
     const njs_value_t *val2)
 {
@@ -1754,7 +1748,7 @@ njs_vmcode_strict_not_equal(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2)
 }
 
 
-nxt_noinline nxt_bool_t
+nxt_bool_t
 njs_values_strict_equal(const njs_value_t *val1, const njs_value_t *val2)
 {
     size_t        size, length1, length2;
@@ -1925,9 +1919,7 @@ njs_function_frame_create(njs_vm_t *vm, njs_value_t *value,
                     return NXT_ERROR;
                 }
 
-                val.data.u.object = object;
-                val.type = NJS_OBJECT;
-                val.data.truth = 1;
+                njs_set_object(&val, object);
                 this = &val;
             }
         }
@@ -2398,7 +2390,7 @@ njs_vmcode_try_start(njs_vm_t *vm, njs_value_t *exception_value,
  * the nearest try_end block. The exit_value is checked by njs_vmcode_finally().
  */
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_vmcode_try_break(njs_vm_t *vm, njs_value_t *exit_value,
     njs_value_t *offset)
 {
@@ -2416,7 +2408,7 @@ njs_vmcode_try_break(njs_vm_t *vm, njs_value_t *exit_value,
  * the nearest try_end block. The exit_value is checked by njs_vmcode_finally().
  */
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_vmcode_try_continue(njs_vm_t *vm, njs_value_t *exit_value,
     njs_value_t *offset)
 {
@@ -2430,7 +2422,7 @@ njs_vmcode_try_continue(njs_vm_t *vm, njs_value_t *exit_value,
  * njs_vmcode_finally(), and jumps to the nearest try_break block.
  */
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_vmcode_try_return(njs_vm_t *vm, njs_value_t *value, njs_value_t *invld)
 {
     njs_vmcode_try_return_t  *try_return;
@@ -2450,7 +2442,7 @@ njs_vmcode_try_return(njs_vm_t *vm, njs_value_t *value, njs_value_t *invld)
  * It is also set on the end of a "catch" block followed by a "finally" block.
  */
 
-nxt_noinline njs_ret_t
+njs_ret_t
 njs_vmcode_try_end(njs_vm_t *vm, njs_value_t *invld, njs_value_t *offset)
 {
     njs_exception_t  *e;
@@ -2747,7 +2739,7 @@ njs_vmcode_number_primitive(njs_vm_t *vm, njs_value_t *invld, njs_value_t *narg)
                 num = njs_string_to_number(value, 0);
             }
 
-            njs_value_number_set(value, num);
+            njs_set_number(value, num);
         }
 
         ret = sizeof(njs_vmcode_1addr_t);
@@ -2845,7 +2837,7 @@ njs_vmcode_number_argument(njs_vm_t *vm, njs_value_t *invld1,
                 num = njs_string_to_number(value, 0);
             }
 
-            njs_value_number_set(value, num);
+            njs_set_number(value, num);
         }
 
         *vm->top_frame->trap_values[1].data.u.value = *value;
@@ -2959,7 +2951,7 @@ njs_vmcode_restart(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2)
  * for numbers and "toString", "valueOf" for strings.
  */
 
-static nxt_noinline njs_ret_t
+static njs_ret_t
 njs_primitive_value(njs_vm_t *vm, njs_value_t *value, nxt_uint_t hint)
 {
     njs_ret_t           ret;
@@ -3342,164 +3334,6 @@ njs_vmcode_value_to_string(njs_vm_t *vm, njs_value_t *invld1,
 }
 
 
-nxt_noinline void
-njs_value_undefined_set(njs_value_t *value)
-{
-    *value = njs_value_undefined;
-}
-
-
-nxt_noinline void
-njs_value_boolean_set(njs_value_t *value, int yn)
-{
-    *value = yn ? njs_value_true : njs_value_false;
-}
-
-
-nxt_noinline void
-njs_value_number_set(njs_value_t *value, double num)
-{
-    value->data.u.number = num;
-    value->type = NJS_NUMBER;
-    value->data.truth = njs_is_number_true(num);
-}
-
-
-nxt_noinline void
-njs_value_data_set(njs_value_t *value, void *data)
-{
-    value->data.u.data = data;
-    value->type = NJS_DATA;
-    value->data.truth = 1;
-}
-
-
-nxt_noinline njs_ret_t
-njs_vm_value_string_set(njs_vm_t *vm, njs_value_t *value, const u_char *start,
-    uint32_t size)
-{
-    return njs_string_set(vm, value, start, size);
-}
-
-
-nxt_noinline u_char *
-njs_vm_value_string_alloc(njs_vm_t *vm, njs_value_t *value, uint32_t size)
-{
-    return njs_string_alloc(vm, value, size, 0);
-}
-
-
-void
-njs_vm_value_error_set(njs_vm_t *vm, njs_value_t *value, const char *fmt, ...)
-{
-    va_list  args;
-    u_char   buf[NXT_MAX_ERROR_STR], *p;
-
-    p = buf;
-
-    if (fmt != NULL) {
-        va_start(args, fmt);
-        p = nxt_vsprintf(buf, buf + sizeof(buf), fmt, args);
-        va_end(args);
-    }
-
-    njs_error_new(vm, value, NJS_OBJECT_ERROR, buf, p - buf);
-}
-
-
-nxt_noinline uint8_t
-njs_value_bool(const njs_value_t *value)
-{
-    return value->data.truth;
-}
-
-
-nxt_noinline double
-njs_value_number(const njs_value_t *value)
-{
-    return value->data.u.number;
-}
-
-
-nxt_noinline void *
-njs_value_data(const njs_value_t *value)
-{
-    return value->data.u.data;
-}
-
-
-nxt_noinline njs_function_t *
-njs_value_function(const njs_value_t *value)
-{
-    return value->data.u.function;
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_null(const njs_value_t *value)
-{
-    return njs_is_null(value);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_undefined(const njs_value_t *value)
-{
-    return njs_is_undefined(value);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_null_or_undefined(const njs_value_t *value)
-{
-    return njs_is_null_or_undefined(value);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_boolean(const njs_value_t *value)
-{
-    return njs_is_boolean(value);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_number(const njs_value_t *value)
-{
-    return njs_is_number(value);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_valid_number(const njs_value_t *value)
-{
-    return njs_is_number(value)
-           && !isnan(value->data.u.number)
-           && !isinf(value->data.u.number);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_string(const njs_value_t *value)
-{
-    return njs_is_string(value);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_object(const njs_value_t *value)
-{
-    return njs_is_object(value);
-}
-
-
-nxt_noinline nxt_int_t
-njs_value_is_function(const njs_value_t *value)
-{
-    return njs_is_function(value);
-}
-
-
 nxt_int_t
 njs_vm_value_string_copy(njs_vm_t *vm, nxt_str_t *retval,
     const njs_value_t *value, uintptr_t *next)
@@ -3518,7 +3352,7 @@ njs_vm_value_string_copy(njs_vm_t *vm, nxt_str_t *retval,
         break;
 
     case NJS_ARRAY:
-        array = value->data.u.array;
+        array = njs_array(value);
 
         do {
             n = (*next)++;
index 19099c8fabd955fa9af92b7524d80c208e9897e1..6fc9c4b56cf649c42ee4b831873af71ee3e30b09 100644 (file)
@@ -15,6 +15,8 @@
 #include <nxt_djb_hash.h>
 #include <nxt_mp.h>
 
+#include <math.h>
+
 
 #define NJS_MAX_STACK_SIZE       (16 * 1024 * 1024)
 
@@ -564,6 +566,94 @@ typedef njs_ret_t (*njs_vmcode_operation_t)(njs_vm_t *vm, njs_value_t *value1,
     ((value)->type != NJS_INVALID)
 
 
+#define njs_bool(value)                                                       \
+    ((value)->data.truth)
+
+
+#define njs_number(value)                                                     \
+    ((value)->data.u.number)
+
+
+#define njs_data(value)                                                       \
+    ((value)->data.u.data)
+
+
+#define njs_function(value)                                                   \
+    ((value)->data.u.function)
+
+
+#define njs_object(value)                                                     \
+    ((value)->data.u.object)
+
+
+#define njs_object_hash(value)                                                \
+    (&(value)->data.u.object->hash)
+
+
+#define njs_array(value)                                                      \
+    ((value)->data.u.array)
+
+
+#define njs_array_len(value)                                                  \
+    ((value)->data.u.array->length)
+
+
+#define njs_array_start(value)                                                \
+    ((value)->data.u.array->start)
+
+
+#define njs_set_undefined(value)                                              \
+    *(value) = njs_value_undefined
+
+
+#define njs_set_boolean(value, yn)                                            \
+    *(value) = yn ? njs_value_true : njs_value_false
+
+
+#define njs_set_true(value)                                                   \
+    *(value) = njs_value_true
+
+
+#define njs_set_false(value)                                                  \
+    *(value) = njs_value_false
+
+
+nxt_inline void
+njs_set_number(njs_value_t *value, double num)
+{
+    value->data.u.number = num;
+    value->type = NJS_NUMBER;
+    value->data.truth = njs_is_number_true(num);
+}
+
+
+nxt_inline void
+njs_set_data(njs_value_t *value, void *data)
+{
+    value->data.u.data = data;
+    value->type = NJS_DATA;
+    value->data.truth = 1;
+}
+
+
+nxt_inline void
+njs_set_object(njs_value_t *value, njs_object_t *object)
+{
+    value->data.u.object = object;
+    value->type = NJS_OBJECT;
+    value->data.truth = 1;
+}
+
+
+nxt_inline void
+njs_set_array(njs_value_t *value, njs_array_t *array)
+{
+    value->data.u.array = array;
+    value->type = NJS_ARRAY;
+    value->data.truth = 1;
+}
+
+
 #define njs_set_invalid(value)                                                \
     (value)->type = NJS_INVALID
 
index eb4a024fe2bd474a63237a98b403bdaa61cf1b2c..916a51238a95643bfc220ed91e0f003015df660c 100644 (file)
@@ -827,7 +827,7 @@ nxt_lvlhsh_level_each(nxt_lvlhsh_each_t *lhe, void **level, nxt_uint_t nlvl,
 }
 
 
-static nxt_noinline void *
+static void *
 nxt_lvlhsh_bucket_each(nxt_lvlhsh_each_t *lhe)
 {
     void      *value, **next;