]> git.kaiwu.me - njs.git/commitdiff
Added signed zero support in njs.dump().
authorArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Mon, 24 Jun 2019 21:06:12 +0000 (00:06 +0300)
committerArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Mon, 24 Jun 2019 21:06:12 +0000 (00:06 +0300)
This closes #184 issue on Github.

njs/njs_json.c
njs/test/njs_unit_test.c

index ea1d63b2ca1616b208ed86f112ec5403d83cf9ac..5358fd22219ee3c69d1be6817c7342ec45f48389 100644 (file)
@@ -2166,6 +2166,14 @@ njs_dump_value(njs_json_stringify_t *stringify, const njs_value_t *value,
     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)))
+        {
+
+            njs_dump("[Number: -0]");
+            break;
+        }
+
         ret = njs_number_to_string(stringify->vm, &str_val, value);
         if (nxt_slow_path(ret != NXT_OK)) {
             return NXT_ERROR;
@@ -2273,6 +2281,16 @@ njs_dump_value(njs_json_stringify_t *stringify, const njs_value_t *value,
         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)))
+        {
+
+            njs_dump("-0");
+            break;
+        }
+
+        /* Fall through. */
+
     case NJS_REGEXP:
     case NJS_DATE:
     case NJS_OBJECT_ERROR:
index f62c6589c518b0f5169f34b050006bfb14ca3901..99c951ea428941fc391e3ad0306345effbec91bb 100644 (file)
@@ -12470,6 +12470,15 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("njs.dump(njs) == `{version:'${njs.version}'}`"),
       nxt_string("true") },
 
+    { nxt_string("njs.dump(-0)"),
+      nxt_string("-0") },
+
+    { nxt_string("njs.dump(Object(-0))"),
+      nxt_string("[Number: -0]") },
+
+    { nxt_string("njs.dump([0, -0])"),
+      nxt_string("[0,-0]") },
+
     /* Built-in methods name. */
 
     { nxt_string(