From: Dmitry Volyntsev Date: Fri, 29 Apr 2022 00:49:59 +0000 (-0700) Subject: Optimising JSON.parse() for large objects. X-Git-Tag: 0.7.4~18 X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=e5dd15b288a1682dc38efcf258dd2aa2332c9a7c;p=njs.git Optimising JSON.parse() for large objects. --- diff --git a/src/njs_json.c b/src/njs_json.c index d028e710..344326d1 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -877,8 +877,14 @@ njs_json_push_parse_state(njs_vm_t *vm, njs_json_parse_t *parse, njs_inline njs_json_state_t * -njs_json_pop_parse_state(njs_json_parse_t *parse) +njs_json_pop_parse_state(njs_vm_t *vm, njs_json_parse_t *parse) { + njs_json_state_t *state; + + state = &parse->states[parse->depth - 1]; + njs_array_destroy(vm, state->keys); + state->keys = NULL; + if (parse->depth > 1) { parse->depth--; return &parse->states[parse->depth - 1]; @@ -956,7 +962,7 @@ njs_json_parse_iterator(njs_vm_t *vm, njs_json_parse_t *parse, } } else { - state = njs_json_pop_parse_state(parse); + state = njs_json_pop_parse_state(vm, parse); if (state == NULL) { vm->retval = parse->retval; return NJS_OK;