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);
+ && !isnan(njs_number(value))
+ && !isinf(njs_number(value));
}
size = nargs - 1;
if (size == 1 && njs_is_number(&args[0])) {
- num = args[0].data.u.number;
+ num = njs_number(&args[0]);
size = (uint32_t) num;
if ((double) size != num) {
return NJS_ERROR;
}
- num = setval->data.u.number;
+ num = njs_number(setval);
length = (uint32_t) num;
if ((double) length != num) {
length = array->length;
if (nargs > 1) {
- start = args[1].data.u.number;
+ start = njs_number(&args[1]);
if (start < 0) {
start += length;
delete = length - start;
if (nargs > 2) {
- n = args[2].data.u.number;
+ n = njs_number(&args[2]);
if (n < 0) {
delete = 0;
i = 0;
if (nargs > 2) {
- i = args[2].data.u.number;
+ i = njs_number(&args[2]);
if (i >= length) {
goto done;
i = length - 1;
if (nargs > 2) {
- n = args[2].data.u.number;
+ n = njs_number(&args[2]);
if (n < 0) {
i = n + length;
i = 0;
if (nargs > 2) {
- i = args[2].data.u.number;
+ i = njs_number(&args[2]);
if (i >= length) {
goto done;
start = array->start;
value = &args[1];
- if (njs_is_number(value) && isnan(value->data.u.number)) {
+ if (njs_is_number(value) && isnan(njs_number(value))) {
do {
value = &start[i];
- if (njs_is_number(value) && isnan(value->data.u.number)) {
+ if (njs_is_number(value) && isnan(njs_number(value))) {
retval = &njs_value_true;
break;
}
* "goto next" moves control to the appropriate step of the algorithm.
* The first iteration also goes there because sort->retval is zero.
*/
- if (sort->retval.data.u.number <= 0) {
+ if (njs_number(&sort->retval) <= 0) {
goto next;
}
njs_process_object_pid(njs_vm_t *vm, njs_value_t *unused,
njs_value_t *unused2, njs_value_t *retval)
{
- retval->data.u.number = getpid();
- retval->type = NJS_NUMBER;
- retval->data.truth = njs_is_number_true(retval->data.u.number);
+ njs_set_number(retval, getpid());
return NJS_OK;
}
njs_process_object_ppid(njs_vm_t *vm, njs_value_t *unused,
njs_value_t *unused2, njs_value_t *retval)
{
- retval->data.u.number = getppid();
- retval->type = NJS_NUMBER;
- retval->data.truth = njs_is_number_true(retval->data.u.number);
+ njs_set_number(retval, getppid());
return NJS_OK;
}
value->data.type = NJS_OBJECT_INTERNAL_ERROR;
value->data.truth = 1;
- value->data.u.number = NAN;
value->data.u.object = object;
}
lhq.key_hash = NJS_ERRNO_HASH;
lhq.proto = &njs_object_hash_proto;
- value.data.type = NJS_NUMBER;
- value.data.truth = 1;
- value.data.u.number = errn;
+ njs_set_number(&value, errn);
prop = njs_object_prop_alloc(vm, &njs_fs_errno_string, &value, 1);
if (nxt_slow_path(prop == NULL)) {
/* Fall through. */
case NJS_NUMBER:
- return (mode_t) value->data.u.number;
+ return (mode_t) njs_number(value);
case NJS_OBJECT_STRING:
value = &value->data.u.object_value->value;
/* Numbers are truncated to fit in 32-bit integers. */
- if (isnan(args->data.u.number)) {
- args->data.u.number = 0;
+ if (isnan(njs_number(args))) {
+ njs_number(args) = 0;
- } else if (args->data.u.number > 2147483647.0) {
- args->data.u.number = 2147483647.0;
+ } else if (njs_number(args) > 2147483647.0) {
+ njs_number(args) = 2147483647.0;
- } else if (args->data.u.number < -2147483648.0) {
- args->data.u.number = -2147483648.0;
+ } else if (njs_number(args) < -2147483648.0) {
+ njs_number(args) = -2147483648.0;
}
break;
stringify->space.length = nxt_min(stringify->space.length, 10);
} else {
- num = space->data.u.number;
+ num = njs_number(space);
if (!isnan(num) && !isinf(num) && num > 0) {
num = nxt_min(num, 10);
start = p;
num = njs_number_dec_parse(&p, ctx->end);
if (p != start) {
- value->data.u.number = sign * num;
- value->type = NJS_NUMBER;
- value->data.truth = njs_is_number_true(num);
-
+ njs_set_number(value, sign * num);
return p;
}
size_t size;
double num;
- num = value->data.u.number;
+ num = njs_number(value);
if (isnan(num) || isinf(num)) {
return njs_json_buf_append(stringify, "null", 4);
case NJS_OBJECT_NUMBER:
value = &value->data.u.object_value->value;
- if (nxt_slow_path(value->data.u.number == 0.0
- && signbit(value->data.u.number)))
+ if (nxt_slow_path(njs_number(value) == 0.0
+ && signbit(njs_number(value))))
{
njs_dump("[Number: -0]");
return njs_json_buf_append(stringify, "]}", 2);
case NJS_NUMBER:
- if (nxt_slow_path(value->data.u.number == 0.0
- && signbit(value->data.u.number)))
+ if (nxt_slow_path(njs_number(value) == 0.0
+ && signbit(njs_number(value))))
{
njs_dump("-0");
double num;
if (nargs > 1) {
- num = fabs(args[1].data.u.number);
+ num = fabs(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
#if (NXT_SOLARIS)
/* On Solaris acos(x) returns 0 for x > 1. */
double num;
if (nargs > 1) {
- num = acosh(args[1].data.u.number);
+ num = acosh(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
#if (NXT_SOLARIS)
/* On Solaris asin(x) returns 0 for x > 1. */
double num;
if (nargs > 1) {
- num = asinh(args[1].data.u.number);
+ num = asinh(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = atan(args[1].data.u.number);
+ num = atan(njs_number(&args[1]));
} else {
num = NAN;
double num, y, x;
if (nargs > 2) {
- y = args[1].data.u.number;
- x = args[2].data.u.number;
+ y = njs_number(&args[1]);
+ x = njs_number(&args[2]);
num = atan2(y, x);
double num;
if (nargs > 1) {
- num = atanh(args[1].data.u.number);
+ num = atanh(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = cbrt(args[1].data.u.number);
+ num = cbrt(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = ceil(args[1].data.u.number);
+ num = ceil(njs_number(&args[1]));
} else {
num = NAN;
uint32_t ui32;
if (nargs > 1) {
- ui32 = njs_number_to_uint32(args[1].data.u.number);
+ ui32 = njs_number_to_uint32(njs_number(&args[1]));
num = nxt_leading_zeros(ui32);
} else {
double num;
if (nargs > 1) {
- num = cos(args[1].data.u.number);
+ num = cos(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = cosh(args[1].data.u.number);
+ num = cosh(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = exp(args[1].data.u.number);
+ num = exp(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = expm1(args[1].data.u.number);
+ num = expm1(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = floor(args[1].data.u.number);
+ num = floor(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = (float) args[1].data.u.number;
+ num = (float) njs_number(&args[1]);
} else {
num = NAN;
}
}
- num = (nargs > 1) ? fabs(args[1].data.u.number) : 0;
+ num = (nargs > 1) ? fabs(njs_number(&args[1])) : 0;
for (i = 2; i < nargs; i++) {
- num = hypot(num, args[i].data.u.number);
+ num = hypot(num, njs_number(&args[i]));
if (num == INFINITY) {
break;
uint32_t a, b;
if (nargs > 2) {
- a = njs_number_to_uint32(args[1].data.u.number);
- b = njs_number_to_uint32(args[2].data.u.number);
+ a = njs_number_to_uint32(njs_number(&args[1]));
+ b = njs_number_to_uint32(njs_number(&args[2]));
num = (int32_t) (a * b);
double num;
if (nargs > 1) {
- num = log(args[1].data.u.number);
+ num = log(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = log10(args[1].data.u.number);
+ num = log10(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = log1p(args[1].data.u.number);
+ num = log1p(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
#if (NXT_SOLARIS)
/* On Solaris 10 log(-1) returns -Infinity. */
}
}
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
for (i = 2; i < nargs; i++) {
- num = fmax(num, args[i].data.u.number);
+ num = fmax(num, njs_number(&args[i]));
}
} else {
}
}
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
for (i = 2; i < nargs; i++) {
- num = fmin(num, args[i].data.u.number);
+ num = fmin(num, njs_number(&args[i]));
}
} else {
double num, base, exponent;
if (nargs > 2) {
- base = args[1].data.u.number;
- exponent = args[2].data.u.number;
+ base = njs_number(&args[1]);
+ exponent = njs_number(&args[2]);
/*
* According to ECMA-262:
double num;
if (nargs > 1) {
- num = round(args[1].data.u.number);
+ num = round(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
if (!isnan(num) && num != 0) {
num = signbit(num) ? -1 : 1;
double num;
if (nargs > 1) {
- num = sin(args[1].data.u.number);
+ num = sin(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = sinh(args[1].data.u.number);
+ num = sinh(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = sqrt(args[1].data.u.number);
+ num = sqrt(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = tan(args[1].data.u.number);
+ num = tan(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = tanh(args[1].data.u.number);
+ num = tanh(njs_number(&args[1]));
} else {
num = NAN;
double num;
if (nargs > 1) {
- num = trunc(args[1].data.u.number);
+ num = trunc(njs_number(&args[1]));
} else {
num = NAN;
num = NAN;
if (nxt_fast_path(njs_is_numeric(value))) {
- num = value->data.u.number;
+ num = njs_number(value);
} else if (njs_is_string(value)) {
num = njs_string_to_index(value);
const njs_value_t *value;
u_char buf[128];
- num = number->data.u.number;
+ num = njs_number(number);
if (isnan(num)) {
value = &njs_string_nan;
vm->retval.data.truth = 1;
} else {
- njs_set_number(&vm->retval, value->data.u.number);
+ njs_set_number(&vm->retval, njs_number(value));
}
return NXT_OK;
value = &njs_value_false;
if (nargs > 1 && njs_is_number(&args[1])) {
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
if (num == trunc(num) && !isinf(num)) {
value = &njs_value_true;
value = &njs_value_false;
if (nargs > 1 && njs_is_number(&args[1])) {
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
if (num == (int64_t) num && fabs(num) <= NJS_MAX_SAFE_INTEGER) {
value = &njs_value_true;
if (nargs > 1
&& njs_is_number(&args[1])
- && isnan(args[1].data.u.number))
+ && isnan(njs_number(&args[1])))
{
value = &njs_value_true;
}
}
if (nargs > 1) {
- radix = args[1].data.u.number;
+ radix = njs_number(&args[1]);
if (radix < 2 || radix > 36 || radix != (int) radix) {
njs_range_error(vm, NULL);
return NXT_ERROR;
}
- number = value->data.u.number;
+ number = njs_number(value);
if (radix != 10 && !isnan(number) && !isinf(number)) {
return njs_number_to_string_radix(vm, &vm->retval, number, radix);
value = &njs_value_true;
- if (nargs > 1 && !isnan(args[1].data.u.number)) {
+ if (nargs > 1 && !isnan(njs_number(&args[1]))) {
value = &njs_value_false;
}
value = &njs_value_false;
if (nargs > 1 && njs_is_number(&args[1])) {
- num = args[1].data.u.number;
+ num = njs_number(&args[1]);
if (!isnan(num) && !isinf(num)) {
value = &njs_value_true;
radix = 0;
if (nargs > 2) {
- radix = args[2].data.u.number;
+ radix = njs_number(&args[2]);
if (radix != 0) {
if (radix < 2 || radix > 36) {
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_number(value);
}
return njs_string_to_number(value, 1);
if (token == NJS_TOKEN_UNARY_NEGATION && node->token == NJS_TOKEN_NUMBER) {
/* Optimization of common negative number. */
- num = -node->u.value.data.u.number;
- node->u.value.data.u.number = num;
- node->u.value.data.truth = njs_is_number_true(num);
+ num = -njs_number(&node->u.value);
+ njs_set_number(&node->u.value, num);
return next;
}
return NJS_TOKEN_ERROR;
}
- node->u.value.data.u.number = num;
- node->u.value.type = NJS_NUMBER;
- node->u.value.data.truth = njs_is_number_true(num);
+ njs_set_number(&node->u.value, num);
break;
return NXT_ERROR;
}
- number->u.value.data.u.number = array->u.length;
- number->u.value.type = NJS_NUMBER;
- number->u.value.data.truth = (array->u.length != 0);
+ njs_set_number(&number->u.value, array->u.length);
ret = njs_parser_object_property(vm, parser, array, number, value);
if (nxt_slow_path(ret != NXT_OK)) {
start = 0;
if (nargs > 1) {
- start = args[1].data.u.number;
+ start = njs_number(&args[1]);
if (start < 0) {
start = 0;
end = length;
if (nargs > 2) {
- end = args[2].data.u.number;
+ end = njs_number(&args[2]);
if (end < 0) {
end = 0;
start = 0;
if (nargs > 1) {
- start = args[1].data.u.number;
+ start = njs_number(&args[1]);
if (start < length) {
if (start < 0) {
length -= start;
if (nargs > 2) {
- n = args[2].data.u.number;
+ n = njs_number(&args[2]);
if (n < 0) {
length = 0;
length = 1;
if (nargs > 1) {
- start = args[1].data.u.number;
+ start = njs_number(&args[1]);
if (start < 0 || start >= (ssize_t) slice.string_length) {
start = 0;
length = slice->string_length;
value = njs_arg(args, nargs, 1);
- start = value->data.u.number;
+ start = njs_number(value);
if (start < 0) {
start += length;
} else {
if (!njs_is_undefined(njs_arg(args, nargs, 2))) {
value = njs_arg(args, nargs, 2);
- end = value->data.u.number;
+ end = njs_number(value);
} else {
end = length;
index = 0;
if (nargs > 1) {
- index = args[1].data.u.number;
+ index = njs_number(&args[1]);
if (nxt_slow_path(index < 0 || index >= length)) {
num = NAN;
octet = array->start;
while (length != 0) {
- *p++ = (u_char) njs_number_to_uint32(octet->data.u.number);
+ *p++ = (u_char) njs_number_to_uint32(njs_number(octet));
octet++;
length--;
}
size = 0;
for (i = 1; i < nargs; i++) {
- num = args[i].data.u.number;
+ num = njs_number(&args[i]);
if (isnan(num)) {
goto range_error;
}
}
for (i = 1; i < nargs; i++) {
- p = nxt_utf8_encode(p, args[i].data.u.number);
+ p = nxt_utf8_encode(p, njs_number(&args[i]));
}
return NXT_OK;
index = 0;
if (nargs > 2) {
- index = args[2].data.u.number;
+ index = njs_number(&args[2]);
if (index < 0) {
index = 0;
goto done;
}
- pos = njs_arg(args, nargs, 2)->data.u.number;
+ pos = njs_number(njs_arg(args, nargs, 2));
if (isnan(pos)) {
index = NJS_STRING_MAX_LENGTH;
index = 0;
if (nargs > 2) {
- index = args[2].data.u.number;
+ index = njs_number(&args[2]);
if (index < 0) {
index = 0;
length = njs_string_prop(&string, &args[0]);
- index = (nargs > 2) ? args[2].data.u.number : -1;
+ index = (nargs > 2) ? njs_number(&args[2]) : -1;
if (starts) {
if (index < 0) {
max = (string.size > 1) ? NJS_STRING_MAX_LENGTH / string.size
: NJS_STRING_MAX_LENGTH;
- n = args[1].data.u.number;
+ n = njs_number(&args[1]);
if (nxt_slow_path(n < 0 || n >= max)) {
njs_range_error(vm, NULL);
static const njs_value_t string_space = njs_string(" ");
length = njs_string_prop(&string, &args[0]);
- new_length = nargs > 1 ? args[1].data.u.number : 0;
+ new_length = nargs > 1 ? njs_number(&args[1]) : 0;
if (new_length <= length) {
vm->retval = args[0];
if (nargs > 1) {
if (nargs > 2) {
- limit = args[2].data.u.number;
+ limit = njs_number(&args[2]);
if (limit == 0) {
goto done;
delay = 0;
if (!immediate && nargs >= 3 && njs_is_number(&args[2])) {
- delay = args[2].data.u.number;
+ delay = njs_number(&args[2]);
}
event = nxt_mp_alloc(vm->mem_pool, sizeof(njs_event_t));
}
p = nxt_sprintf(buf, buf + nxt_length(buf), "%uD",
- (unsigned) args[1].data.u.number);
+ (unsigned) njs_number(&args[1]));
lhq.key.start = buf;
lhq.key.length = p - buf;
}
/* Infinities are handled correctly by comparision. */
- return (val1->data.u.number == val2->data.u.number);
+ return (njs_number(val1) == njs_number(val2));
}
if (njs_is_string(val1)) {
double num;
if (nxt_fast_path(njs_is_numeric(value))) {
- num = value->data.u.number + 1.0;
+ num = njs_number(value) + 1.0;
njs_release(vm, reference);
double num;
if (nxt_fast_path(njs_is_numeric(value))) {
- num = value->data.u.number - 1.0;
+ num = njs_number(value) - 1.0;
njs_release(vm, reference);
double num;
if (nxt_fast_path(njs_is_numeric(value))) {
- num = value->data.u.number;
+ num = njs_number(value);
njs_release(vm, reference);
double num;
if (nxt_fast_path(njs_is_numeric(value))) {
- num = value->data.u.number;
+ num = njs_number(value);
njs_release(vm, reference);
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_set_number(&vm->retval, value->data.u.number);
+ njs_set_number(&vm->retval, njs_number(value));
return sizeof(njs_vmcode_2addr_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_set_number(&vm->retval, - value->data.u.number);
+ njs_set_number(&vm->retval, - njs_number(value));
return sizeof(njs_vmcode_2addr_t);
}
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num = val1->data.u.number + val2->data.u.number;
+ num = njs_number(val1) + njs_number(val2);
njs_set_number(&vm->retval, num);
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num = val1->data.u.number - val2->data.u.number;
+ num = njs_number(val1) - njs_number(val2);
njs_set_number(&vm->retval, num);
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num = val1->data.u.number * val2->data.u.number;
+ num = njs_number(val1) * njs_number(val2);
njs_set_number(&vm->retval, num);
return sizeof(njs_vmcode_3addr_t);
nxt_bool_t valid;
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- base = val1->data.u.number;
- exponent = val2->data.u.number;
+ base = njs_number(val1);
+ exponent = njs_number(val2);
/*
* According to ES7:
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num = val1->data.u.number / val2->data.u.number;
+ num = njs_number(val1) / njs_number(val2);
njs_set_number(&vm->retval, num);
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num = fmod(val1->data.u.number, val2->data.u.number);
+ num = fmod(njs_number(val1), njs_number(val2));
njs_set_number(&vm->retval, num);
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num1 = njs_number_to_int32(val1->data.u.number);
- num2 = njs_number_to_uint32(val2->data.u.number);
+ num1 = njs_number_to_int32(njs_number(val1));
+ num2 = njs_number_to_uint32(njs_number(val2));
njs_set_number(&vm->retval, num1 << (num2 & 0x1f));
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num1 = njs_number_to_int32(val1->data.u.number);
- num2 = njs_number_to_uint32(val2->data.u.number);
+ num1 = njs_number_to_int32(njs_number(val1));
+ num2 = njs_number_to_uint32(njs_number(val2));
njs_set_number(&vm->retval, num1 >> (num2 & 0x1f));
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num1 = njs_number_to_uint32(val1->data.u.number);
- num2 = njs_number_to_uint32(val2->data.u.number);
+ num1 = njs_number_to_uint32(njs_number(val1));
+ num2 = njs_number_to_uint32(njs_number(val2));
njs_set_number(&vm->retval, num1 >> (num2 & 0x1f));
return sizeof(njs_vmcode_3addr_t);
int32_t num;
if (nxt_fast_path(njs_is_numeric(value))) {
- num = njs_number_to_integer(value->data.u.number);
+ num = njs_number_to_integer(njs_number(value));
njs_set_number(&vm->retval, ~num);
return sizeof(njs_vmcode_2addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num1 = njs_number_to_integer(val1->data.u.number);
- num2 = njs_number_to_integer(val2->data.u.number);
+ num1 = njs_number_to_integer(njs_number(val1));
+ num2 = njs_number_to_integer(njs_number(val2));
njs_set_number(&vm->retval, num1 & num2);
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num1 = njs_number_to_integer(val1->data.u.number);
- num2 = njs_number_to_integer(val2->data.u.number);
+ num1 = njs_number_to_integer(njs_number(val1));
+ num2 = njs_number_to_integer(njs_number(val2));
njs_set_number(&vm->retval, num1 ^ num2);
return sizeof(njs_vmcode_3addr_t);
if (nxt_fast_path(njs_is_numeric(val1) && njs_is_numeric(val2))) {
- num1 = njs_number_to_uint32(val1->data.u.number);
- num2 = njs_number_to_uint32(val2->data.u.number);
+ num1 = njs_number_to_uint32(njs_number(val1));
+ num2 = njs_number_to_uint32(njs_number(val2));
njs_set_number(&vm->retval, num1 | num2);
return sizeof(njs_vmcode_3addr_t);
if (njs_is_numeric(val1) && njs_is_numeric(val2)) {
/* NaNs and Infinities are handled correctly by comparision. */
- return (val1->data.u.number == val2->data.u.number);
+ return (njs_number(val1) == njs_number(val2));
}
if (val1->type == val2->type) {
/* If "hv" is a string then "lv" can only be a numeric. */
if (njs_is_string(hv)) {
- return (lv->data.u.number == njs_string_to_number(hv, 0));
+ return (njs_number(lv) == njs_string_to_number(hv, 0));
}
/* "hv" is an object and "lv" is either a string or a numeric. */
if (nxt_fast_path(njs_is_primitive(val1) && njs_is_primitive(val2))) {
if (nxt_fast_path(njs_is_numeric(val1))) {
- num1 = val1->data.u.number;
+ num1 = njs_number(val1);
if (nxt_fast_path(njs_is_numeric(val2))) {
- num2 = val2->data.u.number;
+ num2 = njs_number(val2);
} else {
num2 = njs_string_to_number(val2, 0);
} else if (njs_is_numeric(val2)) {
num1 = njs_string_to_number(val1, 0);
- num2 = val2->data.u.number;
+ num2 = njs_number(val2);
} else {
return (njs_string_cmp(val1, val2) < 0) ? 1 : 0;
exit_value = njs_vmcode_operand(vm, try_start->exit_value);
njs_set_invalid(exit_value);
- exit_value->data.u.number = 0;
+ njs_number(exit_value) = 0;
return sizeof(njs_vmcode_try_start_t);
}
{
/* exit_value can contain valid value set by vmcode_try_return. */
if (!njs_is_valid(exit_value)) {
- exit_value->data.u.number = 1;
+ njs_number(exit_value) = 1;
}
return (njs_ret_t) offset;
njs_vmcode_try_continue(njs_vm_t *vm, njs_value_t *exit_value,
njs_value_t *offset)
{
- exit_value->data.u.number = -1;
+ njs_number(exit_value) = -1;
return (njs_ret_t) offset;
}
if (njs_is_valid(exit_value)) {
return njs_vmcode_return(vm, NULL, exit_value);
- } else if (exit_value->data.u.number != 0) {
- return (njs_ret_t) (exit_value->data.u.number > 0)
+ } else if (njs_number(exit_value) != 0) {
+ return (njs_ret_t) (njs_number(exit_value) > 0)
? finally->break_offset
: finally->continue_offset;
}
case NJS_BOOLEAN:
nxt_thread_log_debug("%p [%s]", index,
- (value->data.u.number == 0.0) ? "false" : "true");
+ (njs_number(value) == 0.0) ? "false" : "true");
return;
case NJS_NUMBER:
- nxt_thread_log_debug("%p [%f]", index, value->data.u.number);
+ nxt_thread_log_debug("%p [%f]", index, njs_number(value));
return;
case NJS_STRING: