displayErrors: false
});
} catch (e) {
- err = e;
debug('parse error %j', code, e);
+ if (isRecoverableError(e))
+ err = new Recoverable(e);
+ else
+ err = e;
}
if (!err) {
// If error was SyntaxError and not JSON.parse error
if (e) {
- if (isRecoverableError(e)) {
+ if (e instanceof Recoverable) {
// Start buffering data like that:
// {
// ... x: 1
};
REPLServer.prototype.displayPrompt = function(preserveCursor) {
- var prompt = this._prompt;
+ var initial = this._prompt;
+ var prompt = initial;
if (this.bufferedCommand.length) {
prompt = '...';
var levelInd = new Array(this.lines.level.length).join('..');
prompt += levelInd + ' ';
- } else {
- this.setPrompt(prompt);
}
+ this.setPrompt(prompt);
this.prompt(preserveCursor);
+ this.setPrompt(initial);
};
// A stream to push an array into a REPL
function isRecoverableError(e) {
return e &&
e.name === 'SyntaxError' &&
- /^Unexpected end of input/.test(e.message);
+ /^(Unexpected end of input|Unexpected token :)/.test(e.message);
+}
+
+function Recoverable(err) {
+ this.err = err;
}
+inherits(Recoverable, SyntaxError);