njs_value_t *offset);
static njs_jump_off_t njs_vmcode_finally(njs_vm_t *vm, njs_value_t *invld,
njs_value_t *retval, u_char *pc);
-static void njs_vmcode_reference_error(njs_vm_t *vm, u_char *pc);
+static void njs_vmcode_error(njs_vm_t *vm, u_char *pc);
/*
* These functions are forbidden to inline to minimize JavaScript VM
pc += sizeof(njs_vmcode_prop_get_t);
if (ret == NJS_OK) {
- pc += sizeof(njs_vmcode_reference_error_t);
+ pc += sizeof(njs_vmcode_error_t);
}
goto next;
break;
- case NJS_VMCODE_REFERENCE_ERROR:
- njs_vmcode_reference_error(vm, pc);
+ case NJS_VMCODE_ERROR:
+ njs_vmcode_error(vm, pc);
goto error;
default:
static void
-njs_vmcode_reference_error(njs_vm_t *vm, u_char *pc)
+njs_vmcode_error(njs_vm_t *vm, u_char *pc)
{
- njs_str_t *file;
- njs_vmcode_reference_error_t *ref_err;
+ njs_vmcode_error_t *err;
- ref_err = (njs_vmcode_reference_error_t *) pc;
+ err = (njs_vmcode_error_t *) pc;
- 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);
+ if (err->type == NJS_OBJ_TYPE_REF_ERROR) {
+ njs_reference_error(vm, "\"%V\" is not defined", &err->u.name);
} else {
- njs_reference_error(vm, "\"%V\" is not defined in %uD", &ref_err->name,
- ref_err->token_line);
+ njs_error_fmt_new(vm, &vm->retval, err->type, "%V", &err->u.message);
}
}
njs_str("SyntaxError: Unexpected token \"_\" in 1") },
{ njs_str("-_1"),
- njs_str("ReferenceError: \"_1\" is not defined in 1") },
+ njs_str("ReferenceError: \"_1\" is not defined") },
{ njs_str("_1"),
- njs_str("ReferenceError: \"_1\" is not defined in 1") },
+ njs_str("ReferenceError: \"_1\" is not defined") },
/* Octal Numbers. */
njs_str("1") },
{ njs_str("a"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("\na"),
- njs_str("ReferenceError: \"a\" is not defined in 2") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("\n\na"),
- njs_str("ReferenceError: \"a\" is not defined in 3") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("a + a"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("a = b + 1"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("a = a + 1"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("a += 1"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("a += 1; var a = 2"),
njs_str("undefined") },
njs_str("undefined") },
{ njs_str("typeof a; a"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("typeof a; a = 1"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
/**/
njs_str("1 undefined") },
{ njs_str("a = 1"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("var a; a = 1; a"),
njs_str("1") },
njs_str("{a:1,b:undefined}") },
{ njs_str("var a = 1, b = 2; ({a,b,c})"),
- njs_str("ReferenceError: \"c\" is not defined in 1") },
+ njs_str("ReferenceError: \"c\" is not defined") },
{ njs_str("var a = 1, b = 2; njs.dump({a,b,c:3})"),
njs_str("{a:1,b:2,c:3}") },
njs_str("undefined") },
{ njs_str("function f() { var a = f2(); } f();"),
- njs_str("ReferenceError: \"f2\" is not defined in 1") },
+ njs_str("ReferenceError: \"f2\" is not defined") },
{ njs_str("typeof Buffer !== 'undefined' ? Buffer : function Buffer(){}"),
njs_str("[object Function]") },
njs_str("123") },
{ njs_str("1 == 1 ? func() : '123'"),
- njs_str("ReferenceError: \"func\" is not defined in 1") },
+ njs_str("ReferenceError: \"func\" is not defined") },
{ njs_str("function f(){ if (1 == 1) { 1 == 2 ? some_var : '123' } }; f()"),
njs_str("undefined") },
{ njs_str("function f(){ if (1 == 1) { 1 == 1 ? some_var : '123' } }; f()"),
- njs_str("ReferenceError: \"some_var\" is not defined in 1") },
+ njs_str("ReferenceError: \"some_var\" is not defined") },
{ njs_str("function f(){ if (1 == 1) { 1 == 2 ? some_func() : '123' } }; f()"),
njs_str("undefined") },
{ njs_str("function f(){ if (1 == 1) { 1 == 1 ? some_func() : '123' } }; f()"),
- njs_str("ReferenceError: \"some_func\" is not defined in 1") },
+ njs_str("ReferenceError: \"some_func\" is not defined") },
{ njs_str("(function(){ function f() {return f}; return f()})()"),
njs_str("[object Function]") },
njs_str("20") },
{ njs_str("var f = function b(a) { a *= 2; return a }; b(10)"),
- njs_str("ReferenceError: \"b\" is not defined in 1") },
+ njs_str("ReferenceError: \"b\" is not defined") },
{ njs_str("var f; f = function(a) { a *= 2; return a }; f(10)"),
njs_str("20") },
{ njs_str("var a = +function f(a) { return a + 1 }(2);"
"var b = f(5); a"),
- njs_str("ReferenceError: \"f\" is not defined in 1") },
+ njs_str("ReferenceError: \"f\" is not defined") },
{ njs_str("var o = { f: function(a) { return a * 2 } }; o.f(5)"),
njs_str("10") },
njs_str("1") },
{ njs_str("delete this.Array; Array"),
- njs_str("ReferenceError: \"Array\" is not defined in 1") },
+ njs_str("ReferenceError: \"Array\" is not defined") },
{ njs_str("Array.__proto__ === Function.prototype"),
njs_str("true") },
njs_str("InternalError: Not implemented") },
{ njs_str("delete this.eval; eval"),
- njs_str("ReferenceError: \"eval\" is not defined in 1") },
+ njs_str("ReferenceError: \"eval\" is not defined") },
{ njs_str("var d = Object.getOwnPropertyDescriptor(this, 'eval');"
"d.writable && !d.enumerable && d.configurable"),
njs_str("1") },
{ njs_str("delete this.JSON; JSON"),
- njs_str("ReferenceError: \"JSON\" is not defined in 1") },
+ njs_str("ReferenceError: \"JSON\" is not defined") },
/* Top-level constructors. */
njs_str("SyntaxError: Unexpected token \"}\" in 1") },
{ njs_str("{{}a = b++}"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("{{}a = b--}"),
- njs_str("ReferenceError: \"a\" is not defined in 1") },
+ njs_str("ReferenceError: \"a\" is not defined") },
{ njs_str("{{}a =}"),
njs_str("SyntaxError: Unexpected token \"}\" in 1") },
njs_str("SyntaxError: Unexpected end of input in 1") },
{ njs_str("`${{a: 1, b}}`"),
- njs_str("ReferenceError: \"b\" is not defined in 1") },
+ njs_str("ReferenceError: \"b\" is not defined") },
{ njs_str("`${{a: 1, b:}}`"),
njs_str("SyntaxError: Unexpected token \"}\" in 1") },
njs_str("false") },
{ njs_str("isFin()"),
- njs_str("ReferenceError: \"isFin\" is not defined in 1") },
+ njs_str("ReferenceError: \"isFin\" is not defined") },
{ njs_str("isNaN(function(){})"),
njs_str("true") },
" at main (:3)\n") },
{ njs_str("1\n+a" ENTER),
- njs_str("ReferenceError: \"a\" is not defined in 2\n"
+ njs_str("ReferenceError: \"a\" is not defined\n"
" at main (:2)\n") },
{ njs_str("\n`\n${Object}\n${a}`" ENTER),
- njs_str("ReferenceError: \"a\" is not defined in 4\n"
+ njs_str("ReferenceError: \"a\" is not defined\n"
" at main (:4)\n") },
{ njs_str("function log(v) {}\nlog({}\n.a\n.a)" ENTER),
" at main (:4)\n") },
{ njs_str("\nfor (var i = 0;\n i < a;\n i++) { }\n" ENTER),
- njs_str("ReferenceError: \"a\" is not defined in 3\n"
+ njs_str("ReferenceError: \"a\" is not defined\n"
" at main (:3)\n") },
{ njs_str("\nfor (var i = 0;\n i < 5;\n a) {\n }" ENTER),
- njs_str("ReferenceError: \"a\" is not defined in 4\n"
+ njs_str("ReferenceError: \"a\" is not defined\n"
" at main (:4)\n") },
{ njs_str("Math\n.min(1,\na)" ENTER),
- njs_str("ReferenceError: \"a\" is not defined in 3\n"
+ njs_str("ReferenceError: \"a\" is not defined\n"
" at Math.min (native)\n"
" at main (:3)\n") },
};
njs_run {"-c" "setTimeout(() => {console.log('A'.repeat(1024))}, 0); ref"} \
"^Thrown:
-ReferenceError: \"ref\" is not defined in string:1
+ReferenceError: \"ref\" is not defined
at main \\\(string:1\\\)\n$"
njs_run {"-c" "setTimeout(() => {ref}, 0); setTimeout(() => {console.log('A'.repeat(1024))}, 0)"} \
"^Thrown:
-ReferenceError: \"ref\" is not defined in string:1
+ReferenceError: \"ref\" is not defined
at anonymous \\\(string:1\\\)
at main \\\(string:1\\\)\n$"
njs_test {
{"1+1\r\n"
" 1 | 00000 ADD*\r\n*2"}
+ {"__unknown\r\n"
+ " 1 | 00000 GLOBAL GET*\r\n*REFERENCE ERROR*"}
{"for (var n in [1]) {try {break} finally{}}\r\n"
" 1 | 00000 ARRAY*\r\n*TRY BREAK*PROP NEXT*-*\r\n\r\nundefined"}
{"(function() {try {return} finally{}})()\r\n"
#
# For example:
# {"import ref from 'ref_exception.js'\r\n"
-# "ReferenceError: \"undeclared\" is not defined in ref_exception.js:1"}
+# "ReferenceError: \"undeclared\" is not defined"}
# {"ref\r\n"
-# "ReferenceError: \"ref\" is not defined in shell:1\r\n"}
+# "ReferenceError: \"ref\" is not defined\r\n"}
njs_test {
{"import lib1 from 'lib1.js'; import lib2 from 'lib1.js'\r\n"
{"import m from 'export_non_default.js'\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"}
+ "ReferenceError: \"undeclared\" is not defined"}
{"var ref\r\n"
"undefined\r\n"}
{"import ref from 'ref_exception.js'\r\n"
- "ReferenceError: \"undeclared\" is not defined in ref_exception.js:1"}
+ "ReferenceError: \"undeclared\" is not defined"}
{"import m from 'declaration_exception.js'\r\n"
"SyntaxError: \"f\" has already been declared in declaration_exception.js:6"}
{"import m from 'loading_exception.js'\r\n"