diff --git a/lib/console.js b/lib/console.js new file mode 100644 index 0000000000..2357131279 --- /dev/null +++ b/lib/console.js @@ -0,0 +1,83 @@ +var writeError = process.binding('stdio').writeError; + +// console object +var formatRegExp = /%[sdj]/g; +function format (f) { + if (typeof f !== 'string') { + var objects = [], util = require('util'); + for (var i = 0; i < arguments.length; i++) { + objects.push(util.inspect(arguments[i])); + } + return objects.join(' '); + } + + + var i = 1; + var args = arguments; + var str = String(f).replace(formatRegExp, function (x) { + switch (x) { + case '%s': return args[i++]; + case '%d': return +args[i++]; + case '%j': return JSON.stringify(args[i++]); + default: + return x; + } + }); + for (var len = args.length; i < len; ++i) { + str += ' ' + args[i]; + } + return str; +} + + +exports.log = function () { + process.stdout.write(format.apply(this, arguments) + '\n'); +}; + + +exports.info = exports.log; + + +exports.warn = function () { + writeError(format.apply(this, arguments) + '\n'); +}; + + +exports.error = exports.warn; + + +exports.dir = function(object){ + var util = require('util'); + process.stdout.write(util.inspect(object) + '\n'); +}; + + +var times = {}; +exports.time = function(label){ + times[label] = Date.now(); +}; + + +exports.timeEnd = function(label){ + var duration = Date.now() - times[label]; + exports.log('%s: %dms', label, duration); +}; + + +exports.trace = function(label){ + // TODO probably can to do this better with V8's debug object once that is + // exposed. + var err = new Error; + err.name = 'Trace'; + err.message = label || ''; + Error.captureStackTrace(err, arguments.callee); + console.error(err.stack); +}; + + +exports.assert = function(expression){ + if(!expression){ + var arr = Array.prototype.slice.call(arguments, 1); + process.assert(false, format.apply(this, arr)); + } +}; diff --git a/src/node.js b/src/node.js index 10925766bf..4f4f22d8a4 100644 --- a/src/node.js +++ b/src/node.js @@ -27,7 +27,6 @@ process.assert = function (x, msg) { if (!x) throw new Error(msg || "assertion error"); }; -var writeError = process.binding('stdio').writeError; var evals = process.binding('evals'); // lazy loaded. @@ -115,9 +114,7 @@ var module = (function () { var debugLevel = parseInt(process.env["NODE_DEBUG"], 16); function debug (x) { - if (debugLevel & 1) { - process.binding('stdio').writeError(x + "\n"); - } + if (debugLevel & 1) console.error(x); } @@ -490,80 +487,11 @@ process.openStdin = function () { }; -// console object -var formatRegExp = /%[sdj]/g; -function format (f) { - if (typeof f !== 'string') { - var objects = [], util = requireNative('util'); - for (var i = 0; i < arguments.length; i++) { - objects.push(util.inspect(arguments[i])); - } - return objects.join(' '); - } - - - var i = 1; - var args = arguments; - var str = String(f).replace(formatRegExp, function (x) { - switch (x) { - case '%s': return args[i++]; - case '%d': return +args[i++]; - case '%j': return JSON.stringify(args[i++]); - default: - return x; - } - }); - for (var len = args.length; i < len; ++i) { - str += ' ' + args[i]; - } - return str; -} - -global.console = {}; - -global.console.log = function () { - process.stdout.write(format.apply(this, arguments) + '\n'); -}; - -global.console.info = global.console.log; - -global.console.warn = function () { - writeError(format.apply(this, arguments) + '\n'); -}; - -global.console.error = global.console.warn; - -global.console.dir = function(object){ - var util = requireNative('util'); - process.stdout.write(util.inspect(object) + '\n'); -}; - -var times = {}; -global.console.time = function(label){ - times[label] = Date.now(); -}; - -global.console.timeEnd = function(label){ - var duration = Date.now() - times[label]; - global.console.log('%s: %dms', label, duration); -}; - -global.console.trace = function(label){ - // TODO probably can to do this better with V8's debug object once that is - // exposed. - var err = new Error; - err.name = 'Trace'; - err.message = label || ''; - Error.captureStackTrace(err, arguments.callee); - console.error(err.stack); -}; +// Lazy load console object +global.__defineGetter__('console', function () { + return requireNative('console'); +}); -global.console.assert = function(expression){ - if(!expression){ - var arr = Array.prototype.slice.call(arguments, 1); - process.assert(false, format.apply(this, arr)); - } -}; global.Buffer = requireNative('buffer').Buffer;