diff --git a/lib/repl.js b/lib/repl.js index 120ebcc34d0fc8..1291ad2d072f97 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -396,7 +396,6 @@ function REPLServer(prompt, self.on('line', function(cmd) { debug('line %j', cmd); sawSIGINT = false; - var skipCatchall = false; // leading whitespaces in template literals should not be trimmed. if (self._inTemplateLiteral) { @@ -415,11 +414,12 @@ function REPLServer(prompt, return; } else if (!self.bufferedCommand) { self.outputStream.write('Invalid REPL keyword\n'); - skipCatchall = true; + finish(null); + return; } } - if (!skipCatchall && (cmd || (!cmd && self.bufferedCommand))) { + if (cmd || self.bufferedCommand) { var evalCmd = self.bufferedCommand + cmd; if (/^\s*\{/.test(evalCmd) && /\}\s*$/.test(evalCmd)) { // It's confusing for `{ a : 1 }` to be interpreted as a block @@ -1002,7 +1002,7 @@ REPLServer.prototype.memory = function memory(cmd) { // self.lines.level.length === 0 // TODO? keep a log of level so that any syntax breaking lines can // be cleared on .break and in the case of a syntax error? - // TODO? if a log was kept, then I could clear the bufferedComand and + // TODO? if a log was kept, then I could clear the bufferedCommand and // eval these lines and throw the syntax error } else { self.lines.level = []; diff --git a/test/parallel/test-repl-null.js b/test/parallel/test-repl-null.js new file mode 100644 index 00000000000000..337e194447d1f8 --- /dev/null +++ b/test/parallel/test-repl-null.js @@ -0,0 +1,17 @@ +'use strict'; +require('../common'); +const repl = require('repl'); +const assert = require('assert'); + +var replserver = new repl.REPLServer(); + +replserver._inTemplateLiteral = true; + +// `null` gets treated like an empty string. (Should it? You have to do some +// strange business to get it into the REPL. Maybe it should really throw?) + +assert.doesNotThrow(() => { + replserver.emit('line', null); +}); + +replserver.emit('line', '.exit');