From: Alexander Borisov Date: Mon, 27 May 2019 16:06:34 +0000 (+0300) Subject: Fixed format of the reference exception. X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=3e2ece41ae42603f0646d26c56275da0cc5a469e;p=njs.git Fixed format of the reference exception. Previously, it did not include filename. --- diff --git a/njs/njs_generator.c b/njs/njs_generator.c index 1158192f..58615f4e 100644 --- a/njs/njs_generator.c +++ b/njs/njs_generator.c @@ -3288,6 +3288,7 @@ static nxt_int_t njs_generate_reference_error(njs_vm_t *vm, njs_generator_t *generator, njs_parser_node_t *node) { + njs_ret_t ret; njs_vmcode_reference_error_t *ref_err; if (nxt_slow_path(!node->u.reference.not_defined)) { @@ -3301,6 +3302,11 @@ njs_generate_reference_error(njs_vm_t *vm, njs_generator_t *generator, ref_err->token_line = node->token_line; + ret = njs_name_copy(vm, &ref_err->file, &node->scope->file); + if (nxt_slow_path(ret != NJS_OK)) { + return NJS_ERROR; + } + return njs_name_copy(vm, &ref_err->name, &node->u.reference.name); } diff --git a/njs/njs_vm.c b/njs/njs_vm.c index f6f2e3e7..4a585947 100644 --- a/njs/njs_vm.c +++ b/njs/njs_vm.c @@ -2659,12 +2659,21 @@ njs_ret_t njs_vmcode_reference_error(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2) { + nxt_str_t *file; njs_vmcode_reference_error_t *ref_err; ref_err = (njs_vmcode_reference_error_t *) vm->current; - njs_reference_error(vm, "\"%V\" is not defined in %uD", &ref_err->name, - ref_err->token_line); + file = &ref_err->file; + + if (file->length != 0 && !vm->options.quiet) { + njs_reference_error(vm, "\"%V\" is not defined in %V:%uD", + &ref_err->name, file, ref_err->token_line); + + } else { + njs_reference_error(vm, "\"%V\" is not defined in %uD", &ref_err->name, + ref_err->token_line); + } return NJS_ERROR; } diff --git a/njs/njs_vm.h b/njs/njs_vm.h index 41f2b5c3..52f914e9 100644 --- a/njs/njs_vm.h +++ b/njs/njs_vm.h @@ -857,6 +857,7 @@ typedef struct { typedef struct { njs_vmcode_t code; nxt_str_t name; + nxt_str_t file; uint32_t token_line; } njs_vmcode_reference_error_t; diff --git a/njs/test/njs_expect_test.exp b/njs/test/njs_expect_test.exp index 33445df7..b2920302 100644 --- a/njs/test/njs_expect_test.exp +++ b/njs/test/njs_expect_test.exp @@ -668,6 +668,17 @@ njs_test { # modules +# FIXME: +# During import, the variable is declared regardless of the result of the import. +# Because of this, in the console mode, checking the variable after the import +# error may give an incorrect result. +# +# For example: +# {"import ref from 'ref_exception.js'\r\n" +# "ReferenceError: \"undeclared\" is not defined in ref_exception.js:1"} +# {"ref\r\n" +# "ReferenceError: \"ref\" is not defined in shell:1\r\n"} + njs_test { {"import lib1 from 'lib1.js'; import lib2 from 'lib1.js'\r\n" "undefined\r\n"} @@ -685,8 +696,6 @@ njs_test { "Non-default export is not supported in export_non_default.js:3\r\n"} {"import ref from 'ref_exception.js'\r\n" "ReferenceError: \"undeclared\" is not defined in ref_exception.js:1"} - {"ref\r\n" - "ReferenceError: \"ref\" is not defined in shell:1\r\n"} {"var ref\r\n" "undefined\r\n"} {"import ref from 'ref_exception.js'\r\n"