According to ES6 type conversion 7.1.4.
return njs_trap(vm, NJS_TRAP_NUMBER_ARG);
}
- start = (int32_t) njs_primitive_value_to_integer(njs_arg(args, nargs, 1));
+ start = njs_primitive_value_to_integer(njs_arg(args, nargs, 1));
length = njs_primitive_value_to_integer(&slice->length);
if (start < 0) {
} else {
if (!njs_is_undefined(njs_arg(args, nargs, 2))) {
- end = (int32_t) njs_primitive_value_to_integer(&args[2]);
+ end = njs_primitive_value_to_integer(&args[2]);
} else {
end = length;
}
-uint32_t
+int32_t
njs_primitive_value_to_integer(const njs_value_t *value)
{
return njs_number_to_integer(njs_primitive_value_to_number(value));
}
-nxt_noinline uint32_t
-njs_number_to_integer(double num)
+nxt_inline int64_t
+njs_number_to_int64(double num)
{
- int64_t i64;
-
#if (NXT_NAN_TO_UINT_CONVERSION != 0)
/*
* PPC32: NaN and Inf are converted to 0x8000000080000000
*/
if (fabs(num) > 9007199254740992.0) {
- i64 = fmod(num, 4294967296.0);
-
- } else {
- i64 = num;
+ return (int64_t) fmod(num, 4294967296.0);
}
- return (uint32_t) i64;
+ return (int64_t) num;
+}
+
+
+nxt_noinline int32_t
+njs_number_to_integer(double num)
+{
+ return (int32_t) njs_number_to_int64(num);
}
uint32_t njs_value_to_index(const njs_value_t *value);
double njs_primitive_value_to_number(const njs_value_t *value);
-uint32_t njs_primitive_value_to_integer(const njs_value_t *value);
+int32_t njs_primitive_value_to_integer(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);
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);
-nxt_noinline uint32_t njs_number_to_integer(double num);
+nxt_noinline int32_t njs_number_to_integer(double num);
nxt_inline nxt_int_t