Skip to content

Commit

Permalink
Preserve and use original Array.prototype functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed May 1, 2015
1 parent 697cf48 commit 8d799f1
Showing 1 changed file with 18 additions and 13 deletions.
31 changes: 18 additions & 13 deletions es6-shim.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@
};
var supportsDescriptors = !!Object.defineProperty && arePropertyDescriptorsSupported();

var _forEach = Function.call.bind(Array.prototype.forEach);
var _map = Function.call.bind(Array.prototype.map);
var _reduce = Function.call.bind(Array.prototype.reduce);
var _filter = Function.call.bind(Array.prototype.filter);

var defineProperty = function (object, name, value, force) {
if (!force && name in object) { return; }
if (supportsDescriptors) {
Expand All @@ -70,7 +75,7 @@
// Define configurable, writable and non-enumerable props
// if they don’t exist.
var defineProperties = function (object, map) {
Object.keys(map).forEach(function (name) {
_forEach(Object.keys(map), function (name) {
var method = map[name];
defineProperty(object, name, method, false);
});
Expand Down Expand Up @@ -948,9 +953,9 @@
var keys = Object.keys(Object(source));
var symbols;
if (ES.IsCallable(Object.getOwnPropertySymbols)) {
symbols = Object.getOwnPropertySymbols(Object(source)).filter(isEnumerableOn(source));
symbols = _filter(Object.getOwnPropertySymbols(Object(source)), isEnumerableOn(source));
}
return keys.concat(symbols || []).reduce(assignTo(source), target);
return _reduce(keys.concat(symbols || []), assignTo(source), target);
};

var ObjectShims = {
Expand All @@ -959,7 +964,7 @@
if (!ES.TypeIsObject(target)) {
throw new TypeError('target must be an object');
}
return Array.prototype.reduce.call(sliceArgs.apply(0, arguments), assignReducer);
return _reduce(sliceArgs.apply(0, arguments), assignReducer);
},

// Added in WebKit in https://bugs.webkit.org/show_bug.cgi?id=143865
Expand Down Expand Up @@ -1201,7 +1206,7 @@
// sets up proper prototype chain where possible
Object.setPrototypeOf(OrigRegExp, RegExpShim);
}
Object.getOwnPropertyNames(OrigRegExp).forEach(function (key) {
_forEach(Object.getOwnPropertyNames(OrigRegExp), function (key) {
if (key === '$input') { return; } // Chrome < v39 & Opera < 26 have a nonstandard "$input" property
if (key in noop) { return; }
Value.proxy(OrigRegExp, key, RegExpShim);
Expand All @@ -1222,7 +1227,7 @@
leftContext: '$`',
rightContext: '$\''
};
Object.keys(regexGlobals).forEach(function (prop) {
_forEach(Object.keys(regexGlobals), function (prop) {
if (prop in RegExp && !(regexGlobals[prop] in RegExp)) {
Value.getter(RegExp, regexGlobals[prop], function get() {
return RegExp[prop];
Expand Down Expand Up @@ -1353,8 +1358,8 @@
if (allZero) { return 0; }

var largest = Math.max.apply(Math, numbers);
var divided = numbers.map(function (number) { return number / largest; });
var sum = divided.map(square).reduce(add);
var divided = _map(numbers, function (number) { return number / largest; });
var sum = _reduce(_map(divided, square), add);
return largest * Math.sqrt(sum);
},

Expand Down Expand Up @@ -1595,7 +1600,7 @@
};

var triggerPromiseReactions = function (reactions, x) {
reactions.forEach(function (reaction) {
_forEach(reactions, function (reaction) {
enqueue(function () {
// PromiseReactionTask
var handler = reaction.handler;
Expand Down Expand Up @@ -1865,7 +1870,7 @@
// Their fast path also requires that the environment preserve
// property insertion order, which is not guaranteed by the spec.
var testOrder = function (a) {
var b = Object.keys(a.reduce(function (o, k) {
var b = Object.keys(_reduce(a, function (o, k) {
o[k] = true;
return o;
}, {}));
Expand Down Expand Up @@ -2216,7 +2221,7 @@
var ensureMap = function ensureMap(set) {
if (!set['[[SetData]]']) {
var m = set['[[SetData]]'] = new collectionShims.Map();
Object.keys(set._storage).forEach(function (k) {
_forEach(Object.keys(set._storage), function (k) {
// fast check for leading '$'
if (k.charCodeAt(0) === 36) {
k = k.slice(1);
Expand Down Expand Up @@ -2329,7 +2334,7 @@
iterable = arguments[0];
}
if (Array.isArray(iterable) || Type.string(iterable)) {
Array.prototype.forEach.call(iterable, function (entry) {
_forEach(iterable, function (entry) {
m.set(entry[0], entry[1]);
});
} else if (iterable instanceof Map) {
Expand Down Expand Up @@ -2785,7 +2790,7 @@
sup: function sub() { return ES.CreateHTML(this, 'sup', '', ''); }
};
defineProperties(String.prototype, stringHTMLshims);
Object.keys(stringHTMLshims).forEach(function (key) {
_forEach(Object.keys(stringHTMLshims), function (key) {
var method = String.prototype[key];
var shouldOverwrite = false;
if (ES.IsCallable(method)) {
Expand Down

0 comments on commit 8d799f1

Please sign in to comment.