const njs_value_t njs_string_false = njs_string("false");
const njs_value_t njs_string_true = njs_string("true");
const njs_value_t njs_string_number = njs_string("number");
+const njs_value_t njs_string_minus_zero = njs_string("-0");
const njs_value_t njs_string_minus_infinity =
njs_string("-Infinity");
const njs_value_t njs_string_plus_infinity =
}
}
- ret = njs_primitive_value_to_string(vm, &value, &value);
+ if (nxt_slow_path((value.type == NJS_NUMBER
+ && value.data.u.number == 0
+ && signbit(value.data.u.number))))
+ {
+ value = njs_string_minus_zero;
+ ret = NXT_OK;
+
+ } else {
+ ret = njs_primitive_value_to_string(vm, &value, &value);
+ }
if (nxt_fast_path(ret == NXT_OK)) {
size = value.short_string.size;
extern const njs_value_t njs_string_false;
extern const njs_value_t njs_string_true;
extern const njs_value_t njs_string_native;
+extern const njs_value_t njs_string_minus_zero;
extern const njs_value_t njs_string_minus_infinity;
extern const njs_value_t njs_string_plus_infinity;
extern const njs_value_t njs_string_nan;
{ nxt_string("1 + 1 + '2' + 1 + 1"),
nxt_string("2211") },
+ { nxt_string("'gg' + -0"),
+ nxt_string("gg0") },
+
{ nxt_string("1.2 - '5.7'"),
nxt_string("-4.5") },
{ nxt_string("JSON.stringify(123)"),
nxt_string("123") },
+ { nxt_string("JSON.stringify(-0)"),
+ nxt_string("0") },
+
{ nxt_string("JSON.stringify(0.00000123)"),
nxt_string("0.00000123") },
minus = 0;
p = start;
- if (signbit(value)) {
- *p++ = '-';
- value = -value;
- minus = 1;
- }
-
if (value == 0) {
*p++ = '0';
return (p - start);
}
+ if (signbit(value)) {
+ *p++ = '-';
+ value = -value;
+ minus = 1;
+ }
+
length = nxt_grisu2(value, p, &dec_exp);
length = nxt_prettify(p, length, dec_exp);