diff --git a/src/node.js b/src/node.js index 79866b0fc2..2833a03f26 100644 --- a/src/node.js +++ b/src/node.js @@ -305,38 +305,34 @@ function findModulePath (id, dirs, callback) { var dir = dirs[0]; var rest = dirs.slice(1, dirs.length); - var js = path.join(dir, id + ".js"); - var addon = path.join(dir, id + ".node"); - var indexJs = path.join(dir, id, "index.js"); - var indexAddon = path.join(dir, id, "index.addon"); + if (id.charAt(0) == '/') { + dir = ''; + rest = []; + } - // TODO clean up the following atrocity! - - path.exists(js, function (found) { - if (found) { - callback(js); + var locations = [ + path.join(dir, id + ".js"), + path.join(dir, id + ".node"), + path.join(dir, id, "index.js"), + path.join(dir, id, "index.addon"), + ]; + + var searchLocations = function() { + var location = locations.shift(); + if (location === undefined) { + findModulePath(id, rest, callback); return; } - path.exists(addon, function (found) { + + path.exists(location, function (found) { if (found) { - callback(addon); + callback(location); return; } - path.exists(indexJs, function (found) { - if (found) { - callback(indexJs); - return; - } - path.exists(indexAddon, function (found) { - if (found) { - callback(indexAddon); - return; - } - findModulePath(id, rest, callback); - }); - }); - }); - }); + searchLocations(); + }) + }; + searchLocations(); } function loadModule (request, parent) { diff --git a/test/mjsunit/test-module-loading.js b/test/mjsunit/test-module-loading.js index 9659005d16..769c1b45ab 100644 --- a/test/mjsunit/test-module-loading.js +++ b/test/mjsunit/test-module-loading.js @@ -5,6 +5,7 @@ debug("load test-module-loading.js"); var a = require("./fixtures/a"); var d = require("./fixtures/b/d"); var d2 = require("./fixtures/b/d"); +var d3 = require(require('path').dirname(__filename)+"/fixtures/b/d"); assertFalse(false, "testing the test program."); @@ -23,6 +24,9 @@ assertEquals("D", d.D()); assertInstanceof(d2.D, Function); assertEquals("D", d2.D()); +assertInstanceof(d3.D, Function); +assertEquals("D", d3.D()); + process.addListener("exit", function () { assertInstanceof(a.A, Function); assertEquals("A done", a.A());