Permalink
Browse files

Fix 'uncaughtException' for top level exceptions

Done by not evaluating the code in the first tick.

This breaks one test in test-error-reporting.js but I believe this to be a
V8 error and I have reported it in
http://code.google.com/p/v8/issues/detail?id=764
  • Loading branch information...
1 parent ce8c30c commit 8f8dcf8ed63b19a6c20915e12af83a3ad792f1d2 @ry ry committed Jun 30, 2010
Showing with 24 additions and 10 deletions.
  1. +4 −2 lib/module.js
  2. +2 −3 src/node.cc
  3. +1 −1 src/node.js
  4. +4 −4 test/simple/test-error-reporting.js
  5. +13 −0 test/simple/test-uncaught-exception.js
View
@@ -437,9 +437,11 @@ Module.prototype._waitChildrenLoad = function (callback) {
// bootstrap main module.
-exports.runMain = function () {
+exports.runMain = function (filename) {
// Load the main module--the command line argument.
process.mainModule = new Module(".");
- process.mainModule.loadSync(process.argv[1]);
+ process.mainModule.load(filename, function (err) {
+ if (err) throw err;
+ });
}
View
@@ -1805,9 +1805,8 @@ static void Load(int argc, char *argv[]) {
f->Call(global, 1, args);
- if (try_catch.HasCaught()) {
- ReportException(try_catch, true);
- exit(11);
+ if (try_catch.HasCaught()) {
+ FatalException(try_catch);
}
}
View
@@ -239,7 +239,7 @@ if (process.argv[1]) {
process.argv[1] = path.join(cwd, process.argv[1]);
}
- module.runMain();
+ module.runMain(process.argv[1]);
} else {
// No arguments, run the repl
var repl = module.requireNative('repl');
@@ -33,14 +33,14 @@ errExec('throws_error.js', function (err, stdout, stderr) {
});
-// Trying to JSON.parse(undefined)
-errExec('throws_error2.js', function (err, stdout, stderr) {
+// Trying to JSON.parse(undefined) in nextTick
+errExec('throws_error3.js', function (err, stdout, stderr) {
assert.ok(/JSON/.test(stderr));
});
-// Trying to JSON.parse(undefined) in nextTick
-errExec('throws_error3.js', function (err, stdout, stderr) {
+// Trying to JSON.parse(undefined)
+errExec('throws_error2.js', function (err, stdout, stderr) {
assert.ok(/JSON/.test(stderr));
});
@@ -0,0 +1,13 @@
+require('../common')
+
+process.addListener('uncaughtException', function (err) {
+ puts('Caught exception: ' + err);
+});
+
+setTimeout(function () {
+ puts('This will still run.');
+}, 500);
+
+// Intentionally cause an exception, but don't catch it.
+nonexistentFunc();
+puts('This will not run.');

0 comments on commit 8f8dcf8

Please sign in to comment.