From: Dmitry Volyntsev Date: Fri, 21 Aug 2020 13:07:54 +0000 (+0000) Subject: Improved njs.dump() with built-in functions. X-Git-Tag: 0.4.4~31 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=592296d219686ae497c50df7503a307cfa6f2289;p=njs.git Improved njs.dump() with built-in functions. --- diff --git a/src/njs_json.c b/src/njs_json.c index 24a18e2a..80e10cf8 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -1830,6 +1830,8 @@ njs_dump_terminal(njs_json_stringify_t *stringify, njs_chb_t *chain, njs_typed_array_t *array; njs_string_prop_t string; + static const njs_value_t name_string = njs_string("name"); + njs_int_t (*to_string)(njs_vm_t *, njs_value_t *, const njs_value_t *); switch (value->type) { @@ -1933,8 +1935,24 @@ njs_dump_terminal(njs_json_stringify_t *stringify, njs_chb_t *chain, break; case NJS_FUNCTION: - if (njs_function(value)->native) { - njs_chb_append_literal(chain, "[Function: native]"); + ret = njs_value_property(stringify->vm, value, + njs_value_arg(&name_string), &tag); + if (njs_slow_path(ret == NJS_ERROR)) { + return ret; + } + + if (njs_is_string(&tag)) { + njs_string_get(&tag, &str); + + } else if (njs_function(value)->native) { + str = njs_str_value("native"); + + } else { + str = njs_str_value(""); + } + + if (str.length != 0) { + njs_chb_sprintf(chain, 32 + str.length, "[Function: %V]", &str); } else { njs_chb_append_literal(chain, "[Function]"); diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index f8ed01a9..eac1e8f8 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -16747,6 +16747,20 @@ static njs_unit_test_t njs_test[] = { njs_str("njs.dump(Object(Symbol.iterator))"), njs_str("[Symbol: Symbol(Symbol.iterator)]") }, + { njs_str("njs.dump(decodeURI)"), + njs_str("[Function: decodeURI]") }, + + { njs_str("delete decodeURI.name; njs.dump(decodeURI)"), + njs_str("[Function]") }, + + { njs_str("delete decodeURI.name; delete Function.prototype.name; " + "decodeURI.name = 1; njs.dump(decodeURI)"), + njs_str("[Function: native]") }, + + { njs_str("delete decodeURI.name; delete Function.prototype.name; " + "decodeURI.name = 'XXX'; njs.dump(decodeURI)"), + njs_str("[Function: XXX]") }, + /* Built-in methods name. */ { njs_str(