diff --git a/src/node.js b/src/node.js index 7772942de79ca1..4d86dc92e5589b 100644 --- a/src/node.js +++ b/src/node.js @@ -591,7 +591,7 @@ // Defer evaluation for a tick. This is a workaround for deferred // events not firing when evaluating scripts from the command line, // see https://github.com/nodejs/node/issues/1600. - process.nextTick(function() { + setImmediate(function() { var result = module._compile(script, `${name}-wrapper`); if (process._print_eval) console.log(result); }); diff --git a/test/message/eval_messages.out b/test/message/eval_messages.out index 4fb3c7f56d5859..a7f09aa4b5c6c7 100644 --- a/test/message/eval_messages.out +++ b/test/message/eval_messages.out @@ -6,9 +6,8 @@ SyntaxError: Strict mode code may not include a with statement at Object.exports.runInThisContext (vm.js:*) at Object. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) 42 42 [eval]:1 @@ -19,9 +18,8 @@ Error: hello at Object.exports.runInThisContext (vm.js:*) at Object. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) [eval]:1 throw new Error("hello") ^ @@ -30,9 +28,8 @@ Error: hello at Object.exports.runInThisContext (vm.js:*) at Object. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) 100 [eval]:1 var x = 100; y = x; @@ -42,9 +39,8 @@ ReferenceError: y is not defined at Object.exports.runInThisContext (vm.js:*) at Object. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) [eval]:1 var ______________________________________________; throw 10 ^ diff --git a/test/message/stdin_messages.out b/test/message/stdin_messages.out index 57908426079e15..a178bf0920ba64 100644 --- a/test/message/stdin_messages.out +++ b/test/message/stdin_messages.out @@ -7,9 +7,8 @@ SyntaxError: Strict mode code may not include a with statement at Object.exports.runInThisContext (vm.js:*) at Object. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) 42 42 @@ -21,9 +20,8 @@ Error: hello at Object.exports.runInThisContext (vm.js:*) at Object. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) [stdin]:1 throw new Error("hello") @@ -33,9 +31,8 @@ Error: hello at Object.exports.runInThisContext (vm.js:*) at Object. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) 100 [stdin]:1 @@ -46,9 +43,8 @@ ReferenceError: y is not defined at Object.exports.runInThisContext (vm.js:*) at Object. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) - at node.js:*:* - at nextTickCallbackWith0Args (node.js:*:*) - at process._tickCallback (node.js:*:*) + at Immediate._onImmediate (node.js:*:*) + at processImmediate [as _immediateCallback] (timers.js:*:*) [stdin]:1 var ______________________________________________; throw 10 diff --git a/test/parallel/test-cli-eval.js b/test/parallel/test-cli-eval.js index e6a47a3175172e..f832fce64704cc 100644 --- a/test/parallel/test-cli-eval.js +++ b/test/parallel/test-cli-eval.js @@ -90,3 +90,18 @@ child.exec(nodejs + ` -e 'require("child_process").fork("${emptyFile}")'`, assert.equal(stdout, ''); assert.equal(stderr, ''); }); + +// Regression test for https://github.com/nodejs/node/issues/8534. +{ + const script = ` + // console.log() can revive the event loop so we must be careful + // to write from a 'beforeExit' event listener only once. + process.once("beforeExit", () => console.log("beforeExit")); + process.on("exit", () => console.log("exit")); + console.log("start"); + `; + const options = { encoding: 'utf8' }; + const proc = child.spawnSync(process.execPath, ['-e', script], options); + assert.strictEqual(proc.stderr, ''); + assert.strictEqual(proc.stdout, 'start\nbeforeExit\nexit\n'); +}