From 7dba5d94203a19b12df71aae65286cbffae1e90c Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Mon, 25 Nov 2019 17:53:19 +0300 Subject: [PATCH] Added externals support in JSON.stringify(). --- src/njs_json.c | 10 +++------- src/test/njs_unit_test.c | 5 +++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/njs_json.c b/src/njs_json.c index 78ed12b4..95fd8294 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -1092,13 +1092,8 @@ njs_json_push_stringify_state(njs_vm_t *vm, njs_json_stringify_t *stringify, state->keys = njs_array(&stringify->replacer); } else { - if (njs_is_external(value)) { - state->keys = njs_extern_keys_array(vm, value->external.proto); - - } else { - state->keys = njs_value_own_enumerate(vm, value, NJS_ENUM_KEYS, - stringify->keys_type, 0); - } + state->keys = njs_value_own_enumerate(vm, value, NJS_ENUM_KEYS, + stringify->keys_type, 0); if (njs_slow_path(state->keys == NULL)) { return NULL; @@ -1129,6 +1124,7 @@ njs_json_pop_stringify_state(njs_json_stringify_t *stringify) #define njs_json_is_object(value) \ (((value)->type == NJS_OBJECT) \ || ((value)->type == NJS_OBJECT_SYMBOL) \ + || ((value)->type == NJS_EXTERNAL) \ || ((value)->type == NJS_ARRAY) \ || ((value)->type >= NJS_REGEXP)) diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 32c8c45f..a503432e 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -14317,8 +14317,9 @@ static njs_unit_test_t njs_test[] = { njs_str("var e = URIError('e'); e.foo = 'E'; JSON.stringify(e)"), njs_str("{\"foo\":\"E\"}") }, - { njs_str("JSON.stringify([$r])"), - njs_str("[null]") }, + { njs_str("var r = JSON.parse(JSON.stringify($r));" + "[r.uri, r.host, r.props.a, njs.dump(r.vars), njs.dump(r.consts), r.header['02']]"), + njs_str("АБВ,АБВГДЕЁЖЗИЙ,1,{},{},02|АБВ") }, { njs_str("JSON.stringify({get key() {throw new Error('Oops')}})"), njs_str("Error: Oops") }, -- 2.47.3