From 2254f1a175ce6becbb817864e4a1849196537edb Mon Sep 17 00:00:00 2001
From: Rich Trott <rtrott@gmail.com>
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 <jasnell@gmail.com>
---
 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 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');