From: Artem S. Povalyukhin Date: Mon, 24 Jun 2019 21:06:12 +0000 (+0300) Subject: Added signed zero support in njs.dump(). X-Git-Tag: 0.3.3~1 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=3dc999ea05878ef97af7dbf6c20cace5726d7028;p=njs.git Added signed zero support in njs.dump(). This closes #184 issue on Github. --- diff --git a/njs/njs_json.c b/njs/njs_json.c index ea1d63b2..5358fd22 100644 --- a/njs/njs_json.c +++ b/njs/njs_json.c @@ -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: diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index f62c6589..99c951ea 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -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(