Previously, it did not include filename.
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)) {
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);
}
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;
}
typedef struct {
njs_vmcode_t code;
nxt_str_t name;
+ nxt_str_t file;
uint32_t token_line;
} njs_vmcode_reference_error_t;
# 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"}
"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"