Browse Source

src: fix deferred events not working with -e

Defer evaluation of the script for a tick.  This is a workaround for
events not firing when evaluating scripts on the command line with -e.

Fixes: https://github.com/nodejs/io.js/issues/1600
PR-URL: https://github.com/nodejs/io.js/pull/1793
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
v2.3.1-release
Ben Noordhuis 10 years ago
parent
commit
93a44d5228
  1. 5
      src/node.js
  2. 16
      test/message/eval_messages.out
  3. 35
      test/message/stdin_messages.out
  4. 15
      test/parallel/test-cli-eval-event.js

5
src/node.js

@ -558,8 +558,13 @@
'return require("vm").runInThisContext(' + 'return require("vm").runInThisContext(' +
JSON.stringify(body) + ', { filename: ' + JSON.stringify(body) + ', { filename: ' +
JSON.stringify(name) + ' });\n'; JSON.stringify(name) + ' });\n';
// 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/io.js/issues/1600.
process.nextTick(function() {
var result = module._compile(script, name + '-wrapper'); var result = module._compile(script, name + '-wrapper');
if (process._print_eval) console.log(result); if (process._print_eval) console.log(result);
});
} }
function createWritableStdioStream(fd) { function createWritableStdioStream(fd) {

16
test/message/eval_messages.out

@ -6,9 +6,9 @@ SyntaxError: Strict mode code may not include a with statement
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*) at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*)
at startup (node.js:*:*)
at node.js:*:* at node.js:*:*
at doNTCallback0 (node.js:*:*)
at process._tickCallback (node.js:*:*)
42 42
42 42
[eval]:1 [eval]:1
@ -19,9 +19,9 @@ Error: hello
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*) at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*)
at startup (node.js:*:*)
at node.js:*:* at node.js:*:*
at doNTCallback0 (node.js:*:*)
at process._tickCallback (node.js:*:*)
[eval]:1 [eval]:1
throw new Error("hello") throw new Error("hello")
^ ^
@ -30,9 +30,9 @@ Error: hello
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*) at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*)
at startup (node.js:*:*)
at node.js:*:* at node.js:*:*
at doNTCallback0 (node.js:*:*)
at process._tickCallback (node.js:*:*)
100 100
[eval]:1 [eval]:1
var x = 100; y = x; var x = 100; y = x;
@ -42,9 +42,9 @@ ReferenceError: y is not defined
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*) at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*)
at startup (node.js:*:*)
at node.js:*:* at node.js:*:*
at doNTCallback0 (node.js:*:*)
at process._tickCallback (node.js:*:*)
[eval]:1 [eval]:1
var ______________________________________________; throw 10 var ______________________________________________; throw 10
^ ^

35
test/message/stdin_messages.out

@ -7,12 +7,8 @@ SyntaxError: Strict mode code may not include a with statement
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*) at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*) at node.js:*:*
at Socket.<anonymous> (node.js:*:*) at doNTCallback0 (node.js:*:*)
at emitNone (events.js:*:*)
at Socket.emit (events.js:*:*)
at endReadableNT (_stream_readable.js:*:*)
at doNTCallback2 (node.js:*:*)
at process._tickCallback (node.js:*:*) at process._tickCallback (node.js:*:*)
42 42
42 42
@ -25,12 +21,9 @@ Error: hello
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*) at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*) at node.js:*:*
at Socket.<anonymous> (node.js:*:*) at doNTCallback0 (node.js:*:*)
at emitNone (events.js:*:*) at process._tickCallback (node.js:*:*)
at Socket.emit (events.js:*:*)
at endReadableNT (_stream_readable.js:*:*)
at doNTCallback2 (node.js:*:*)
[stdin]:1 [stdin]:1
throw new Error("hello") throw new Error("hello")
@ -40,12 +33,9 @@ Error: hello
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*) at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*) at node.js:*:*
at Socket.<anonymous> (node.js:*:*) at doNTCallback0 (node.js:*:*)
at emitNone (events.js:*:*) at process._tickCallback (node.js:*:*)
at Socket.emit (events.js:*:*)
at endReadableNT (_stream_readable.js:*:*)
at doNTCallback2 (node.js:*:*)
100 100
[stdin]:1 [stdin]:1
@ -56,12 +46,9 @@ ReferenceError: y is not defined
at Object.exports.runInThisContext (vm.js:*) at Object.exports.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*) at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*) at Module._compile (module.js:*:*)
at evalScript (node.js:*:*) at node.js:*:*
at Socket.<anonymous> (node.js:*:*) at doNTCallback0 (node.js:*:*)
at emitNone (events.js:*:*) at process._tickCallback (node.js:*:*)
at Socket.emit (events.js:*:*)
at endReadableNT (_stream_readable.js:*:*)
at doNTCallback2 (node.js:*:*)
[stdin]:1 [stdin]:1
var ______________________________________________; throw 10 var ______________________________________________; throw 10

15
test/parallel/test-cli-eval-event.js

@ -0,0 +1,15 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const spawn = require('child_process').spawn;
const child = spawn(process.execPath, ['-e', `
const server = require('net').createServer().listen(0);
server.once('listening', server.close);
`]);
child.once('exit', common.mustCall(function(exitCode, signalCode) {
assert.equal(exitCode, 0);
assert.equal(signalCode, null);
}));
Loading…
Cancel
Save