From a118f2172880d338101f80647437b8832ac1f768 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Thu, 16 Feb 2012 16:33:40 -0800 Subject: [PATCH] repl: make tab completion work on non-objects --- lib/repl.js | 7 ++++++- test/simple/test-repl-tab-complete.js | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/repl.js b/lib/repl.js index 08697ab..20fa7ae 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -523,8 +523,13 @@ REPLServer.prototype.complete = function(line, callback) { } // works for non-objects try { - var p = Object.getPrototypeOf(obj); var sentinel = 5; + var p; + if (typeof obj == 'object') { + p = Object.getPrototypeOf(obj); + } else { + p = obj.constructor ? obj.constructor.prototype : null; + } while (p !== null) { memberGroups.push(Object.getOwnPropertyNames(p)); p = Object.getPrototypeOf(p); diff --git a/test/simple/test-repl-tab-complete.js b/test/simple/test-repl-tab-complete.js index ba51104..0bc43ab 100644 --- a/test/simple/test-repl-tab-complete.js +++ b/test/simple/test-repl-tab-complete.js @@ -180,3 +180,12 @@ testMe.complete('inner.o', function(error, data) { assert.deepEqual(data, doesNotBreak); }); +putIn.run(['.clear']); + +// make sure tab completion works on non-Objects +putIn.run([ + 'var str = "test";' +]); +testMe.complete('str.len', function(error, data) { + assert.deepEqual(data, [ [ 'str.length' ], 'str.len' ]); +}); -- 2.7.4