Welcome! Log In Create A New Profile

Advanced

[njs] Improved njs.dump() with built-in functions.

Dmitry Volyntsev
August 21, 2020 09:10AM
details: https://hg.nginx.org/njs/rev/775c81dcbe61
branches:
changeset: 1500:775c81dcbe61
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Fri Aug 21 13:07:54 2020 +0000
description:
Improved njs.dump() with built-in functions.

diffstat:

src/njs_json.c | 22 ++++++++++++++++++++--
src/test/njs_unit_test.c | 14 ++++++++++++++
2 files changed, 34 insertions(+), 2 deletions(-)

diffs (63 lines):

diff -r 95ec4ee01853 -r 775c81dcbe61 src/njs_json.c
--- a/src/njs_json.c Fri Aug 21 13:07:48 2020 +0000
+++ b/src/njs_json.c Fri Aug 21 13:07:54 2020 +0000
@@ -1830,6 +1830,8 @@ njs_dump_terminal(njs_json_stringify_t *
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 *
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 -r 95ec4ee01853 -r 775c81dcbe61 src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Fri Aug 21 13:07:48 2020 +0000
+++ b/src/test/njs_unit_test.c Fri Aug 21 13:07:54 2020 +0000
@@ -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(
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Improved njs.dump() with built-in functions.

Dmitry Volyntsev 271 August 21, 2020 09:10AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 210
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready