details: https://hg.nginx.org/njs/rev/e4cef2c70d7c branches: changeset: 2054:e4cef2c70d7c user: Dmitry Volyntsev <xei...@nginx.com> date: Mon Feb 27 22:14:36 2023 -0800 description: Fixed array instance with a getter property dumping.
This closes #618 issue on Github. diffstat: src/njs_json.c | 40 +++++++++++++++++++--------------------- src/test/njs_unit_test.c | 3 +++ 2 files changed, 22 insertions(+), 21 deletions(-) diffs (68 lines): diff -r 1aa137411b09 -r e4cef2c70d7c src/njs_json.c --- a/src/njs_json.c Mon Feb 27 22:14:34 2023 -0800 +++ b/src/njs_json.c Mon Feb 27 22:14:36 2023 -0800 @@ -2085,32 +2085,30 @@ njs_vm_value_dump(njs_vm_t *vm, njs_str_ val = njs_prop_value(prop); - if (!state->fast_array) { - if (prop->type == NJS_PROPERTY_HANDLER) { - pq.scratch = *prop; - prop = &pq.scratch; - ret = njs_prop_handler(prop)(vm, prop, &state->value, NULL, - njs_prop_value(prop)); - - if (njs_slow_path(ret == NJS_ERROR)) { - return ret; - } - - val = njs_prop_value(prop); + if (prop->type == NJS_PROPERTY_HANDLER) { + pq.scratch = *prop; + prop = &pq.scratch; + ret = njs_prop_handler(prop)(vm, prop, &state->value, NULL, + njs_prop_value(prop)); + + if (njs_slow_path(ret == NJS_ERROR)) { + return ret; } - if (njs_is_accessor_descriptor(prop)) { - if (njs_prop_getter(prop) != NULL) { - if (njs_prop_setter(prop) != NULL) { - val = njs_value_arg(&string_get_set); - - } else { - val = njs_value_arg(&string_get); - } + val = njs_prop_value(prop); + } + + if (njs_is_accessor_descriptor(prop)) { + if (njs_prop_getter(prop) != NULL) { + if (njs_prop_setter(prop) != NULL) { + val = njs_value_arg(&string_get_set); } else { - val = njs_value_arg(&string_set); + val = njs_value_arg(&string_get); } + + } else { + val = njs_value_arg(&string_set); } } diff -r 1aa137411b09 -r e4cef2c70d7c src/test/njs_unit_test.c --- a/src/test/njs_unit_test.c Mon Feb 27 22:14:34 2023 -0800 +++ b/src/test/njs_unit_test.c Mon Feb 27 22:14:36 2023 -0800 @@ -22852,6 +22852,9 @@ static njs_unit_test_t njs_shell_test[] { njs_str("var e = Error(); e.name = {}; e" ENTER), njs_str("[object Object]") }, + { njs_str("var a = []; Object.defineProperty(a, 'b', {enumerable: true, get: Object}); a" ENTER), + njs_str("[\n b: '[Getter]'\n]") }, + /* Temporary indexes */ { njs_str("var a = [1,2,3], i; for (i in a) {Object.seal({});}" ENTER), _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel