details: https://hg.nginx.org/njs/rev/dcc7965410bd branches: changeset: 827:dcc7965410bd user: Dmitry Volyntsev <xei...@nginx.com> date: Tue Mar 12 19:28:11 2019 +0300 description: Reporting file name and function name in disassembler output.
diffstat: njs/njs.c | 2 +- njs/njs_disassembler.c | 2 ++ njs/njs_generator.c | 16 ++++++++++------ njs/njs_generator.h | 2 +- njs/njs_vm.c | 19 ++++++++++--------- njs/njs_vm.h | 7 +++++++ 6 files changed, 31 insertions(+), 17 deletions(-) diffs (192 lines): diff -r 49f4eb5afc9b -r dcc7965410bd njs/njs.c --- a/njs/njs.c Mon Mar 11 18:31:40 2019 +0300 +++ b/njs/njs.c Tue Mar 12 19:28:11 2019 +0300 @@ -271,7 +271,7 @@ njs_vm_compile(njs_vm_t *vm, u_char **st nxt_memzero(&generator, sizeof(njs_generator_t)); - ret = njs_generate_scope(vm, &generator, scope); + ret = njs_generate_scope(vm, &generator, scope, &njs_entry_main); if (nxt_slow_path(ret != NXT_OK)) { goto fail; } diff -r 49f4eb5afc9b -r dcc7965410bd njs/njs_disassembler.c --- a/njs/njs_disassembler.c Mon Mar 11 18:31:40 2019 +0300 +++ b/njs/njs_disassembler.c Tue Mar 12 19:28:11 2019 +0300 @@ -139,6 +139,8 @@ njs_disassembler(njs_vm_t *vm) n = vm->code->items; while (n != 0) { + printf("%.*s:%.*s\n", (int) code->file.length, code->file.start, + (int) code->name.length, code->name.start); njs_disassemble(code->start, code->end); code++; n--; diff -r 49f4eb5afc9b -r dcc7965410bd njs/njs_generator.c --- a/njs/njs_generator.c Mon Mar 11 18:31:40 2019 +0300 +++ b/njs/njs_generator.c Tue Mar 12 19:28:11 2019 +0300 @@ -138,7 +138,8 @@ static nxt_int_t njs_generate_inc_dec_op static nxt_int_t njs_generate_function_declaration(njs_vm_t *vm, njs_generator_t *generator, njs_parser_node_t *node); static nxt_int_t njs_generate_function_scope(njs_vm_t *vm, - njs_function_lambda_t *lambda, njs_parser_node_t *node); + njs_function_lambda_t *lambda, njs_parser_node_t *node, + const nxt_str_t *name); static nxt_int_t njs_generate_argument_closures(njs_vm_t *vm, njs_generator_t *generator, njs_parser_node_t *node); static nxt_int_t njs_generate_return_statement(njs_vm_t *vm, @@ -1913,7 +1914,7 @@ njs_generate_function(njs_vm_t *vm, njs_ lambda = node->u.value.data.u.lambda; - ret = njs_generate_function_scope(vm, lambda, node); + ret = njs_generate_function_scope(vm, lambda, node, &njs_entry_anonymous); if (nxt_slow_path(ret != NXT_OK)) { return ret; @@ -2269,7 +2270,8 @@ njs_generate_function_declaration(njs_vm lambda = var->value.data.u.function->u.lambda; - ret = njs_generate_function_scope(vm, lambda, node); + ret = njs_generate_function_scope(vm, lambda, node, + &node->u.reference.name); if (nxt_slow_path(ret != NXT_OK)) { return ret; } @@ -2284,7 +2286,7 @@ njs_generate_function_declaration(njs_vm static nxt_int_t njs_generate_function_scope(njs_vm_t *vm, njs_function_lambda_t *lambda, - njs_parser_node_t *node) + njs_parser_node_t *node, const nxt_str_t *name) { size_t size; nxt_int_t ret; @@ -2295,7 +2297,7 @@ njs_generate_function_scope(njs_vm_t *vm nxt_memzero(&generator, sizeof(njs_generator_t)); - ret = njs_generate_scope(vm, &generator, node->scope); + ret = njs_generate_scope(vm, &generator, node->scope, name); if (nxt_fast_path(ret == NXT_OK)) { size = 0; @@ -2323,7 +2325,7 @@ njs_generate_function_scope(njs_vm_t *vm nxt_int_t njs_generate_scope(njs_vm_t *vm, njs_generator_t *generator, - njs_parser_scope_t *scope) + njs_parser_scope_t *scope, const nxt_str_t *name) { u_char *p; size_t size; @@ -2393,6 +2395,8 @@ njs_generate_scope(njs_vm_t *vm, njs_gen code->start = generator->code_start; code->end = generator->code_end; + code->file = scope->file; + code->name = *name; return NXT_OK; } diff -r 49f4eb5afc9b -r dcc7965410bd njs/njs_generator.h --- a/njs/njs_generator.h Mon Mar 11 18:31:40 2019 +0300 +++ b/njs/njs_generator.h Tue Mar 12 19:28:11 2019 +0300 @@ -28,7 +28,7 @@ struct njs_generator_s { nxt_int_t njs_generate_scope(njs_vm_t *vm, njs_generator_t *generator, - njs_parser_scope_t *scope); + njs_parser_scope_t *scope, const nxt_str_t *name); #endif /* _NJS_GENERATOR_H_INCLUDED_ */ diff -r 49f4eb5afc9b -r dcc7965410bd njs/njs_vm.c --- a/njs/njs_vm.c Mon Mar 11 18:31:40 2019 +0300 +++ b/njs/njs_vm.c Tue Mar 12 19:28:11 2019 +0300 @@ -95,6 +95,12 @@ const njs_value_t njs_string_function = const njs_value_t njs_string_memory_error = njs_string("MemoryError"); +const nxt_str_t njs_entry_main = nxt_string("main"); +const nxt_str_t njs_entry_native = nxt_string("native"); +const nxt_str_t njs_entry_unknown = nxt_string("unknown"); +const nxt_str_t njs_entry_anonymous = nxt_string("anonymous"); + + /* * The nJSVM is optimized for an ABIs where the first several arguments * are passed in registers (AMD64, ARM32/64): two pointers to the operand @@ -3497,11 +3503,6 @@ njs_vm_add_backtrace_entry(njs_vm_t *vm, njs_function_lambda_t *lambda; njs_backtrace_entry_t *be; - static const nxt_str_t entry_main = nxt_string("main"); - static const nxt_str_t entry_native = nxt_string("native"); - static const nxt_str_t entry_unknown = nxt_string("unknown"); - static const nxt_str_t entry_anonymous = nxt_string("anonymous"); - native_frame = &frame->native; function = native_frame->function; @@ -3513,7 +3514,7 @@ njs_vm_add_backtrace_entry(njs_vm_t *vm, be->line = 0; if (function == NULL) { - be->name = entry_main; + be->name = njs_entry_main; return NXT_OK; } @@ -3529,7 +3530,7 @@ njs_vm_add_backtrace_entry(njs_vm_t *vm, return NXT_OK; } - be->name = entry_native; + be->name = njs_entry_native; return NXT_OK; } @@ -3543,7 +3544,7 @@ njs_vm_add_backtrace_entry(njs_vm_t *vm, be->name = debug_entry[i].name; } else { - be->name = entry_anonymous; + be->name = njs_entry_anonymous; } be->file = debug_entry[i].file; @@ -3553,7 +3554,7 @@ njs_vm_add_backtrace_entry(njs_vm_t *vm, } } - be->name = entry_unknown; + be->name = njs_entry_unknown; return NXT_OK; } diff -r 49f4eb5afc9b -r dcc7965410bd njs/njs_vm.h --- a/njs/njs_vm.h Mon Mar 11 18:31:40 2019 +0300 +++ b/njs/njs_vm.h Tue Mar 12 19:28:11 2019 +0300 @@ -1095,6 +1095,8 @@ struct njs_vm_s { typedef struct { u_char *start; u_char *end; + nxt_str_t file; + nxt_str_t name; } njs_vm_code_t; @@ -1297,6 +1299,11 @@ extern const njs_value_t njs_string_nan extern const njs_value_t njs_string_internal_error; extern const njs_value_t njs_string_memory_error; +extern const nxt_str_t njs_entry_main; +extern const nxt_str_t njs_entry_native; +extern const nxt_str_t njs_entry_unknown; +extern const nxt_str_t njs_entry_anonymous; + extern const nxt_mem_proto_t njs_array_mem_proto; extern const nxt_lvlhsh_proto_t njs_object_hash_proto; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel