Browse Source

repl: allow overriding builtins

Don't give names of built-in libraries special treatment.
Changes the REPL's behavior from this:

  > var path = 42
  > path
  A different "path" already exists globally

To this:

  > var path = 42
  > path
  42

Fixes #4512.
v0.9.6-release
Ben Noordhuis 12 years ago
parent
commit
aad2013508
  1. 7
      lib/repl.js
  2. 2
      test/simple/test-repl-autolibs.js

7
lib/repl.js

@ -220,15 +220,10 @@ function REPLServer(prompt, stream, eval_, useGlobal, ignoreUndefined) {
// Check if a builtin module name was used and then include it
// if there's no conflict.
if (exports._builtinLibs.indexOf(cmd) !== -1) {
if (!(cmd in self.context) && exports._builtinLibs.indexOf(cmd) !== -1) {
var lib = require(cmd);
if (cmd in self.context && lib !== self.context[cmd]) {
self.outputStream.write('A different "' + cmd +
'" already exists globally\n');
} else {
self.context._ = self.context[cmd] = lib;
self.outputStream.write(self.writer(lib) + '\n');
}
self.displayPrompt();
return;
}

2
test/simple/test-repl-autolibs.js

@ -67,7 +67,7 @@ function test2(){
gotWrite = true;
if (data.length) {
// repl response error message
assert.equal(data.indexOf('A different'), 0);
assert.equal(data, '{}\n');
// original value wasn't overwritten
assert.equal(val, global.url);
}

Loading…
Cancel
Save