Browse files

Fixes #1260

RegExp object is no longer Function.
http://code.google.com/p/v8/issues/detail?id=617
  • Loading branch information...
1 parent 69d20f5 commit 6dd04b2d7695fa23ae00fa3f7664e70ebaf29d93 @koichik committed Jul 3, 2011
Showing with 16 additions and 10 deletions.
  1. +16 −10 lib/util.js
View
26 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}$/);
}

0 comments on commit 6dd04b2

Please sign in to comment.