From: Dmitry Volyntsev Date: Thu, 8 Aug 2019 11:19:55 +0000 (+0300) Subject: Added support for accessor property descriptors in njs.dump(). X-Git-Tag: 0.3.4~10 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=b494cb3c18bc81edba059b5ac6c749935af5d6e1;p=njs.git Added support for accessor property descriptors in njs.dump(). --- diff --git a/src/njs_json.c b/src/njs_json.c index facf82a5..2092d953 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -2381,6 +2381,10 @@ njs_vm_value_dump(njs_vm_t *vm, njs_str_t *retval, const njs_value_t *value, 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_t *retval, const njs_value_t *value, 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 --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 8b791e5e..8de40a91 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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("[,'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\"]}}") },