From e5dd15b288a1682dc38efcf258dd2aa2332c9a7c Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Thu, 28 Apr 2022 17:49:59 -0700 Subject: [PATCH] Optimising JSON.parse() for large objects. --- src/njs_json.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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; -- 2.47.3