[njs] Added support for accessor property descriptors in njs.dump().
Dmitry Volyntsev
xeioex at nginx.com
Thu Aug 8 11:20:11 UTC 2019
details: https://hg.nginx.org/njs/rev/fd09c657f97d
branches:
changeset: 1117:fd09c657f97d
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Thu Aug 08 14:19:55 2019 +0300
description:
Added support for accessor property descriptors in njs.dump().
diffstat:
src/njs_json.c | 17 +++++++++++++++++
src/test/njs_unit_test.c | 9 +++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
diffs (53 lines):
diff -r 6caf4d7c0846 -r fd09c657f97d src/njs_json.c
--- a/src/njs_json.c Thu Aug 08 14:19:54 2019 +0300
+++ b/src/njs_json.c Thu Aug 08 14:19:55 2019 +0300
@@ -2381,6 +2381,10 @@ njs_vm_value_dump(njs_vm_t *vm, njs_str_
njs_lvlhsh_query_t lhq;
njs_json_stringify_t *stringify;
+ const njs_value_t string_get = njs_string("[Getter]");
+ const njs_value_t string_set = njs_string("[Setter]");
+ const njs_value_t string_get_set = njs_long_string("[Getter/Setter]");
+
if (njs_vm_backtrace(vm) != NULL) {
goto exception;
}
@@ -2486,6 +2490,19 @@ njs_vm_value_dump(njs_vm_t *vm, njs_str_
if (prop->type == NJS_WHITEOUT || !prop->enumerable) {
break;
}
+
+ if (njs_is_accessor_descriptor(prop)) {
+ if (njs_is_defined(&prop->getter)) {
+ if (njs_is_defined(&prop->setter)) {
+ val = njs_value_arg(&string_get_set);
+ } else {
+ val = njs_value_arg(&string_get);
+ }
+
+ } else {
+ val = njs_value_arg(&string_set);
+ }
+ }
}
if (state->written) {
diff -r 6caf4d7c0846 -r fd09c657f97d src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Thu Aug 08 14:19:54 2019 +0300
+++ b/src/test/njs_unit_test.c Thu Aug 08 14:19:55 2019 +0300
@@ -12893,6 +12893,15 @@ static njs_unit_test_t njs_test[] =
{ njs_str("njs.dump(Array.prototype.slice.call({'1':'b', length:2}))"),
njs_str("[<empty>,'b']") },
+ { njs_str("var o = Object.defineProperty({}, 'a', { get: () => 1, enumerable: true }); njs.dump(o)"),
+ njs_str("{a:'[Getter]'}") },
+
+ { njs_str("var o = Object.defineProperty({}, 'a', { get: () => 1, set(){}, enumerable: true }); njs.dump(o)"),
+ njs_str("{a:'[Getter/Setter]'}") },
+
+ { njs_str("var o = Object.defineProperty({}, 'a', { set(){}, enumerable: true }); njs.dump(o)"),
+ njs_str("{a:'[Setter]'}") },
+
{ njs_str("njs.dump($r.props)"),
njs_str("{a:{type:\"property\",props:[\"getter\"]},b:{type:\"property\",props:[\"getter\"]}}") },
More information about the nginx-devel
mailing list