diff --git a/lib/util.js b/lib/util.js index 0239434457..ae6cc2da6a 100644 --- a/lib/util.js +++ b/lib/util.js @@ -140,12 +140,13 @@ exports.inspect = function(obj, showHidden, depth, colors) { // Functions without properties can be shortcutted. if (typeof value === 'function' && keys.length === 0) { - if (isRegExp(value)) { - return stylize('' + value, 'regexp'); - } else { - var name = value.name ? ': ' + value.name : ''; - return stylize('[Function' + name + ']', 'special'); - } + var name = value.name ? ': ' + value.name : ''; + return stylize('[Function' + name + ']', 'special'); + } + + // RegExp without properties can be shortcutted + if (isRegExp(value) && keys.length === 0) { + return stylize('' + value, 'regexp'); } // Dates without properties can be shortcutted @@ -166,11 +167,16 @@ exports.inspect = function(obj, showHidden, depth, colors) { // Make functions say that they are functions if (typeof value === 'function') { var n = value.name ? ': ' + value.name : ''; - base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']'; + base = ' [Function' + n + ']'; } else { base = ''; } + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + value; + } + // Make dates with properties first say the date if (isDate(value)) { base = ' ' + value.toUTCString(); @@ -284,15 +290,15 @@ function isArray(ar) { function isRegExp(re) { - var s = '' + re; return re instanceof RegExp || // easy case // duck-type for context-switching evalcx case - typeof(re) === 'function' && + typeof(re) === 'object' && + re.constructor && re.constructor.name === 'RegExp' && re.compile && re.test && re.exec && - s.match(/^\/.*\/[gim]{0,3}$/); + ('' + re).match(/^\/.*\/[gim]{0,3}$/); }