From 16f011ef1c542f0b5efc37fa0ee7d97fda656f62 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 5 Apr 2016 17:17:33 -0700 Subject: [PATCH] repl: refactor repl.js There is some unnecessary logic in repl.js. Remove it. PR-URL: https://github.com/nodejs/node/pull/6071 Reviewed-By: James M Snell --- lib/repl.js | 8 ++++---- test/parallel/test-repl-null.js | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 test/parallel/test-repl-null.js diff --git a/lib/repl.js b/lib/repl.js index a43ff42d8d..44aed66a6d 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -398,7 +398,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) { @@ -417,11 +416,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 @@ -1022,7 +1022,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 0000000000..337e194447 --- /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');