float.patch (16278B)
1 diff --git a/lib/util.js b/lib/util.js 2 index a03e874..9074e8e 100644 3 --- a/lib/util.js 4 +++ b/lib/util.js 5 @@ -19,430 +19,6 @@ 6 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 7 // USE OR OTHER DEALINGS IN THE SOFTWARE. 8 9 -var formatRegExp = /%[sdj%]/g; 10 -exports.format = function(f) { 11 - if (!isString(f)) { 12 - var objects = []; 13 - for (var i = 0; i < arguments.length; i++) { 14 - objects.push(inspect(arguments[i])); 15 - } 16 - return objects.join(' '); 17 - } 18 - 19 - var i = 1; 20 - var args = arguments; 21 - var len = args.length; 22 - var str = String(f).replace(formatRegExp, function(x) { 23 - if (x === '%%') return '%'; 24 - if (i >= len) return x; 25 - switch (x) { 26 - case '%s': return String(args[i++]); 27 - case '%d': return Number(args[i++]); 28 - case '%j': 29 - try { 30 - return JSON.stringify(args[i++]); 31 - } catch (_) { 32 - return '[Circular]'; 33 - } 34 - default: 35 - return x; 36 - } 37 - }); 38 - for (var x = args[i]; i < len; x = args[++i]) { 39 - if (isNull(x) || !isObject(x)) { 40 - str += ' ' + x; 41 - } else { 42 - str += ' ' + inspect(x); 43 - } 44 - } 45 - return str; 46 -}; 47 - 48 - 49 -// Mark that a method should not be used. 50 -// Returns a modified function which warns once by default. 51 -// If --no-deprecation is set, then it is a no-op. 52 -exports.deprecate = function(fn, msg) { 53 - // Allow for deprecating things in the process of starting up. 54 - if (isUndefined(global.process)) { 55 - return function() { 56 - return exports.deprecate(fn, msg).apply(this, arguments); 57 - }; 58 - } 59 - 60 - if (process.noDeprecation === true) { 61 - return fn; 62 - } 63 - 64 - var warned = false; 65 - function deprecated() { 66 - if (!warned) { 67 - if (process.throwDeprecation) { 68 - throw new Error(msg); 69 - } else if (process.traceDeprecation) { 70 - console.trace(msg); 71 - } else { 72 - console.error(msg); 73 - } 74 - warned = true; 75 - } 76 - return fn.apply(this, arguments); 77 - } 78 - 79 - return deprecated; 80 -}; 81 - 82 - 83 -var debugs = {}; 84 -var debugEnviron; 85 -exports.debuglog = function(set) { 86 - if (isUndefined(debugEnviron)) 87 - debugEnviron = process.env.NODE_DEBUG || ''; 88 - set = set.toUpperCase(); 89 - if (!debugs[set]) { 90 - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { 91 - var pid = process.pid; 92 - debugs[set] = function() { 93 - var msg = exports.format.apply(exports, arguments); 94 - console.error('%s %d: %s', set, pid, msg); 95 - }; 96 - } else { 97 - debugs[set] = function() {}; 98 - } 99 - } 100 - return debugs[set]; 101 -}; 102 - 103 - 104 -/** 105 - * Echos the value of a value. Trys to print the value out 106 - * in the best way possible given the different types. 107 - * 108 - * @param {Object} obj The object to print out. 109 - * @param {Object} opts Optional options object that alters the output. 110 - */ 111 -/* legacy: obj, showHidden, depth, colors*/ 112 -function inspect(obj, opts) { 113 - // default options 114 - var ctx = { 115 - seen: [], 116 - stylize: stylizeNoColor 117 - }; 118 - // legacy... 119 - if (arguments.length >= 3) ctx.depth = arguments[2]; 120 - if (arguments.length >= 4) ctx.colors = arguments[3]; 121 - if (isBoolean(opts)) { 122 - // legacy... 123 - ctx.showHidden = opts; 124 - } else if (opts) { 125 - // got an "options" object 126 - exports._extend(ctx, opts); 127 - } 128 - // set default options 129 - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; 130 - if (isUndefined(ctx.depth)) ctx.depth = 2; 131 - if (isUndefined(ctx.colors)) ctx.colors = false; 132 - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; 133 - if (ctx.colors) ctx.stylize = stylizeWithColor; 134 - return formatValue(ctx, obj, ctx.depth); 135 -} 136 -exports.inspect = inspect; 137 - 138 - 139 -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics 140 -inspect.colors = { 141 - 'bold' : [1, 22], 142 - 'italic' : [3, 23], 143 - 'underline' : [4, 24], 144 - 'inverse' : [7, 27], 145 - 'white' : [37, 39], 146 - 'grey' : [90, 39], 147 - 'black' : [30, 39], 148 - 'blue' : [34, 39], 149 - 'cyan' : [36, 39], 150 - 'green' : [32, 39], 151 - 'magenta' : [35, 39], 152 - 'red' : [31, 39], 153 - 'yellow' : [33, 39] 154 -}; 155 - 156 -// Don't use 'blue' not visible on cmd.exe 157 -inspect.styles = { 158 - 'special': 'cyan', 159 - 'number': 'yellow', 160 - 'boolean': 'yellow', 161 - 'undefined': 'grey', 162 - 'null': 'bold', 163 - 'string': 'green', 164 - 'date': 'magenta', 165 - // "name": intentionally not styling 166 - 'regexp': 'red' 167 -}; 168 - 169 - 170 -function stylizeWithColor(str, styleType) { 171 - var style = inspect.styles[styleType]; 172 - 173 - if (style) { 174 - return '\u001b[' + inspect.colors[style][0] + 'm' + str + 175 - '\u001b[' + inspect.colors[style][1] + 'm'; 176 - } else { 177 - return str; 178 - } 179 -} 180 - 181 - 182 -function stylizeNoColor(str, styleType) { 183 - return str; 184 -} 185 - 186 - 187 -function arrayToHash(array) { 188 - var hash = {}; 189 - 190 - array.forEach(function(val, idx) { 191 - hash[val] = true; 192 - }); 193 - 194 - return hash; 195 -} 196 - 197 - 198 -function formatValue(ctx, value, recurseTimes) { 199 - // Provide a hook for user-specified inspect functions. 200 - // Check that value is an object with an inspect function on it 201 - if (ctx.customInspect && 202 - value && 203 - isFunction(value.inspect) && 204 - // Filter out the util module, it's inspect function is special 205 - value.inspect !== exports.inspect && 206 - // Also filter out any prototype objects using the circular check. 207 - !(value.constructor && value.constructor.prototype === value)) { 208 - var ret = value.inspect(recurseTimes, ctx); 209 - if (!isString(ret)) { 210 - ret = formatValue(ctx, ret, recurseTimes); 211 - } 212 - return ret; 213 - } 214 - 215 - // Primitive types cannot have properties 216 - var primitive = formatPrimitive(ctx, value); 217 - if (primitive) { 218 - return primitive; 219 - } 220 - 221 - // Look up the keys of the object. 222 - var keys = Object.keys(value); 223 - var visibleKeys = arrayToHash(keys); 224 - 225 - if (ctx.showHidden) { 226 - keys = Object.getOwnPropertyNames(value); 227 - } 228 - 229 - // Some type of object without properties can be shortcutted. 230 - if (keys.length === 0) { 231 - if (isFunction(value)) { 232 - var name = value.name ? ': ' + value.name : ''; 233 - return ctx.stylize('[Function' + name + ']', 'special'); 234 - } 235 - if (isRegExp(value)) { 236 - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 237 - } 238 - if (isDate(value)) { 239 - return ctx.stylize(Date.prototype.toString.call(value), 'date'); 240 - } 241 - if (isError(value)) { 242 - return formatError(value); 243 - } 244 - } 245 - 246 - var base = '', array = false, braces = ['{', '}']; 247 - 248 - // Make Array say that they are Array 249 - if (isArray(value)) { 250 - array = true; 251 - braces = ['[', ']']; 252 - } 253 - 254 - // Make functions say that they are functions 255 - if (isFunction(value)) { 256 - var n = value.name ? ': ' + value.name : ''; 257 - base = ' [Function' + n + ']'; 258 - } 259 - 260 - // Make RegExps say that they are RegExps 261 - if (isRegExp(value)) { 262 - base = ' ' + RegExp.prototype.toString.call(value); 263 - } 264 - 265 - // Make dates with properties first say the date 266 - if (isDate(value)) { 267 - base = ' ' + Date.prototype.toUTCString.call(value); 268 - } 269 - 270 - // Make error with message first say the error 271 - if (isError(value)) { 272 - base = ' ' + formatError(value); 273 - } 274 - 275 - if (keys.length === 0 && (!array || value.length == 0)) { 276 - return braces[0] + base + braces[1]; 277 - } 278 - 279 - if (recurseTimes < 0) { 280 - if (isRegExp(value)) { 281 - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 282 - } else { 283 - return ctx.stylize('[Object]', 'special'); 284 - } 285 - } 286 - 287 - ctx.seen.push(value); 288 - 289 - var output; 290 - if (array) { 291 - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); 292 - } else { 293 - output = keys.map(function(key) { 294 - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); 295 - }); 296 - } 297 - 298 - ctx.seen.pop(); 299 - 300 - return reduceToSingleString(output, base, braces); 301 -} 302 - 303 - 304 -function formatPrimitive(ctx, value) { 305 - if (isUndefined(value)) 306 - return ctx.stylize('undefined', 'undefined'); 307 - if (isString(value)) { 308 - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') 309 - .replace(/'/g, "\\'") 310 - .replace(/\\"/g, '"') + '\''; 311 - return ctx.stylize(simple, 'string'); 312 - } 313 - if (isNumber(value)) { 314 - // Format -0 as '-0'. Strict equality won't distinguish 0 from -0, 315 - // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 . 316 - if (value === 0 && 1 / value < 0) 317 - return ctx.stylize('-0', 'number'); 318 - return ctx.stylize('' + value, 'number'); 319 - } 320 - if (isBoolean(value)) 321 - return ctx.stylize('' + value, 'boolean'); 322 - // For some reason typeof null is "object", so special case here. 323 - if (isNull(value)) 324 - return ctx.stylize('null', 'null'); 325 -} 326 - 327 - 328 -function formatError(value) { 329 - return '[' + Error.prototype.toString.call(value) + ']'; 330 -} 331 - 332 - 333 -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { 334 - var output = []; 335 - for (var i = 0, l = value.length; i < l; ++i) { 336 - if (hasOwnProperty(value, String(i))) { 337 - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 338 - String(i), true)); 339 - } else { 340 - output.push(''); 341 - } 342 - } 343 - keys.forEach(function(key) { 344 - if (!key.match(/^\d+$/)) { 345 - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 346 - key, true)); 347 - } 348 - }); 349 - return output; 350 -} 351 - 352 - 353 -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { 354 - var name, str, desc; 355 - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; 356 - if (desc.get) { 357 - if (desc.set) { 358 - str = ctx.stylize('[Getter/Setter]', 'special'); 359 - } else { 360 - str = ctx.stylize('[Getter]', 'special'); 361 - } 362 - } else { 363 - if (desc.set) { 364 - str = ctx.stylize('[Setter]', 'special'); 365 - } 366 - } 367 - if (!hasOwnProperty(visibleKeys, key)) { 368 - name = '[' + key + ']'; 369 - } 370 - if (!str) { 371 - if (ctx.seen.indexOf(desc.value) < 0) { 372 - if (isNull(recurseTimes)) { 373 - str = formatValue(ctx, desc.value, null); 374 - } else { 375 - str = formatValue(ctx, desc.value, recurseTimes - 1); 376 - } 377 - if (str.indexOf('\n') > -1) { 378 - if (array) { 379 - str = str.split('\n').map(function(line) { 380 - return ' ' + line; 381 - }).join('\n').substr(2); 382 - } else { 383 - str = '\n' + str.split('\n').map(function(line) { 384 - return ' ' + line; 385 - }).join('\n'); 386 - } 387 - } 388 - } else { 389 - str = ctx.stylize('[Circular]', 'special'); 390 - } 391 - } 392 - if (isUndefined(name)) { 393 - if (array && key.match(/^\d+$/)) { 394 - return str; 395 - } 396 - name = JSON.stringify('' + key); 397 - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { 398 - name = name.substr(1, name.length - 2); 399 - name = ctx.stylize(name, 'name'); 400 - } else { 401 - name = name.replace(/'/g, "\\'") 402 - .replace(/\\"/g, '"') 403 - .replace(/(^"|"$)/g, "'"); 404 - name = ctx.stylize(name, 'string'); 405 - } 406 - } 407 - 408 - return name + ': ' + str; 409 -} 410 - 411 - 412 -function reduceToSingleString(output, base, braces) { 413 - var numLinesEst = 0; 414 - var length = output.reduce(function(prev, cur) { 415 - numLinesEst++; 416 - if (cur.indexOf('\n') >= 0) numLinesEst++; 417 - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; 418 - }, 0); 419 - 420 - if (length > 60) { 421 - return braces[0] + 422 - (base === '' ? '' : base + '\n ') + 423 - ' ' + 424 - output.join(',\n ') + 425 - ' ' + 426 - braces[1]; 427 - } 428 - 429 - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; 430 -} 431 - 432 - 433 // NOTE: These type checking functions intentionally don't use `instanceof` 434 // because it is fragile and can be easily faked with `Object.create()`. 435 function isArray(ar) { 436 @@ -522,166 +98,10 @@ function isPrimitive(arg) { 437 exports.isPrimitive = isPrimitive; 438 439 function isBuffer(arg) { 440 - return arg instanceof Buffer; 441 + return Buffer.isBuffer(arg); 442 } 443 exports.isBuffer = isBuffer; 444 445 function objectToString(o) { 446 return Object.prototype.toString.call(o); 447 -} 448 - 449 - 450 -function pad(n) { 451 - return n < 10 ? '0' + n.toString(10) : n.toString(10); 452 -} 453 - 454 - 455 -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 456 - 'Oct', 'Nov', 'Dec']; 457 - 458 -// 26 Feb 16:19:34 459 -function timestamp() { 460 - var d = new Date(); 461 - var time = [pad(d.getHours()), 462 - pad(d.getMinutes()), 463 - pad(d.getSeconds())].join(':'); 464 - return [d.getDate(), months[d.getMonth()], time].join(' '); 465 -} 466 - 467 - 468 -// log is just a thin wrapper to console.log that prepends a timestamp 469 -exports.log = function() { 470 - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); 471 -}; 472 - 473 - 474 -/** 475 - * Inherit the prototype methods from one constructor into another. 476 - * 477 - * The Function.prototype.inherits from lang.js rewritten as a standalone 478 - * function (not on Function.prototype). NOTE: If this file is to be loaded 479 - * during bootstrapping this function needs to be rewritten using some native 480 - * functions as prototype setup using normal JavaScript does not work as 481 - * expected during bootstrapping (see mirror.js in r114903). 482 - * 483 - * @param {function} ctor Constructor function which needs to inherit the 484 - * prototype. 485 - * @param {function} superCtor Constructor function to inherit prototype from. 486 - */ 487 -exports.inherits = function(ctor, superCtor) { 488 - ctor.super_ = superCtor; 489 - ctor.prototype = Object.create(superCtor.prototype, { 490 - constructor: { 491 - value: ctor, 492 - enumerable: false, 493 - writable: true, 494 - configurable: true 495 - } 496 - }); 497 -}; 498 - 499 -exports._extend = function(origin, add) { 500 - // Don't do anything if add isn't an object 501 - if (!add || !isObject(add)) return origin; 502 - 503 - var keys = Object.keys(add); 504 - var i = keys.length; 505 - while (i--) { 506 - origin[keys[i]] = add[keys[i]]; 507 - } 508 - return origin; 509 -}; 510 - 511 -function hasOwnProperty(obj, prop) { 512 - return Object.prototype.hasOwnProperty.call(obj, prop); 513 -} 514 - 515 - 516 -// Deprecated old stuff. 517 - 518 -exports.p = exports.deprecate(function() { 519 - for (var i = 0, len = arguments.length; i < len; ++i) { 520 - console.error(exports.inspect(arguments[i])); 521 - } 522 -}, 'util.p: Use console.error() instead'); 523 - 524 - 525 -exports.exec = exports.deprecate(function() { 526 - return require('child_process').exec.apply(this, arguments); 527 -}, 'util.exec is now called `child_process.exec`.'); 528 - 529 - 530 -exports.print = exports.deprecate(function() { 531 - for (var i = 0, len = arguments.length; i < len; ++i) { 532 - process.stdout.write(String(arguments[i])); 533 - } 534 -}, 'util.print: Use console.log instead'); 535 - 536 - 537 -exports.puts = exports.deprecate(function() { 538 - for (var i = 0, len = arguments.length; i < len; ++i) { 539 - process.stdout.write(arguments[i] + '\n'); 540 - } 541 -}, 'util.puts: Use console.log instead'); 542 - 543 - 544 -exports.debug = exports.deprecate(function(x) { 545 - process.stderr.write('DEBUG: ' + x + '\n'); 546 -}, 'util.debug: Use console.error instead'); 547 - 548 - 549 -exports.error = exports.deprecate(function(x) { 550 - for (var i = 0, len = arguments.length; i < len; ++i) { 551 - process.stderr.write(arguments[i] + '\n'); 552 - } 553 -}, 'util.error: Use console.error instead'); 554 - 555 - 556 -exports.pump = exports.deprecate(function(readStream, writeStream, callback) { 557 - var callbackCalled = false; 558 - 559 - function call(a, b, c) { 560 - if (callback && !callbackCalled) { 561 - callback(a, b, c); 562 - callbackCalled = true; 563 - } 564 - } 565 - 566 - readStream.addListener('data', function(chunk) { 567 - if (writeStream.write(chunk) === false) readStream.pause(); 568 - }); 569 - 570 - writeStream.addListener('drain', function() { 571 - readStream.resume(); 572 - }); 573 - 574 - readStream.addListener('end', function() { 575 - writeStream.end(); 576 - }); 577 - 578 - readStream.addListener('close', function() { 579 - call(); 580 - }); 581 - 582 - readStream.addListener('error', function(err) { 583 - writeStream.end(); 584 - call(err); 585 - }); 586 - 587 - writeStream.addListener('error', function(err) { 588 - readStream.destroy(); 589 - call(err); 590 - }); 591 -}, 'util.pump(): Use readableStream.pipe() instead'); 592 - 593 - 594 -var uv; 595 -exports._errnoException = function(err, syscall) { 596 - if (isUndefined(uv)) uv = process.binding('uv'); 597 - var errname = uv.errname(err); 598 - var e = new Error(syscall + ' ' + errname); 599 - e.code = errname; 600 - e.errno = errname; 601 - e.syscall = syscall; 602 - return e; 603 -}; 604 +}