lint util.js and src/node.js
This commit is contained in:
Родитель
7c57eb2aec
Коммит
558e5ba2b0
5
Makefile
5
Makefile
|
@ -130,11 +130,8 @@ bench-idle:
|
|||
sleep 1
|
||||
./node benchmark/idle_clients.js &
|
||||
|
||||
GJSLINT = PYTHONPATH=tools/closure_linter/ \
|
||||
python tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc
|
||||
|
||||
jslint:
|
||||
$(GJSLINT) -r lib/ -r src/ -r test/
|
||||
PYTHONPATH=tools/closure_linter/ python tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ -r test/
|
||||
|
||||
cpplint:
|
||||
@python tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c)
|
||||
|
|
151
lib/util.js
151
lib/util.js
|
@ -31,7 +31,7 @@ var error = exports.error = function(x) {
|
|||
* Echos the value of a value. Trys to print the value out
|
||||
* in the best way possible given the different types.
|
||||
*
|
||||
* @param {Object} value The object to print out.
|
||||
* @param {Object} obj The object to print out.
|
||||
* @param {Boolean} showHidden Flag that shows hidden (not enumerable)
|
||||
* properties of objects.
|
||||
* @param {Number} depth Depth in which to descend in object. Default is 2.
|
||||
|
@ -43,30 +43,32 @@ exports.inspect = function(obj, showHidden, depth, colors) {
|
|||
|
||||
var stylize = function(str, styleType) {
|
||||
// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
|
||||
var styles = { 'bold' : [1, 22]
|
||||
, 'italic' : [3, 23]
|
||||
, 'underline' : [4, 24]
|
||||
, 'inverse' : [7, 27]
|
||||
, 'white' : [37, 39]
|
||||
, 'grey' : [90, 39]
|
||||
, 'black' : [30, 39]
|
||||
, 'blue' : [34, 39]
|
||||
, 'cyan' : [36, 39]
|
||||
, 'green' : [32, 39]
|
||||
, 'magenta' : [35, 39]
|
||||
, 'red' : [31, 39]
|
||||
, 'yellow' : [33, 39]
|
||||
};
|
||||
var style = { 'special': 'grey'
|
||||
, 'number': 'blue'
|
||||
, 'boolean': 'blue'
|
||||
, 'undefined': 'red'
|
||||
, 'null': 'red'
|
||||
, 'string': 'green'
|
||||
, 'date': 'magenta'
|
||||
//, "name": intentionally not styling
|
||||
, 'regexp': 'cyan'
|
||||
}[styleType];
|
||||
var styles =
|
||||
{ 'bold' : [1, 22],
|
||||
'italic' : [3, 23],
|
||||
'underline' : [4, 24],
|
||||
'inverse' : [7, 27],
|
||||
'white' : [37, 39],
|
||||
'grey' : [90, 39],
|
||||
'black' : [30, 39],
|
||||
'blue' : [34, 39],
|
||||
'cyan' : [36, 39],
|
||||
'green' : [32, 39],
|
||||
'magenta' : [35, 39],
|
||||
'red' : [31, 39],
|
||||
'yellow' : [33, 39] };
|
||||
|
||||
var style =
|
||||
{ 'special': 'grey',
|
||||
'number': 'blue',
|
||||
'boolean': 'blue',
|
||||
'undefined': 'red',
|
||||
'null': 'red',
|
||||
'string': 'green',
|
||||
'date': 'magenta',
|
||||
// "name": intentionally not styling
|
||||
'regexp': 'cyan' }[styleType];
|
||||
|
||||
if (style) {
|
||||
return '\033[' + styles[style][0] + 'm' + str +
|
||||
'\033[' + styles[style][1] + 'm';
|
||||
|
@ -91,14 +93,20 @@ exports.inspect = function(obj, showHidden, depth, colors) {
|
|||
|
||||
// Primitive types cannot have properties
|
||||
switch (typeof value) {
|
||||
case 'undefined': return stylize('undefined', 'undefined');
|
||||
case 'string': return stylize(
|
||||
JSON.stringify(value).replace(/'/g, "\\'")
|
||||
case 'undefined':
|
||||
return stylize('undefined', 'undefined');
|
||||
|
||||
case 'string':
|
||||
var simple = JSON.stringify(value).replace(/'/g, "\\'")
|
||||
.replace(/\\"/g, '"')
|
||||
.replace(/(^"|"$)/g, "'"),
|
||||
'string');
|
||||
case 'number': return stylize('' + value, 'number');
|
||||
case 'boolean': return stylize('' + value, 'boolean');
|
||||
.replace(/(^"|"$)/g, "'");
|
||||
return stylize(simple, 'string');
|
||||
|
||||
case 'number':
|
||||
return stylize('' + value, 'number');
|
||||
|
||||
case 'boolean':
|
||||
return stylize('' + value, 'boolean');
|
||||
}
|
||||
// For some reason typeof null is "object", so special case here.
|
||||
if (value === null) {
|
||||
|
@ -114,7 +122,8 @@ exports.inspect = function(obj, showHidden, depth, colors) {
|
|||
if (isRegExp(value)) {
|
||||
return stylize('' + value, 'regexp');
|
||||
} else {
|
||||
return stylize('[Function' + (value.name ? ': ' + value.name : '') + ']', 'special');
|
||||
var name = value.name ? ': ' + value.name : '';
|
||||
return stylize('[Function' + name + ']', 'special');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,7 +144,8 @@ exports.inspect = function(obj, showHidden, depth, colors) {
|
|||
|
||||
// Make functions say that they are functions
|
||||
if (typeof value === 'function') {
|
||||
base = (isRegExp(value)) ? ' ' + value : ' [Function' + (value.name ? ': ' + value.name : '') + ']';
|
||||
var n = value.name ? ': ' + value.name : '';
|
||||
base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
|
||||
} else {
|
||||
base = '';
|
||||
}
|
||||
|
@ -223,19 +233,17 @@ exports.inspect = function(obj, showHidden, depth, colors) {
|
|||
var numLinesEst = 0;
|
||||
var length = output.reduce(function(prev, cur) {
|
||||
numLinesEst++;
|
||||
if (cur.indexOf('\n') >= 0) {
|
||||
numLinesEst++;
|
||||
}
|
||||
if (cur.indexOf('\n') >= 0) numLinesEst++;
|
||||
return prev + cur.length + 1;
|
||||
},0);
|
||||
}, 0);
|
||||
|
||||
if (length > (require('readline').columns || 50)) {
|
||||
output = braces[0]
|
||||
+ (base === '' ? '' : base + '\n ')
|
||||
+ ' '
|
||||
+ output.join(',\n ')
|
||||
+ ' '
|
||||
+ braces[1];
|
||||
output = braces[0] +
|
||||
(base === '' ? '' : base + '\n ') +
|
||||
' ' +
|
||||
output.join(',\n ') +
|
||||
' ' +
|
||||
braces[1];
|
||||
|
||||
} else {
|
||||
output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
|
||||
|
@ -248,21 +256,22 @@ exports.inspect = function(obj, showHidden, depth, colors) {
|
|||
|
||||
|
||||
function isArray(ar) {
|
||||
return ar instanceof Array
|
||||
|| Array.isArray(ar)
|
||||
|| (ar && ar !== Object.prototype && isArray(ar.__proto__));
|
||||
return ar instanceof Array ||
|
||||
Array.isArray(ar) ||
|
||||
(ar && ar !== Object.prototype && isArray(ar.__proto__));
|
||||
}
|
||||
|
||||
|
||||
function isRegExp(re) {
|
||||
var s = ''+ re;
|
||||
return re instanceof RegExp // easy case
|
||||
|| typeof(re) === 'function' // duck-type for context-switching evalcx case
|
||||
&& re.constructor.name === 'RegExp'
|
||||
&& re.compile
|
||||
&& re.test
|
||||
&& re.exec
|
||||
&& s.match(/^\/.*\/[gim]{0,3}$/);
|
||||
var s = '' + re;
|
||||
return re instanceof RegExp || // easy case
|
||||
// duck-type for context-switching evalcx case
|
||||
typeof(re) === 'function' &&
|
||||
re.constructor.name === 'RegExp' &&
|
||||
re.compile &&
|
||||
re.test &&
|
||||
re.exec &&
|
||||
s.match(/^\/.*\/[gim]{0,3}$/);
|
||||
}
|
||||
|
||||
|
||||
|
@ -279,7 +288,8 @@ var pWarning;
|
|||
|
||||
exports.p = function() {
|
||||
if (!pWarning) {
|
||||
pWarning = 'util.p will be removed in future versions of Node. Use util.puts(util.inspect()) instead.\n';
|
||||
pWarning = 'util.p will be removed in future versions of Node. ' +
|
||||
'Use util.puts(util.inspect()) instead.\n';
|
||||
exports.error(pWarning);
|
||||
}
|
||||
for (var i = 0, len = arguments.length; i < len; ++i) {
|
||||
|
@ -293,15 +303,16 @@ function pad(n) {
|
|||
}
|
||||
|
||||
|
||||
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
|
||||
'Oct', 'Nov', 'Dec'];
|
||||
|
||||
// 26 Feb 16:19:34
|
||||
function timestamp() {
|
||||
var d = new Date();
|
||||
return [d.getDate()
|
||||
, months[d.getMonth()]
|
||||
, [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':')
|
||||
].join(' ');
|
||||
var time = [pad(d.getHours()),
|
||||
pad(d.getMinutes()),
|
||||
pad(d.getSeconds())].join(':');
|
||||
return [d.getDate(), months[d.getMonth()], time].join(' ');
|
||||
}
|
||||
|
||||
|
||||
|
@ -313,7 +324,8 @@ exports.log = function(msg) {
|
|||
var execWarning;
|
||||
exports.exec = function() {
|
||||
if (!execWarning) {
|
||||
execWarning = 'util.exec has moved to the "child_process" module. Please update your source code.';
|
||||
execWarning = 'util.exec has moved to the "child_process" module.' +
|
||||
' Please update your source code.';
|
||||
error(execWarning);
|
||||
}
|
||||
return require('child_process').exec.apply(this, arguments);
|
||||
|
@ -330,8 +342,13 @@ exports.pump = function(readStream, writeStream, callback) {
|
|||
}
|
||||
}
|
||||
|
||||
if (!readStream.pause) readStream.pause = function() {readStream.emit('pause');};
|
||||
if (!readStream.resume) readStream.resume = function() {readStream.emit('resume');};
|
||||
if (!readStream.pause) {
|
||||
readStream.pause = function() {readStream.emit('pause');};
|
||||
}
|
||||
|
||||
if (!readStream.resume) {
|
||||
readStream.resume = function() {readStream.emit('resume');};
|
||||
}
|
||||
|
||||
readStream.addListener('data', function(chunk) {
|
||||
if (writeStream.write(chunk) === false) readStream.pause();
|
||||
|
@ -368,6 +385,7 @@ exports.pump = function(readStream, writeStream, callback) {
|
|||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Inherit the prototype methods from one constructor into another.
|
||||
*
|
||||
|
@ -384,9 +402,6 @@ exports.pump = function(readStream, writeStream, callback) {
|
|||
exports.inherits = function(ctor, superCtor) {
|
||||
ctor.super_ = superCtor;
|
||||
ctor.prototype = Object.create(superCtor.prototype, {
|
||||
constructor: {
|
||||
value: ctor,
|
||||
enumerable: false
|
||||
}
|
||||
constructor: { value: ctor, enumerable: false }
|
||||
});
|
||||
};
|
||||
|
|
298
src/node.js
298
src/node.js
|
@ -1,47 +1,55 @@
|
|||
(function (process) {
|
||||
(function(process) {
|
||||
|
||||
global = this;
|
||||
global.process = process;
|
||||
global.global = global;
|
||||
global.GLOBAL = global;
|
||||
global.root = global;
|
||||
global = this;
|
||||
global.process = process;
|
||||
global.global = global;
|
||||
global.GLOBAL = global;
|
||||
global.root = global;
|
||||
|
||||
/** deprecation errors ************************************************/
|
||||
/** deprecation errors ************************************************/
|
||||
|
||||
function removed (reason) {
|
||||
return function () {
|
||||
function removed(reason) {
|
||||
return function() {
|
||||
throw new Error(reason);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
process.debug = removed("process.debug() has moved. Use require('sys') to bring it back.");
|
||||
process.error = removed("process.error() has moved. Use require('sys') to bring it back.");
|
||||
process.watchFile = removed("process.watchFile() has moved to fs.watchFile()");
|
||||
process.unwatchFile = removed("process.unwatchFile() has moved to fs.unwatchFile()");
|
||||
process.mixin = removed('process.mixin() has been removed.');
|
||||
process.createChildProcess = removed("childProcess API has changed. See doc/api.txt.");
|
||||
process.inherits = removed("process.inherits() has moved to sys.inherits.");
|
||||
process._byteLength = removed("process._byteLength() has moved to Buffer.byteLength");
|
||||
process.debug =
|
||||
removed('process.debug() use console.error() instead');
|
||||
process.error =
|
||||
removed('process.error() use console.error() instead');
|
||||
process.watchFile =
|
||||
removed('process.watchFile() has moved to fs.watchFile()');
|
||||
process.unwatchFile =
|
||||
removed('process.unwatchFile() has moved to fs.unwatchFile()');
|
||||
process.mixin =
|
||||
removed('process.mixin() has been removed.');
|
||||
process.createChildProcess =
|
||||
removed('childProcess API has changed. See doc/api.txt.');
|
||||
process.inherits =
|
||||
removed('process.inherits() has moved to sys.inherits.');
|
||||
process._byteLength =
|
||||
removed('process._byteLength() has moved to Buffer.byteLength');
|
||||
|
||||
process.assert = function (x, msg) {
|
||||
if (!x) throw new Error(msg || "assertion error");
|
||||
};
|
||||
process.assert = function(x, msg) {
|
||||
if (!x) throw new Error(msg || 'assertion error');
|
||||
};
|
||||
|
||||
var evals = process.binding('evals');
|
||||
var evals = process.binding('evals');
|
||||
|
||||
// lazy loaded.
|
||||
var constants;
|
||||
function lazyConstants () {
|
||||
if (!constants) constants = process.binding("constants");
|
||||
// lazy loaded.
|
||||
var constants;
|
||||
function lazyConstants() {
|
||||
if (!constants) constants = process.binding('constants');
|
||||
return constants;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// nextTick()
|
||||
// nextTick()
|
||||
|
||||
var nextTickQueue = [];
|
||||
var nextTickQueue = [];
|
||||
|
||||
process._tickCallback = function () {
|
||||
process._tickCallback = function() {
|
||||
var l = nextTickQueue.length;
|
||||
if (l === 0) return;
|
||||
|
||||
|
@ -50,55 +58,55 @@ process._tickCallback = function () {
|
|||
nextTickQueue[i]();
|
||||
}
|
||||
}
|
||||
catch(e) {
|
||||
nextTickQueue.splice(0, i+1);
|
||||
if (i+1 < l) {
|
||||
catch (e) {
|
||||
nextTickQueue.splice(0, i + 1);
|
||||
if (i + 1 < l) {
|
||||
process._needTickCallback();
|
||||
}
|
||||
throw e; // process.nextTick error, or 'error' event on first tick
|
||||
}
|
||||
|
||||
nextTickQueue.splice(0, l);
|
||||
};
|
||||
};
|
||||
|
||||
process.nextTick = function (callback) {
|
||||
process.nextTick = function(callback) {
|
||||
nextTickQueue.push(callback);
|
||||
process._needTickCallback();
|
||||
};
|
||||
};
|
||||
|
||||
var internalModuleCache = {};
|
||||
var internalModuleCache = {};
|
||||
|
||||
// This contains the source code for the files in lib/
|
||||
// Like, natives.fs is the contents of lib/fs.js
|
||||
var natives = process.binding('natives');
|
||||
// This contains the source code for the files in lib/
|
||||
// Like, natives.fs is the contents of lib/fs.js
|
||||
var natives = process.binding('natives');
|
||||
|
||||
// Native modules don't need a full require function. So we can bootstrap
|
||||
// most of the system with this mini-require.
|
||||
function requireNative (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);
|
||||
|
||||
var fn = evals.Script.runInThisContext(
|
||||
"(function (module, exports, require) {" + natives[id] + "\n})",
|
||||
'(function (module, exports, require) {' + natives[id] + '\n})',
|
||||
id + '.js');
|
||||
var m = {id: id, exports: {}};
|
||||
fn(m, m.exports, requireNative);
|
||||
m.loaded = true;
|
||||
internalModuleCache[id] = m;
|
||||
return m.exports;
|
||||
}
|
||||
}
|
||||
|
||||
// Module System
|
||||
var module = (function () {
|
||||
// Module System
|
||||
var module = (function() {
|
||||
var exports = {};
|
||||
// Set the environ variable NODE_MODULE_CONTEXTS=1 to make node load all
|
||||
// modules in thier own context.
|
||||
var contextLoad = false;
|
||||
if (+process.env["NODE_MODULE_CONTEXTS"] > 0) contextLoad = true;
|
||||
if (+process.env['NODE_MODULE_CONTEXTS'] > 0) contextLoad = true;
|
||||
|
||||
var moduleCache = {};
|
||||
|
||||
function Module (id, parent) {
|
||||
function Module(id, parent) {
|
||||
this.id = id;
|
||||
this.exports = {};
|
||||
this.parent = parent;
|
||||
|
@ -112,33 +120,36 @@ var module = (function () {
|
|||
|
||||
// Modules
|
||||
|
||||
var debugLevel = parseInt(process.env["NODE_DEBUG"], 16);
|
||||
function debug (x) {
|
||||
if (debugLevel & 1) console.error(x);
|
||||
var debugLevel = parseInt(process.env['NODE_DEBUG'], 16);
|
||||
if (debugLevel & 1) {
|
||||
debug = function(x) { console.error(x); };
|
||||
} else {
|
||||
debug = function() { };
|
||||
}
|
||||
|
||||
|
||||
var path = requireNative('path');
|
||||
|
||||
var modulePaths = [path.join(process.execPath, "..", "..", "lib", "node")];
|
||||
var modulePaths = [path.join(process.execPath, '..', '..', 'lib', 'node')];
|
||||
|
||||
if (process.env["HOME"]) {
|
||||
modulePaths.unshift(path.join(process.env["HOME"], ".node_libraries"));
|
||||
modulePaths.unshift(path.join(process.env["HOME"], ".node_modules"));
|
||||
if (process.env['HOME']) {
|
||||
modulePaths.unshift(path.join(process.env['HOME'], '.node_libraries'));
|
||||
modulePaths.unshift(path.join(process.env['HOME'], '.node_modules'));
|
||||
}
|
||||
|
||||
if (process.env["NODE_PATH"]) {
|
||||
modulePaths = process.env["NODE_PATH"].split(":").concat(modulePaths);
|
||||
if (process.env['NODE_PATH']) {
|
||||
modulePaths = process.env['NODE_PATH'].split(':').concat(modulePaths);
|
||||
}
|
||||
|
||||
var extensions = {};
|
||||
var registerExtension = removed('require.registerExtension() removed. Use require.extensions instead');
|
||||
var registerExtension =
|
||||
removed('require.registerExtension() removed.' +
|
||||
' Use require.extensions instead');
|
||||
|
||||
// Which files to traverse while finding id? Returns generator function.
|
||||
function traverser (id, dirs) {
|
||||
function traverser(id, dirs) {
|
||||
var head = [], inDir = [], dirs = dirs.slice(),
|
||||
exts = Object.keys(extensions);
|
||||
return function next () {
|
||||
return function next() {
|
||||
var result = head.shift();
|
||||
if (result) { return result; }
|
||||
|
||||
|
@ -147,11 +158,11 @@ var module = (function () {
|
|||
|
||||
var dir = dirs.shift();
|
||||
if (dir !== undefined) {
|
||||
function direct (ext) { return path.join(dir, id + ext); }
|
||||
function index (ext) { return path.join(dir, id, 'index' + ext); }
|
||||
function direct(ext) { return path.join(dir, id + ext); }
|
||||
function index(ext) { return path.join(dir, id, 'index' + ext); }
|
||||
inDir = [
|
||||
function () { return exts.map(direct); },
|
||||
function () { return exts.map(index); }
|
||||
function() { return exts.map(direct); },
|
||||
function() { return exts.map(index); }
|
||||
];
|
||||
head = [path.join(dir, id)];
|
||||
return next();
|
||||
|
@ -159,14 +170,15 @@ var module = (function () {
|
|||
};
|
||||
}
|
||||
|
||||
function findModulePath (request, paths) {
|
||||
var nextLoc = traverser(request, request.charAt(0) === '/' ? [''] : paths);
|
||||
function findModulePath(request, paths) {
|
||||
var nextLoc =
|
||||
traverser(request, request.charAt(0) === '/' ? [''] : paths);
|
||||
|
||||
var fs = requireNative('fs');
|
||||
|
||||
var location, stats;
|
||||
while (location = nextLoc()) {
|
||||
try { stats = fs.statSync(location); } catch(e) { continue; }
|
||||
try { stats = fs.statSync(location); } catch (e) { continue; }
|
||||
if (stats && !stats.isDirectory()) return location;
|
||||
}
|
||||
return false;
|
||||
|
@ -174,12 +186,12 @@ var module = (function () {
|
|||
|
||||
|
||||
// sync - no i/o performed
|
||||
function resolveModuleLookupPaths (request, parent) {
|
||||
function resolveModuleLookupPaths(request, parent) {
|
||||
|
||||
if (natives[request]) return [request, []];
|
||||
|
||||
var start = request.substring(0, 2);
|
||||
if (start !== "./" && start !== "..") {
|
||||
if (start !== './' && start !== '..') {
|
||||
return [request, modulePaths];
|
||||
}
|
||||
|
||||
|
@ -202,13 +214,14 @@ var module = (function () {
|
|||
if (parentIdPath === '.' && id.indexOf('/') === -1) {
|
||||
id = './' + id;
|
||||
}
|
||||
debug("RELATIVE: requested:" + request + " set ID to: "+id+" from "+parent.id);
|
||||
debug('RELATIVE: requested:' + request +
|
||||
' set ID to: ' + id + ' from ' + parent.id);
|
||||
return [id, [path.dirname(parent.filename)]];
|
||||
}
|
||||
|
||||
|
||||
function loadModule (request, parent) {
|
||||
debug("loadModule REQUEST " + (request) + " parent: " + parent.id);
|
||||
function loadModule(request, parent) {
|
||||
debug('loadModule REQUEST ' + (request) + ' parent: ' + parent.id);
|
||||
|
||||
var resolved = resolveModuleFilename(request, parent);
|
||||
var id = resolved[0];
|
||||
|
@ -219,7 +232,7 @@ var module = (function () {
|
|||
if (natives[id]) {
|
||||
// REPL is a special case, because it needs the real require.
|
||||
if (id == 'repl') {
|
||||
var replModule = new Module("repl");
|
||||
var replModule = new Module('repl');
|
||||
replModule._compile(natives.repl, 'repl.js');
|
||||
internalModuleCache.repl = replModule;
|
||||
return replModule.exports;
|
||||
|
@ -238,14 +251,15 @@ var module = (function () {
|
|||
return module.exports;
|
||||
};
|
||||
|
||||
function resolveModuleFilename (request, parent) {
|
||||
function resolveModuleFilename(request, parent) {
|
||||
if (natives[request]) return [request, request];
|
||||
var resolvedModule = resolveModuleLookupPaths(request, parent),
|
||||
id = resolvedModule[0],
|
||||
paths = resolvedModule[1];
|
||||
|
||||
// look up the filename first, since that's the cache key.
|
||||
debug("looking for " + JSON.stringify(id) + " in " + JSON.stringify(paths));
|
||||
debug('looking for ' + JSON.stringify(id) +
|
||||
' in ' + JSON.stringify(paths));
|
||||
var filename = findModulePath(request, paths);
|
||||
if (!filename) {
|
||||
throw new Error("Cannot find module '" + request + "'");
|
||||
|
@ -254,8 +268,9 @@ var module = (function () {
|
|||
}
|
||||
|
||||
|
||||
Module.prototype.load = function (filename) {
|
||||
debug("load " + JSON.stringify(filename) + " for module " + JSON.stringify(this.id));
|
||||
Module.prototype.load = function(filename) {
|
||||
debug('load ' + JSON.stringify(filename) +
|
||||
' for module ' + JSON.stringify(this.id));
|
||||
|
||||
process.assert(!this.loaded);
|
||||
this.filename = filename;
|
||||
|
@ -268,16 +283,16 @@ var module = (function () {
|
|||
|
||||
|
||||
// Returns exception if any
|
||||
Module.prototype._compile = function (content, filename) {
|
||||
Module.prototype._compile = function(content, filename) {
|
||||
var self = this;
|
||||
// remove shebang
|
||||
content = content.replace(/^\#\!.*/, '');
|
||||
|
||||
function require (path) {
|
||||
function require(path) {
|
||||
return loadModule(path, self);
|
||||
}
|
||||
|
||||
require.resolve = function (request) {
|
||||
require.resolve = function(request) {
|
||||
return resolveModuleFilename(request, self)[1];
|
||||
}
|
||||
require.paths = modulePaths;
|
||||
|
@ -291,7 +306,7 @@ var module = (function () {
|
|||
var dirname = path.dirname(filename);
|
||||
|
||||
if (contextLoad) {
|
||||
if (self.id !== ".") {
|
||||
if (self.id !== '.') {
|
||||
debug('load submodule');
|
||||
// not root module
|
||||
var sandbox = {};
|
||||
|
@ -321,36 +336,38 @@ var module = (function () {
|
|||
|
||||
} else {
|
||||
// create wrapper function
|
||||
var wrapper = "(function (exports, require, module, __filename, __dirname) { "
|
||||
+ content
|
||||
+ "\n});";
|
||||
var wrapper =
|
||||
'(function (exports, require, module, __filename, __dirname) { ' +
|
||||
content +
|
||||
'\n});';
|
||||
|
||||
var compiledWrapper = evals.Script.runInThisContext(wrapper, filename);
|
||||
if (filename === process.argv[1] && global.v8debug) {
|
||||
global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
|
||||
}
|
||||
return compiledWrapper.apply(self.exports, [self.exports, require, self, filename, dirname]);
|
||||
var args = [self.exports, require, self, filename, dirname];
|
||||
return compiledWrapper.apply(self.exports, args);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Native extension for .js
|
||||
extensions['.js'] = function (module, filename) {
|
||||
extensions['.js'] = function(module, filename) {
|
||||
var content = requireNative('fs').readFileSync(filename, 'utf8');
|
||||
module._compile(content, filename);
|
||||
};
|
||||
|
||||
|
||||
// Native extension for .node
|
||||
extensions['.node'] = function (module, filename) {
|
||||
extensions['.node'] = function(module, filename) {
|
||||
process.dlopen(filename, module.exports);
|
||||
};
|
||||
|
||||
|
||||
// bootstrap main module.
|
||||
exports.runMain = function () {
|
||||
exports.runMain = function() {
|
||||
// Load the main module--the command line argument.
|
||||
process.mainModule = new Module(".");
|
||||
process.mainModule = new Module('.');
|
||||
try {
|
||||
process.mainModule.load(process.argv[1]);
|
||||
} catch (e) {
|
||||
|
@ -364,37 +381,37 @@ var module = (function () {
|
|||
};
|
||||
|
||||
// bootstrap repl
|
||||
exports.requireRepl = function () { return loadModule("repl", "."); };
|
||||
exports.requireRepl = function() { return loadModule('repl', '.'); };
|
||||
|
||||
// export for --eval
|
||||
exports.Module = Module;
|
||||
|
||||
return exports;
|
||||
})();
|
||||
})();
|
||||
|
||||
|
||||
// Load events module in order to access prototype elements on process like
|
||||
// process.addListener.
|
||||
var events = requireNative('events');
|
||||
// Load events module in order to access prototype elements on process like
|
||||
// process.addListener.
|
||||
var events = requireNative('events');
|
||||
|
||||
// Signal Handlers
|
||||
(function() {
|
||||
// Signal Handlers
|
||||
(function() {
|
||||
var signalWatchers = {};
|
||||
var addListener = process.addListener;
|
||||
var removeListener = process.removeListener;
|
||||
|
||||
function isSignal (event) {
|
||||
function isSignal(event) {
|
||||
return event.slice(0, 3) === 'SIG' && lazyConstants()[event];
|
||||
}
|
||||
|
||||
// Wrap addListener for the special signal types
|
||||
process.on = process.addListener = function (type, listener) {
|
||||
process.on = process.addListener = function(type, listener) {
|
||||
var ret = addListener.apply(this, arguments);
|
||||
if (isSignal(type)) {
|
||||
if (!signalWatchers.hasOwnProperty(type)) {
|
||||
var b = process.binding('signal_watcher');
|
||||
var w = new b.SignalWatcher(lazyConstants()[type]);
|
||||
w.callback = function () { process.emit(type); };
|
||||
w.callback = function() { process.emit(type); };
|
||||
signalWatchers[type] = w;
|
||||
w.start();
|
||||
|
||||
|
@ -406,7 +423,7 @@ var events = requireNative('events');
|
|||
return ret;
|
||||
};
|
||||
|
||||
process.removeListener = function (type, listener) {
|
||||
process.removeListener = function(type, listener) {
|
||||
var ret = removeListener.apply(this, arguments);
|
||||
if (isSignal(type)) {
|
||||
process.assert(signalWatchers.hasOwnProperty(type));
|
||||
|
@ -418,32 +435,32 @@ var events = requireNative('events');
|
|||
|
||||
return ret;
|
||||
};
|
||||
})();
|
||||
})();
|
||||
|
||||
|
||||
global.setTimeout = function () {
|
||||
global.setTimeout = function() {
|
||||
var t = requireNative('timers');
|
||||
return t.setTimeout.apply(this, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
global.setInterval = function () {
|
||||
global.setInterval = function() {
|
||||
var t = requireNative('timers');
|
||||
return t.setInterval.apply(this, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
global.clearTimeout = function () {
|
||||
global.clearTimeout = function() {
|
||||
var t = requireNative('timers');
|
||||
return t.clearTimeout.apply(this, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
global.clearInterval = function () {
|
||||
global.clearInterval = function() {
|
||||
var t = requireNative('timers');
|
||||
return t.clearInterval.apply(this, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
var stdout;
|
||||
process.__defineGetter__('stdout', function () {
|
||||
var stdout;
|
||||
process.__defineGetter__('stdout', function() {
|
||||
if (stdout) return stdout;
|
||||
|
||||
var binding = process.binding('stdio'),
|
||||
|
@ -455,18 +472,18 @@ process.__defineGetter__('stdout', function () {
|
|||
stdout = new fs.WriteStream(null, {fd: fd});
|
||||
} else {
|
||||
stdout = new net.Stream(fd);
|
||||
// FIXME Should probably have an option in net.Stream to create a stream from
|
||||
// an existing fd which is writable only. But for now we'll just add
|
||||
// this hack and set the `readable` member to false.
|
||||
// FIXME Should probably have an option in net.Stream to create a
|
||||
// stream from an existing fd which is writable only. But for now
|
||||
// we'll just add this hack and set the `readable` member to false.
|
||||
// Test: ./node test/fixtures/echo.js < /etc/passwd
|
||||
stdout.readable = false;
|
||||
}
|
||||
|
||||
return stdout;
|
||||
});
|
||||
});
|
||||
|
||||
var stdin;
|
||||
process.openStdin = function () {
|
||||
var stdin;
|
||||
process.openStdin = function() {
|
||||
if (stdin) return stdin;
|
||||
|
||||
var binding = process.binding('stdio'),
|
||||
|
@ -484,53 +501,54 @@ process.openStdin = function () {
|
|||
stdin.resume();
|
||||
|
||||
return stdin;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// Lazy load console object
|
||||
global.__defineGetter__('console', function () {
|
||||
// Lazy load console object
|
||||
global.__defineGetter__('console', function() {
|
||||
return requireNative('console');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
global.Buffer = requireNative('buffer').Buffer;
|
||||
global.Buffer = requireNative('buffer').Buffer;
|
||||
|
||||
process.exit = function (code) {
|
||||
process.emit("exit", code || 0);
|
||||
process.exit = function(code) {
|
||||
process.emit('exit', code || 0);
|
||||
process.reallyExit(code || 0);
|
||||
};
|
||||
};
|
||||
|
||||
process.kill = function (pid, sig) {
|
||||
process.kill = function(pid, sig) {
|
||||
sig = sig || 'SIGTERM';
|
||||
if (!lazyConstants()[sig]) throw new Error("Unknown signal: " + sig);
|
||||
if (!lazyConstants()[sig]) throw new Error('Unknown signal: ' + sig);
|
||||
process._kill(pid, lazyConstants()[sig]);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
var cwd = process.cwd();
|
||||
var path = requireNative('path');
|
||||
var cwd = process.cwd();
|
||||
var path = requireNative('path');
|
||||
|
||||
// Make process.argv[0] and process.argv[1] into full paths.
|
||||
if (process.argv[0].indexOf('/') > 0) {
|
||||
// Make process.argv[0] and process.argv[1] into full paths.
|
||||
if (process.argv[0].indexOf('/') > 0) {
|
||||
process.argv[0] = path.join(cwd, process.argv[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (process.argv[1]) {
|
||||
if (process.argv[1]) {
|
||||
// Load module
|
||||
if (process.argv[1].charAt(0) != "/" && !(/^http:\/\//).exec(process.argv[1])) {
|
||||
if (process.argv[1].charAt(0) != '/' &&
|
||||
!(/^http:\/\//).exec(process.argv[1])) {
|
||||
process.argv[1] = path.join(cwd, process.argv[1]);
|
||||
}
|
||||
// REMOVEME: nextTick should not be necessary. This hack to get
|
||||
// test/simple/test-exception-handler2.js working.
|
||||
process.nextTick(module.runMain);
|
||||
|
||||
} else if (process._eval) {
|
||||
} else if (process._eval) {
|
||||
// -e, --eval
|
||||
var rv = new module.Module()._compile('return eval(process._eval)', 'eval');
|
||||
console.log(rv);
|
||||
} else {
|
||||
} else {
|
||||
// REPL
|
||||
module.requireRepl().start();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче