diff --git a/build.js b/build.js index fe1f2d22b..363959981 100755 --- a/build.js +++ b/build.js @@ -1300,9 +1300,7 @@ // remove `support.nonEnumShadows` from `iteratorTemplate` source = source.replace(getIteratorTemplate(source), function(match) { - return match - .replace(/\s*\|\|\s*support\.nonEnumShadows/, '') - .replace(/(?: *\/\/.*\n)* *["']( *)<% *if *\(support\.nonEnumShadows[\s\S]+?["']\1<% *} *%>.+/, ''); + return match.replace(/(?: *\/\/.*\n)* *["']( *)<% *if *\(support\.nonEnumShadows[\s\S]+?["']\1<% *} *%>.+/, ''); }); return source; @@ -1826,10 +1824,9 @@ dependencyMap.reduceRight = _.without(dependencyMap.reduceRight, 'isString'); if (!isMobile) { - dependencyMap.isEmpty = _.without(dependencyMap.isEmpty, 'isArguments'); - dependencyMap.isEqual = _.without(dependencyMap.isEqual, 'isArguments'); - dependencyMap.isPlainObject = _.without(dependencyMap.isPlainObject, 'isArguments'); - dependencyMap.keys = _.without(dependencyMap.keys, 'isArguments'); + _.each(['isEmpty', 'isEqual', 'isPlainObject', 'keys'], function(methodName) { + dependencyMap[methodName] = _.without(dependencyMap[methodName], 'isArguments'); + }); } } if (isUnderscore) { @@ -3160,6 +3157,17 @@ if (_.size(source.match(/\bfreeExports\b/g)) < 2) { source = removeVar(source, 'freeExports'); } + if (!/^ *support\.(?:skipErrorProps|nonEnumShadows) *=/m.test(source)) { + source = removeVar(source, 'Error'); + source = removeVar(source, 'errorProto'); + source = removeFromCreateIterator(source, 'errorClass'); + source = removeFromCreateIterator(source, 'errorProto'); + + // remove 'Error' from the `contextProps` array + source = source.replace(/^ *var contextProps *=[\s\S]+?;/m, function(match) { + return match.replace(/'Error', */, ''); + }); + } debugSource = cleanupSource(source); source = cleanupSource(source); diff --git a/lodash.js b/lodash.js index f2182367b..ed6e876ac 100644 --- a/lodash.js +++ b/lodash.js @@ -218,7 +218,6 @@ ctorByClass[arrayClass] = Array; ctorByClass[boolClass] = Boolean; ctorByClass[dateClass] = Date; - ctorByClass[errorClass] = Error; ctorByClass[funcClass] = Function; ctorByClass[objectClass] = Object; ctorByClass[numberClass] = Number; @@ -563,7 +562,7 @@ ' <% } %>' + // avoid iterating over `Error.prototype` properties in older IE and Safari - ' <% if (support.enumErrorProps || support.nonEnumShadows) { %>\n' + + ' <% if (support.enumErrorProps) { %>\n' + ' var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n' + ' <% } %>' + @@ -825,16 +824,16 @@ // create the function factory var factory = Function( - 'ctorByClass, errorClass, errorProto, hasOwnProperty, isArguments, ' + - 'isArray, isString, keys, lodash, objectProto, objectTypes, nonEnumProps, ' + - 'stringClass, stringProto, toString', + 'errorClass, errorProto, hasOwnProperty, isArguments, isArray, isString, ' + + 'keys, lodash, objectProto, objectTypes, nonEnumProps, stringClass, ' + + 'stringProto, toString', 'return function(' + args + ') {\n' + iteratorTemplate(data) + '\n}' ); // return the compiled function return factory( - ctorByClass, errorClass, errorProto, hasOwnProperty, isArguments, - isArray, isString, keys, lodash, objectProto, objectTypes, nonEnumProps, - stringClass, stringProto, toString + errorClass, errorProto, hasOwnProperty, isArguments, isArray, isString, + keys, lodash, objectProto, objectTypes, nonEnumProps, stringClass, + stringProto, toString ); }