Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
repl: make 'Unexpected token' errors recoverable
Fix the regexp used to detect 'Unexpected token' errors so that they can
be considered as recoverable. This fixes the following use case:

> var foo = 'bar \
... baz';
undefined
> foo
'bar baz'
>

Fixes: nodejs/node-v0.x-archive#8874
PR-URL: nodejs/node-v0.x-archive#8875
PR-URL: insert io.js PR-URL
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
Julien Gilli authored and cjihrig committed Jun 24, 2015
commit 81699d2f64ccac0656524d59c25280d794b5eb68
2 changes: 1 addition & 1 deletion lib/repl.js
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ function isRecoverableError(e, self) {
self._inTemplateLiteral = true;
return true;
}
return /^(Unexpected end of input|Unexpected token :)/.test(message);
return /^(Unexpected end of input|Unexpected token)/.test(message);
}
return false;
}
Expand Down
33 changes: 33 additions & 0 deletions test/parallel/test-repl-unexpected-token-recoverable.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'use strict';
/*
* This is a regression test for https://github.com/joyent/node/issues/8874.
*/
var common = require('../common');
var assert = require('assert');

var spawn = require('child_process').spawn;
// use -i to force node into interactive mode, despite stdout not being a TTY
var args = [ '-i' ];
var child = spawn(process.execPath, args);

var input = 'var foo = "bar\\\nbaz"';
// Match '...' as well since it marks a multi-line statement
var expectOut = /^> ... undefined\n/;

child.stderr.setEncoding('utf8');
child.stderr.on('data', function(c) {
throw new Error('child.stderr be silent');
});

child.stdout.setEncoding('utf8');
var out = '';
child.stdout.on('data', function(c) {
out += c;
});

child.stdout.on('end', function() {
assert(expectOut.test(out));
console.log('ok');
});

child.stdin.end(input);