From: hongzhidao Date: Mon, 4 Feb 2019 17:07:45 +0000 (+0800) Subject: Reporting filename in runtime errors. X-Git-Tag: 0.2.8~41 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=75212789b4424de5cc6a56cacb47d783d85aa9c9;p=njs.git Reporting filename in runtime errors. --- diff --git a/njs/njs_generator.c b/njs/njs_generator.c index 0ecc0529..496e7481 100644 --- a/njs/njs_generator.c +++ b/njs/njs_generator.c @@ -160,8 +160,7 @@ static nxt_noinline nxt_int_t njs_generate_index_release(njs_vm_t *vm, njs_generator_t *generator, njs_index_t index); static nxt_int_t njs_generate_function_debug(njs_vm_t *vm, nxt_str_t *name, - njs_function_lambda_t *lambda, uint32_t line); - + njs_function_lambda_t *lambda, njs_parser_node_t *node); static void njs_generate_syntax_error(njs_vm_t *vm, njs_parser_node_t *node, const char *fmt, ...); @@ -1888,7 +1887,7 @@ njs_generate_function(njs_vm_t *vm, njs_generator_t *generator, } if (vm->debug != NULL) { - ret = njs_generate_function_debug(vm, NULL, lambda, node->token_line); + ret = njs_generate_function_debug(vm, NULL, lambda, node); if (nxt_slow_path(ret != NXT_OK)) { return ret; } @@ -2269,8 +2268,7 @@ njs_generate_function_declaration(njs_vm_t *vm, njs_generator_t *generator, } if (vm->debug != NULL) { - ret = njs_generate_function_debug(vm, &var->name, lambda, - node->token_line); + ret = njs_generate_function_debug(vm, &var->name, lambda, node); } return ret; @@ -3137,7 +3135,7 @@ njs_generate_index_release(njs_vm_t *vm, njs_generator_t *generator, static nxt_int_t njs_generate_function_debug(njs_vm_t *vm, nxt_str_t *name, - njs_function_lambda_t *lambda, uint32_t line) + njs_function_lambda_t *lambda, njs_parser_node_t *node) { njs_function_debug_t *debug; @@ -3154,7 +3152,8 @@ njs_generate_function_debug(njs_vm_t *vm, nxt_str_t *name, } debug->lambda = lambda; - debug->line = line; + debug->line = node->token_line; + debug->file = node->scope->file; return NXT_OK; } diff --git a/njs/njs_vm.c b/njs/njs_vm.c index 451ca28e..8355c16d 100644 --- a/njs/njs_vm.c +++ b/njs/njs_vm.c @@ -3127,8 +3127,8 @@ again: be = backtrace->start; for (i = 0; i < backtrace->items; i++) { - if (i != 0 && prev->name.start == be[i].name.start - && prev->line == be[i].line) + if (i != 0 && prev->name.start == be->name.start + && prev->line == be->line) { count++; @@ -3140,17 +3140,18 @@ again: count = 0; } - if (be[i].line != 0) { - len += nxt_length(" at (:)\n") + NXT_INT_T_LEN - + be[i].name.length; + len += be->name.length + nxt_length(" at ()\n"); + + if (be->line != 0) { + len += be->file.length + NXT_INT_T_LEN + 1; } else { - len += nxt_length(" at (native)\n") - + be[i].name.length; + len += nxt_length("native"); } } - prev = &be[i]; + prev = be; + be++; } p = nxt_mp_alloc(vm->mem_pool, len); @@ -3168,30 +3169,34 @@ again: count = 0; prev = NULL; + be = backtrace->start; + for (i = 0; i < backtrace->items; i++) { - if (i != 0 && prev->name.start == be[i].name.start - && prev->line == be[i].line) + if (i != 0 && prev->name.start == be->name.start + && prev->line == be->line) { count++; } else { if (count != 0) { - p = nxt_sprintf(p, end, - " repeats %uz times\n", count); + p = nxt_sprintf(p, end, " repeats %uz times\n", + count); count = 0; } - if (be[i].line != 0) { - p = nxt_sprintf(p, end, " at %V (:%uD)\n", - &be[i].name, be[i].line); + p = nxt_sprintf(p, end, " at %V ", &be->name); + + if (be->line != 0) { + p = nxt_sprintf(p, end, "(%V:%uD)\n", &be->file, + be->line); } else { - p = nxt_sprintf(p, end, " at %V (native)\n", - &be[i].name); + p = nxt_sprintf(p, end, "(native)\n"); } } - prev = &be[i]; + prev = be; + be++; } dst->start = start; @@ -3549,6 +3554,7 @@ njs_vm_add_backtrace_entry(njs_vm_t *vm, njs_frame_t *frame) be->name = entry_anonymous; } + be->file = debug_entry[i].file; be->line = debug_entry[i].line; return NXT_OK; diff --git a/njs/njs_vm.h b/njs/njs_vm.h index bdf0aa2d..394949c9 100644 --- a/njs/njs_vm.h +++ b/njs/njs_vm.h @@ -352,8 +352,9 @@ typedef union { typedef struct { - nxt_str_t name; - uint32_t line; + nxt_str_t name; + nxt_str_t file; + uint32_t line; } njs_backtrace_entry_t; @@ -1012,6 +1013,7 @@ typedef struct { typedef struct { uint32_t line; + nxt_str_t file; nxt_str_t name; njs_function_lambda_t *lambda; } njs_function_debug_t;