Created
February 11, 2019 17:57
-
-
Save xeioex/11395b51a23b4c8344a86bfcb4f4110d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/njs/njs.c b/njs/njs.c | |
| --- a/njs/njs.c | |
| +++ b/njs/njs.c | |
| @@ -339,8 +339,9 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ | |
| nvm->variables_hash = vm->variables_hash; | |
| nvm->values_hash = vm->values_hash; | |
| + | |
| + nvm->modules = vm->modules; | |
| nvm->modules_hash = vm->modules_hash; | |
| - nvm->modules_list = vm->modules_list; | |
| nvm->externals_hash = vm->externals_hash; | |
| nvm->external_prototypes_hash = vm->external_prototypes_hash; | |
| @@ -588,7 +589,7 @@ njs_vm_start(njs_vm_t *vm) | |
| { | |
| njs_ret_t ret; | |
| - ret = njs_module_invoke(vm); | |
| + ret = njs_module_load(vm); | |
| if (nxt_slow_path(ret != NXT_OK)) { | |
| return ret; | |
| } | |
| diff --git a/njs/njs_module.c b/njs/njs_module.c | |
| --- a/njs/njs_module.c | |
| +++ b/njs/njs_module.c | |
| @@ -23,20 +23,20 @@ static njs_module_t *njs_module_add(njs_ | |
| nxt_int_t | |
| -njs_module_invoke(njs_vm_t *vm) | |
| +njs_module_load(njs_vm_t *vm) | |
| { | |
| nxt_int_t ret; | |
| nxt_uint_t i; | |
| njs_value_t *value; | |
| njs_module_t **item, *module; | |
| - if (vm->modules_list == NULL) { | |
| + if (vm->modules == NULL) { | |
| return NXT_OK; | |
| } | |
| - item = vm->modules_list->start; | |
| + item = vm->modules->start; | |
| - for (i = 0; i < vm->modules_list->items; i++) { | |
| + for (i = 0; i < vm->modules->items; i++) { | |
| module = *item; | |
| if (module->function.native) { | |
| @@ -81,17 +81,16 @@ njs_parser_module(njs_vm_t *vm, njs_pars | |
| prev = parser->lexer; | |
| - nxt_memzero(&lexer, sizeof(njs_lexer_t)); | |
| - | |
| nxt_memzero(&body, sizeof(nxt_str_t)); | |
| ret = njs_module_read(vm, parser, name, &file, &body); | |
| if (nxt_slow_path(ret != NXT_OK)) { | |
| - njs_parser_syntax_error(vm, parser, | |
| - "Cannot find module \"%V\"", name); | |
| + njs_parser_syntax_error(vm, parser, "Cannot find module \"%V\"", name); | |
| goto fail; | |
| } | |
| + nxt_memzero(&lexer, sizeof(njs_lexer_t)); | |
| + | |
| lexer.file = file; | |
| lexer.start = body.start; | |
| lexer.end = body.start + body.length; | |
| @@ -117,7 +116,7 @@ njs_parser_module(njs_vm_t *vm, njs_pars | |
| module->function.u.lambda = parser->node->u.value.data.u.lambda; | |
| - free(body.start); | |
| + nxt_mp_free(vm->mem_pool, body.start); | |
| parser->lexer = prev; | |
| @@ -132,23 +131,21 @@ found: | |
| if (module->index == 0) { | |
| scope = njs_parser_global_scope(vm); | |
| - module->index = njs_scope_next_index(vm, scope, | |
| - NJS_SCOPE_INDEX_LOCAL, | |
| + module->index = njs_scope_next_index(vm, scope, NJS_SCOPE_INDEX_LOCAL, | |
| &njs_value_void); | |
| if (nxt_slow_path(module->index == NJS_INDEX_ERROR)) { | |
| return NJS_TOKEN_ERROR; | |
| } | |
| - if (vm->modules_list == NULL) { | |
| - vm->modules_list = nxt_array_create(4, sizeof(njs_module_t *), | |
| - &njs_array_mem_proto, | |
| - vm->mem_pool); | |
| - if (nxt_slow_path(vm->modules_list == NULL)) { | |
| + if (vm->modules == NULL) { | |
| + vm->modules = nxt_array_create(4, sizeof(njs_module_t *), | |
| + &njs_array_mem_proto, vm->mem_pool); | |
| + if (nxt_slow_path(vm->modules == NULL)) { | |
| return NJS_TOKEN_ERROR; | |
| } | |
| } | |
| - value = nxt_array_add(vm->modules_list, &njs_array_mem_proto, vm->mem_pool); | |
| + value = nxt_array_add(vm->modules, &njs_array_mem_proto, vm->mem_pool); | |
| if (nxt_slow_path(value == NULL)) { | |
| return NJS_TOKEN_ERROR; | |
| } | |
| @@ -165,7 +162,7 @@ found: | |
| fail: | |
| if (body.start != NULL) { | |
| - free(body.start); | |
| + nxt_mp_free(vm->mem_pool, body.start); | |
| } | |
| parser->lexer = prev; | |
| @@ -174,6 +171,9 @@ fail: | |
| } | |
| +#define NJS_MODULE_START "function() {" | |
| +#define NJS_MODULE_END "}" | |
| + | |
| static nxt_int_t | |
| njs_module_read(njs_vm_t *vm, njs_parser_t *parser, nxt_str_t *name, | |
| nxt_str_t *source, nxt_str_t *body) | |
| @@ -195,7 +195,7 @@ njs_module_read(njs_vm_t *vm, njs_parser | |
| source->start = (u_char *) file; | |
| source->length = strlen(file); | |
| - body->length = nxt_length(NJS_MODULE_BODY_START); | |
| + body->length = nxt_length(NJS_MODULE_START); | |
| fd = open(file, O_RDONLY); | |
| if (fd == -1) { | |
| @@ -210,15 +210,14 @@ njs_module_read(njs_vm_t *vm, njs_parser | |
| body->length += sb.st_size; | |
| } | |
| - body->length += nxt_length(NJS_MODULE_BODY_END); | |
| + body->length += nxt_length(NJS_MODULE_END); | |
| - body->start = malloc(body->length); | |
| + body->start = nxt_mp_alloc(vm->mem_pool, body->length); | |
| if (body->start == NULL) { | |
| goto fail; | |
| } | |
| - p = nxt_cpymem(body->start, NJS_MODULE_BODY_START, | |
| - nxt_length(NJS_MODULE_BODY_START)); | |
| + p = nxt_cpymem(body->start, NJS_MODULE_START, nxt_length(NJS_MODULE_START)); | |
| n = read(fd, p, sb.st_size); | |
| @@ -232,7 +231,7 @@ njs_module_read(njs_vm_t *vm, njs_parser | |
| p += n; | |
| - memcpy(p, NJS_MODULE_BODY_END, nxt_length(NJS_MODULE_BODY_END)); | |
| + memcpy(p, NJS_MODULE_END, nxt_length(NJS_MODULE_END)); | |
| close(fd); | |
| @@ -241,7 +240,7 @@ njs_module_read(njs_vm_t *vm, njs_parser | |
| fail: | |
| if (body->start != NULL) { | |
| - free(body->start); | |
| + nxt_mp_free(vm->mem_pool, body->start); | |
| } | |
| close(fd); | |
| @@ -309,7 +308,6 @@ njs_module_add(njs_vm_t *vm, njs_parser_ | |
| if (nxt_fast_path(ret != NXT_OK)) { | |
| nxt_mp_free(vm->mem_pool, module); | |
| - njs_type_error(vm, "lvlhsh insert failed"); | |
| return NULL; | |
| } | |
| diff --git a/njs/njs_module.h b/njs/njs_module.h | |
| --- a/njs/njs_module.h | |
| +++ b/njs/njs_module.h | |
| @@ -16,11 +16,7 @@ typedef struct { | |
| } njs_module_t; | |
| -#define NJS_MODULE_BODY_START "function() {" | |
| -#define NJS_MODULE_BODY_END "}" | |
| - | |
| - | |
| -nxt_int_t njs_module_invoke(njs_vm_t *vm); | |
| +nxt_int_t njs_module_load(njs_vm_t *vm); | |
| njs_token_t njs_parser_module(njs_vm_t *vm, njs_parser_t *parser); | |
| njs_ret_t njs_module_require(njs_vm_t *vm, njs_value_t *args, | |
| nxt_uint_t nargs, njs_index_t unused); | |
| diff --git a/njs/njs_parser.c b/njs/njs_parser.c | |
| --- a/njs/njs_parser.c | |
| +++ b/njs/njs_parser.c | |
| @@ -680,12 +680,7 @@ njs_parser_lambda(njs_vm_t *vm, njs_pars | |
| } | |
| } | |
| - token = njs_parser_token(parser); | |
| - if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) { | |
| - return token; | |
| - } | |
| - | |
| - return token; | |
| + return njs_parser_token(parser); | |
| } | |
| @@ -2031,7 +2026,7 @@ njs_parser_module_lambda(njs_vm_t *vm, n | |
| return NJS_TOKEN_ERROR; | |
| } | |
| - parent->right = njs_parser_chain_top(parser);; | |
| + parent->right = njs_parser_chain_top(parser); | |
| parser->node = parent; | |
| diff --git a/njs/njs_vm.h b/njs/njs_vm.h | |
| --- a/njs/njs_vm.h | |
| +++ b/njs/njs_vm.h | |
| @@ -1039,8 +1039,9 @@ struct njs_vm_s { | |
| nxt_lvlhsh_t variables_hash; | |
| nxt_lvlhsh_t values_hash; | |
| + | |
| + nxt_array_t *modules; | |
| nxt_lvlhsh_t modules_hash; | |
| - nxt_array_t *modules_list; | |
| uint32_t event_id; | |
| nxt_lvlhsh_t events_hash; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment