aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2018-02-11 19:17:03 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2018-02-12 15:42:06 +0100
commit1fc373bdf6758dcf045db21e4a075e4099ca7c19 (patch)
tree6845172f59c4bdf9be6d37efadc502e867adb248 /lib
parent60c9ad797994e544af21ce991dce2c3360ae1801 (diff)
downloadandroid-node-v8-1fc373bdf6758dcf045db21e4a075e4099ca7c19.tar.gz
android-node-v8-1fc373bdf6758dcf045db21e4a075e4099ca7c19.tar.bz2
android-node-v8-1fc373bdf6758dcf045db21e4a075e4099ca7c19.zip
Revert "repl: refactor tests to not rely on timing"
This reverts commit de848ac1e0483327a2ce8716c3f8567eaeacb660. The commit broke multiline repl. PR-URL: https://github.com/nodejs/node/pull/18715 Refs: https://github.com/nodejs/node/pull/17828 Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/internal/repl.js4
-rw-r--r--lib/repl.js79
2 files changed, 41 insertions, 42 deletions
diff --git a/lib/internal/repl.js b/lib/internal/repl.js
index a852f87bc8..adbb80b0af 100644
--- a/lib/internal/repl.js
+++ b/lib/internal/repl.js
@@ -8,7 +8,7 @@ const os = require('os');
const util = require('util');
const debug = util.debuglog('repl');
module.exports = Object.create(REPL);
-module.exports.createInternalRepl = createInternalRepl;
+module.exports.createInternalRepl = createRepl;
// XXX(chrisdickinson): The 15ms debounce value is somewhat arbitrary.
// The debounce is to guard against code pasted into the REPL.
@@ -19,7 +19,7 @@ function _writeToOutput(repl, message) {
repl._refreshLine();
}
-function createInternalRepl(env, opts, cb) {
+function createRepl(env, opts, cb) {
if (typeof opts === 'function') {
cb = opts;
opts = null;
diff --git a/lib/repl.js b/lib/repl.js
index 2227953fa8..84682b1b63 100644
--- a/lib/repl.js
+++ b/lib/repl.js
@@ -109,11 +109,6 @@ writer.options = Object.assign({},
exports._builtinLibs = internalModule.builtinLibs;
-const sep = '\u0000\u0000\u0000';
-const regExMatcher = new RegExp(`^${sep}(.*)${sep}(.*)${sep}(.*)${sep}(.*)` +
- `${sep}(.*)${sep}(.*)${sep}(.*)${sep}(.*)` +
- `${sep}(.*)$`);
-
function REPLServer(prompt,
stream,
eval_,
@@ -154,7 +149,6 @@ function REPLServer(prompt,
}
var self = this;
- replMap.set(self, self);
self._domain = dom || domain.create();
self.useGlobal = !!useGlobal;
@@ -171,6 +165,41 @@ function REPLServer(prompt,
self.rli = this;
const savedRegExMatches = ['', '', '', '', '', '', '', '', '', ''];
+ const sep = '\u0000\u0000\u0000';
+ const regExMatcher = new RegExp(`^${sep}(.*)${sep}(.*)${sep}(.*)${sep}(.*)` +
+ `${sep}(.*)${sep}(.*)${sep}(.*)${sep}(.*)` +
+ `${sep}(.*)$`);
+
+ eval_ = eval_ || defaultEval;
+
+ // Pause taking in new input, and store the keys in a buffer.
+ const pausedBuffer = [];
+ let paused = false;
+ function pause() {
+ paused = true;
+ }
+ function unpause() {
+ if (!paused) return;
+ paused = false;
+ let entry;
+ while (entry = pausedBuffer.shift()) {
+ const [type, payload] = entry;
+ switch (type) {
+ case 'key': {
+ const [d, key] = payload;
+ self._ttyWrite(d, key);
+ break;
+ }
+ case 'close':
+ self.emit('exit');
+ break;
+ }
+ if (paused) {
+ break;
+ }
+ }
+ }
+
function defaultEval(code, context, file, cb) {
var err, result, script, wrappedErr;
var wrappedCmd = false;
@@ -302,6 +331,7 @@ function REPLServer(prompt,
if (awaitPromise && !err) {
let sigintListener;
+ pause();
let promise = result;
if (self.breakEvalOnSigint) {
const interrupt = new Promise((resolve, reject) => {
@@ -320,6 +350,7 @@ function REPLServer(prompt,
prioritizedSigintQueue.delete(sigintListener);
finishExecution(undefined, result);
+ unpause();
}, (err) => {
// Remove prioritized SIGINT listener if it was not called.
prioritizedSigintQueue.delete(sigintListener);
@@ -329,6 +360,7 @@ function REPLServer(prompt,
Object.defineProperty(err, 'stack', { value: '' });
}
+ unpause();
if (err && process.domain) {
debug('not recoverable, send to domain');
process.domain.emit('error', err);
@@ -345,36 +377,6 @@ function REPLServer(prompt,
}
}
- eval_ = eval_ || defaultEval;
-
- // Pause taking in new input, and store the keys in a buffer.
- const pausedBuffer = [];
- let paused = false;
- function pause() {
- paused = true;
- }
- function unpause() {
- if (!paused) return;
- paused = false;
- let entry;
- while (entry = pausedBuffer.shift()) {
- const [type, payload] = entry;
- switch (type) {
- case 'key': {
- const [d, key] = payload;
- self._ttyWrite(d, key);
- break;
- }
- case 'close':
- self.emit('exit');
- break;
- }
- if (paused) {
- break;
- }
- }
- }
-
self.eval = self._domain.bind(eval_);
self._domain.on('error', function debugDomainError(e) {
@@ -403,7 +405,6 @@ function REPLServer(prompt,
top.clearBufferedCommand();
top.lines.level = [];
top.displayPrompt();
- unpause();
});
if (!input && !output) {
@@ -592,7 +593,6 @@ function REPLServer(prompt,
const evalCmd = self[kBufferedCommandSymbol] + cmd + '\n';
debug('eval %j', evalCmd);
- pause();
self.eval(evalCmd, self.context, 'repl', finish);
function finish(e, ret) {
@@ -605,7 +605,6 @@ function REPLServer(prompt,
'(Press Control-D to exit.)\n');
self.clearBufferedCommand();
self.displayPrompt();
- unpause();
return;
}
@@ -643,7 +642,6 @@ function REPLServer(prompt,
// Display prompt again
self.displayPrompt();
- unpause();
}
});
@@ -726,6 +724,7 @@ exports.start = function(prompt,
ignoreUndefined,
replMode);
if (!exports.repl) exports.repl = repl;
+ replMap.set(repl, repl);
return repl;
};