From: Dmitry Volyntsev Date: Mon, 14 Feb 2022 14:10:59 +0000 (+0000) Subject: Introduced njs_parser_init(). X-Git-Tag: 0.7.3~9 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=3efcecc9efd00cfacf9bc110f94f61ad416072e4;p=njs.git Introduced njs_parser_init(). --- diff --git a/src/njs_function.c b/src/njs_function.c index b891c5f1..c07f55c4 100644 --- a/src/njs_function.c +++ b/src/njs_function.c @@ -1103,7 +1103,6 @@ njs_function_constructor(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_int_t ret; njs_str_t str, file; njs_uint_t i; - njs_lexer_t lexer; njs_parser_t parser; njs_vm_code_t *code; njs_function_t *function; @@ -1171,16 +1170,12 @@ njs_function_constructor(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, file = njs_str_value("runtime"); - ret = njs_lexer_init(vm, &lexer, &file, str.start, str.start + str.length, - 1); + ret = njs_parser_init(vm, &parser, NULL, &file, str.start, + str.start + str.length, 1); if (njs_slow_path(ret != NJS_OK)) { return ret; } - njs_memzero(&parser, sizeof(njs_parser_t)); - - parser.lexer = &lexer; - ret = njs_parser(vm, &parser); if (njs_slow_path(ret != NJS_OK)) { return ret; diff --git a/src/njs_parser.c b/src/njs_parser.c index 9bfbf240..bfd0e9e7 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -518,6 +518,33 @@ njs_parser_reject(njs_parser_t *parser) } +njs_int_t +njs_parser_init(njs_vm_t *vm, njs_parser_t *parser, njs_parser_scope_t *scope, + njs_str_t *file, u_char *start, u_char *end, njs_uint_t runtime) +{ + njs_lexer_t *lexer; + + njs_memzero(parser, sizeof(njs_parser_t)); + + parser->scope = scope; + + lexer = &parser->lexer0; + parser->lexer = lexer; + + lexer->file = *file; + lexer->start = start; + lexer->end = end; + lexer->line = 1; + lexer->keywords_hash = (runtime) ? &vm->keywords_hash + : &vm->shared->keywords_hash; + lexer->mem_pool = vm->mem_pool; + + njs_queue_init(&lexer->preread); + + return NJS_OK; +} + + njs_int_t njs_parser(njs_vm_t *vm, njs_parser_t *parser) { diff --git a/src/njs_parser.h b/src/njs_parser.h index 2e1f23bc..15c01c7e 100644 --- a/src/njs_parser.h +++ b/src/njs_parser.h @@ -74,6 +74,7 @@ typedef njs_int_t (*njs_parser_state_func_t)(njs_parser_t *parser, struct njs_parser_s { njs_parser_state_func_t state; njs_queue_t stack; + njs_lexer_t lexer0; njs_lexer_t *lexer; njs_vm_t *vm; njs_parser_node_t *node; @@ -119,6 +120,9 @@ njs_int_t njs_parser_failed_state(njs_parser_t *parser, intptr_t njs_parser_scope_rbtree_compare(njs_rbtree_node_t *node1, njs_rbtree_node_t *node2); +njs_int_t njs_parser_init(njs_vm_t *vm, njs_parser_t *parser, + njs_parser_scope_t *scope, njs_str_t *file, u_char *start, u_char *end, + njs_uint_t runtime); njs_int_t njs_parser(njs_vm_t *vm, njs_parser_t *parser); njs_int_t njs_parser_module_lambda(njs_parser_t *parser, diff --git a/src/njs_vm.c b/src/njs_vm.c index 0c75fff7..86bce1a8 100644 --- a/src/njs_vm.c +++ b/src/njs_vm.c @@ -143,27 +143,21 @@ njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end) njs_str_t ast; njs_chb_t chain; njs_value_t **global, **new; - njs_lexer_t lexer; njs_parser_t parser; njs_vm_code_t *code; njs_generator_t generator; njs_parser_scope_t *scope; - njs_memzero(&parser, sizeof(njs_parser_t)); - - parser.scope = vm->global_scope; - - if (parser.scope != NULL && vm->modules != NULL) { + if (vm->modules != NULL) { njs_module_reset(vm); } - ret = njs_lexer_init(vm, &lexer, &vm->options.file, *start, end, 0); + ret = njs_parser_init(vm, &parser, vm->global_scope, &vm->options.file, + *start, end, 0); if (njs_slow_path(ret != NJS_OK)) { return NJS_ERROR; } - parser.lexer = &lexer; - ret = njs_parser(vm, &parser); if (njs_slow_path(ret != NJS_OK)) { return NJS_ERROR; @@ -186,7 +180,7 @@ njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end) njs_mp_free(vm->mem_pool, ast.start); } - *start = lexer.start; + *start = parser.lexer->start; scope = parser.scope; ret = njs_generator_init(&generator, 0, 0);