Fix exception output for module load exceptions

So instead of:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^

You will now see:

path/to/foo.js:1
throw new Error('bar');
      ^

This is a sub-set of isaacs patch here:

https://github.com/joyent/node/issues/3235

The difference is that this patch purely adresses the exception output,
but does not try to make any behavior changes / improvements.
This commit is contained in:
Felix Geisendörfer 2012-05-08 22:02:28 +02:00 committed by isaacs
parent 814033365b
commit bf9d8e9214
5 changed files with 20 additions and 15 deletions

View File

@ -304,11 +304,16 @@ Module._load = function(request, parent, isMain) {
}
Module._cache[filename] = module;
var hadException = true;
try {
module.load(filename);
} catch (err) {
delete Module._cache[filename];
throw err;
hadException = false;
} finally {
if (hadException) {
delete Module._cache[filename];
}
}
return module.exports;

View File

@ -1,6 +1,6 @@
before
module.js:311
throw err;
^
*test*message*stack_overflow.js:31
function stackOverflow() {
^
RangeError: Maximum call stack size exceeded

View File

@ -1,6 +1,6 @@
before
module.js:311
throw err;
^
*test*message*throw_custom_error.js:31
throw { name: 'MyCustomError', message: 'This is a custom message' };
^
MyCustomError: This is a custom message

View File

@ -1,6 +1,6 @@
before
module.js:311
throw err;
^
*/test/message/throw_non_error.js:31
throw { foo: 'bar' };
^
[object Object]

View File

@ -1,8 +1,8 @@
before
module.js:311
throw err;
^
*test*message*undefined_reference_in_new_context.js:34
script.runInNewContext();
^
ReferenceError: foo is not defined
at evalmachine.<anonymous>:*
at Object.<anonymous> (*test*message*undefined_reference_in_new_context.js:*)