|
|
@ -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}$/); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|