This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

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:

#3235

The difference is that this patch purely adresses the exception output,
but does not try to make any behavior changes / improvements.
  • Loading branch information...
1 parent 8140333 commit bf9d8e9214e2098bacf18416564dc3a91bcdf5d6 @felixge felixge committed with isaacs May 8, 2012
View
@@ -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;
@@ -1,6 +1,6 @@
before
-module.js:311
- throw err;
- ^
+*test*message*stack_overflow.js:31
@kapouer

kapouer May 16, 2012

While i get the expected result on amd64 or i386,
on arm "hard float" the stack overflow does not happen here :

[06:31|%  98|+ 345|-   0]: release stack_overflow 
                                                 
=== release stack_overflow ===
Path: message/stack_overflow
before

/build/buildd-nodejs_0.6.18~dfsg1-1-armhf-04AtjQ/nodejs-0.6.18~dfsg1/test/message/stack_overflow.js:0
(function (exports, require, module, __filename, __dirname) { // Copyright Joy
^
RangeError: Maximum call stack size exceeded
Command: out/Release/node /build/buildd-nodejs_0.6.18~dfsg1-1-armhf-04AtjQ/nodejs-0.6.18~dfsg1/test/message/stack_overflow.js
+function stackOverflow() {
+ ^
RangeError: Maximum call stack size exceeded
@@ -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
@@ -1,6 +1,6 @@
before
-module.js:311
- throw err;
- ^
+*/test/message/throw_non_error.js:31
+throw { foo: 'bar' };
+^
[object Object]
@@ -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:*)

0 comments on commit bf9d8e9

Please sign in to comment.