]> git.kaiwu.me - njs.git/commitdiff
Added externals support in JSON.stringify().
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 25 Nov 2019 14:53:19 +0000 (17:53 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Mon, 25 Nov 2019 14:53:19 +0000 (17:53 +0300)
src/njs_json.c
src/test/njs_unit_test.c

index 78ed12b4a8c6dd254d83a866d659bf8f44d903b7..95fd82942a733d8f5401131d307b0a789b2fedba 100644 (file)
@@ -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))
 
index 32c8c45f1e7d251f103f7d6c475b133d1c1a6c12..a503432e7a47e4bbeb99f378700d7c2cc5dfa109 100644 (file)
@@ -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") },