[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