Browse Source

Fix REPL for named functions

add some tests.
v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
feb77eab65
  1. 7
      lib/repl.js
  2. 21
      test/simple/test-repl.js

7
lib/repl.js

@ -115,12 +115,17 @@ function REPLServer(prompt, stream) {
// and statements e.g. // and statements e.g.
// 'for (var i = 0; i < 10; i++) console.log(i);' // 'for (var i = 0; i < 10; i++) console.log(i);'
var ret; var ret, success = false;
try { try {
// First we attempt to eval as expression with parens. // First we attempt to eval as expression with parens.
// This catches '{a : 1}' properly. // This catches '{a : 1}' properly.
ret = vm.runInContext('(' + self.bufferedCommand + ')', context, 'repl'); ret = vm.runInContext('(' + self.bufferedCommand + ')', context, 'repl');
if (typeof ret !== 'function') success = true;
} catch (e) { } catch (e) {
success = false;
}
if (!success) {
// Now as statement without parens. // Now as statement without parens.
ret = vm.runInContext(self.bufferedCommand, context, 'repl'); ret = vm.runInContext(self.bufferedCommand, context, 'repl');
} }

21
test/simple/test-repl.js

@ -97,7 +97,26 @@ function error_test() {
// invalid input to JSON.parse error is special case of syntax error, // invalid input to JSON.parse error is special case of syntax error,
// should throw // should throw
{ client: client_unix, send: 'JSON.parse(\'{invalid: \\\'json\\\'}\');', { client: client_unix, send: 'JSON.parse(\'{invalid: \\\'json\\\'}\');',
expect: /^SyntaxError: Unexpected token ILLEGAL/ } expect: /^SyntaxError: Unexpected token ILLEGAL/ },
// Named functions can be used:
{ client: client_unix, send: 'function blah() { return 1; }',
expect: prompt_unix },
{ client: client_unix, send: 'blah()',
expect: "1\n" + prompt_unix },
// Multiline object
{ client: client_unix, send: '{ a: ',
expect: prompt_multiline },
{ client: client_unix, send: '1 }',
expect: "{ a: 1 }" },
// Multiline anonymous function with comment
{ client: client_unix, send: '(function () {',
expect: prompt_multiline },
{ client: client_unix, send: '// blah',
expect: prompt_multiline },
{ client: client_unix, send: 'return 1;',
expect: prompt_multiline },
{ client: client_unix, send: '})()',
expect: "1" },
]); ]);
} }

Loading…
Cancel
Save