Browse Source

requireNative doesn't depend on rest of module system

v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
bb6d468dd8
  1. 32
      src/node.js

32
src/node.js

@ -104,22 +104,32 @@ var module = (function () {
// Like, natives.fs is the contents of lib/fs.js // Like, natives.fs is the contents of lib/fs.js
var natives = process.binding('natives'); var natives = process.binding('natives');
function loadNative (id) { // Native modules don't need a full require function. So we can bootstrap
// most of the system with this mini-require.
function requireNative (id) {
if (internalModuleCache[id]) return internalModuleCache[id].exports;
if (!natives[id]) throw new Error('No such native module ' + id);
// REPL is a special case, because it needs the real require.
if (id == 'repl') {
var replModule = new Module("repl");
replModule._compile(natives.repl, 'repl.js');
internalModuleCache.repl = replModule;
return replModule.exports;
}
var fn = process.compile(
"(function (exports, require) {" + natives[id] + "\n})",
id + '.js');
var m = new Module(id); var m = new Module(id);
fn(m.exports, requireNative);
m.loaded = true;
internalModuleCache[id] = m; internalModuleCache[id] = m;
var e = m._compile(natives[id], id+".js"); return m.exports;
if (e) throw e; // error compiling native module
return m;
} }
exports.requireNative = requireNative; exports.requireNative = requireNative;
function requireNative (id) {
if (internalModuleCache[id]) return internalModuleCache[id].exports;
if (!natives[id]) throw new Error('No such native module ' + id);
return loadNative(id).exports;
}
// Modules // Modules
@ -230,7 +240,7 @@ var module = (function () {
} }
if (natives[id]) { if (natives[id]) {
debug('load native module ' + request); debug('load native module ' + request);
return loadNative(id).exports; return requireNative(id);
} }
var cachedModule = moduleCache[filename]; var cachedModule = moduleCache[filename];

Loading…
Cancel
Save