summaryrefslogtreecommitdiffstats
path: root/js/vendor/es6-shim
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/es6-shim')
-rw-r--r--js/vendor/es6-shim/.bower.json8
-rw-r--r--js/vendor/es6-shim/CHANGELOG.md17
-rw-r--r--js/vendor/es6-shim/bower.json2
-rw-r--r--js/vendor/es6-shim/component.json2
-rw-r--r--js/vendor/es6-shim/es6-sham.js20
-rw-r--r--js/vendor/es6-shim/es6-sham.map2
-rw-r--r--js/vendor/es6-shim/es6-sham.min.js2
-rw-r--r--js/vendor/es6-shim/es6-shim.js500
-rw-r--r--js/vendor/es6-shim/es6-shim.map2
-rw-r--r--js/vendor/es6-shim/es6-shim.min.js5
-rw-r--r--js/vendor/es6-shim/package.json6
11 files changed, 319 insertions, 247 deletions
diff --git a/js/vendor/es6-shim/.bower.json b/js/vendor/es6-shim/.bower.json
index ab5d66177..354c79ee2 100644
--- a/js/vendor/es6-shim/.bower.json
+++ b/js/vendor/es6-shim/.bower.json
@@ -1,6 +1,6 @@
{
"name": "es6-shim",
- "version": "0.28.2",
+ "version": "0.30.0",
"repo": "paulmillr/es6-shim",
"description": "ECMAScript 6 (Harmony) compatibility shims for legacy JavaScript engines",
"keywords": [
@@ -28,11 +28,11 @@
"test"
],
"homepage": "https://github.com/paulmillr/es6-shim",
- "_release": "0.28.2",
+ "_release": "0.30.0",
"_resolution": {
"type": "version",
- "tag": "0.28.2",
- "commit": "f5a6b47afa92d81e38fe1e6e40854f07dcbe1ef8"
+ "tag": "0.30.0",
+ "commit": "ba581d8a4b9c1bdbadc71188d18a011f6be638a0"
},
"_source": "git://github.com/paulmillr/es6-shim.git",
"_target": "~0.*",
diff --git a/js/vendor/es6-shim/CHANGELOG.md b/js/vendor/es6-shim/CHANGELOG.md
index 7e71f6732..976cdef7b 100644
--- a/js/vendor/es6-shim/CHANGELOG.md
+++ b/js/vendor/es6-shim/CHANGELOG.md
@@ -1,5 +1,22 @@
# es6-shim x.x.x (not yet released)
+# es6-shim 0.30.0 (26 Apr 2015)
+* `Map` and `Set` methods are not generic, and must only be called on valid `Map` and `Set` objects.
+* Use the native `Number#clz` (in Safari 8, eg) inside `Math.clz32`
+
+# es6-shim 0.29.0 (26 Apr 2015)
+* Test on `io.js` `v1.7` and `v1.8`
+* Ensure that shallowly wrapped Maps’ and Sets’ prototypes aren't one level too far away.
+* Update `chai` and use new matchers
+* Avoid reassigning argument variables to avoid deoptimizations
+* Ensure that ES3 browsers get both `Object.is` and `Object.assign`
+* Improve `Object.assign` to avoid leaking arguments in v8
+* Ensuring `Number.parseInt === parseInt` (failed in FF 37)
+* a little more accurate Math.cbrt (#335)
+* Test cleanups
+* Adding `Symbol.unscopables` tests
+* Adding tests to ensure that default iterators on builtins === the appropriate prototype function.
+
# es6-shim 0.28.2 (13 Apr 2015)
* `Map` and `Set` should have an arity of 0.
diff --git a/js/vendor/es6-shim/bower.json b/js/vendor/es6-shim/bower.json
index 2f5415ca4..386992c6b 100644
--- a/js/vendor/es6-shim/bower.json
+++ b/js/vendor/es6-shim/bower.json
@@ -1,6 +1,6 @@
{
"name": "es6-shim",
- "version": "0.28.2",
+ "version": "0.30.0",
"repo": "paulmillr/es6-shim",
"description": "ECMAScript 6 (Harmony) compatibility shims for legacy JavaScript engines",
"keywords": [
diff --git a/js/vendor/es6-shim/component.json b/js/vendor/es6-shim/component.json
index d74d3ace0..7e18ff677 100644
--- a/js/vendor/es6-shim/component.json
+++ b/js/vendor/es6-shim/component.json
@@ -1,6 +1,6 @@
{
"name": "es6-shim",
- "version": "0.28.2",
+ "version": "0.30.0",
"repo": "paulmillr/es6-shim",
"description": "ECMAScript 6 (Harmony) compatibility shims for legacy JavaScript engines",
"keywords": [
diff --git a/js/vendor/es6-shim/es6-sham.js b/js/vendor/es6-shim/es6-sham.js
index 105f09d16..570deb3f0 100644
--- a/js/vendor/es6-shim/es6-sham.js
+++ b/js/vendor/es6-shim/es6-sham.js
@@ -48,8 +48,16 @@
/*jshint proto: true */
// @author Andrea Giammarchi - @WebReflection
- // define into target descriptors from source
+
+ var getOwnPropertyNames = Object.getOwnPropertyNames;
+ var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+ var create = Object.create;
+ var defineProperty = Object.defineProperty;
+ var getPrototypeOf = Object.getPrototypeOf;
+ var objProto = Object.prototype;
+
var copyDescriptors = function (target, source) {
+ // define into target descriptors from source
getOwnPropertyNames(source).forEach(function (key) {
defineProperty(
target,
@@ -63,17 +71,11 @@
var createAndCopy = function (origin, proto) {
return copyDescriptors(create(proto), origin);
};
- var create = Object.create;
- var defineProperty = Object.defineProperty;
- var getPrototypeOf = Object.getPrototypeOf;
- var getOwnPropertyNames = Object.getOwnPropertyNames;
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- var proto = Object.prototype;
var set, setPrototypeOf;
try {
// this might fail for various reasons
// ignore if Chrome cought it at runtime
- set = getOwnPropertyDescriptor(proto, '__proto__').set;
+ set = getOwnPropertyDescriptor(objProto, '__proto__').set;
set.call({}, null);
// setter not poisoned, it can promote
// Firefox, Chrome
@@ -90,7 +92,7 @@
setPrototypeOf = createAndCopy;
} else {
// verify if null objects are buggy
- set.__proto__ = proto;
+ set.__proto__ = objProto;
// if null objects are buggy
// nodejs 0.8 to 0.10
if (set instanceof Object) {
diff --git a/js/vendor/es6-shim/es6-sham.map b/js/vendor/es6-shim/es6-sham.map
index 6a2279c83..1e11c311a 100644
--- a/js/vendor/es6-shim/es6-sham.map
+++ b/js/vendor/es6-shim/es6-sham.map
@@ -1 +1 @@
-{"version":3,"sources":["es6-sham.js"],"names":["root","factory","define","amd","exports","module","returnExports","this","getGlobal","Function","globals","Object","setPrototypeOf","copyDescriptors","target","source","getOwnPropertyNames","forEach","key","defineProperty","getOwnPropertyDescriptor","createAndCopy","origin","proto","create","getPrototypeOf","prototype","set","call","e","__proto__"],"mappings":";;;;;;;;;CAYC,SAAUA,EAAMC,GAEf,SAAWC,UAAW,YAAcA,OAAOC,IAAK,CAE9CD,OAAOD,OACF,UAAWG,WAAY,SAAU,CAItCC,OAAOD,QAAUH,QACZ,CAELD,EAAKM,cAAgBL,OAEvBM,KAAM,WACN,YAGA,IAAIC,GAAY,GAAIC,UAAS,eAG7B,IAAIC,GAAUF,GACd,IAAIG,GAASD,EAAQC,QAWpB,WACC,GAAIA,EAAOC,eAAgB,CAAE,OAK7B,GAAIC,GAAkB,SAAUC,EAAQC,GACtCC,EAAoBD,GAAQE,QAAQ,SAAUC,GAC5CC,EACEL,EACAI,EACAE,EAAyBL,EAAQG,KAGrC,OAAOJ,GAGT,IAAIO,GAAgB,SAAUC,EAAQC,GACpC,MAAOV,GAAgBW,EAAOD,GAAQD,GAExC,IAAIE,GAASb,EAAOa,MACpB,IAAIL,GAAiBR,EAAOQ,cAC5B,IAAIM,GAAiBd,EAAOc,cAC5B,IAAIT,GAAsBL,EAAOK,mBACjC,IAAII,GAA2BT,EAAOS,wBACtC,IAAIG,GAAQZ,EAAOe,SACnB,IAAIC,GAAKf,CACT,KAGEe,EAAMP,EAAyBG,EAAO,aAAaI,GACnDA,GAAIC,QAAS,KAGbhB,GAAiB,SAAUU,EAAQC,GACjCI,EAAIC,KAAKN,EAAQC,EACjB,OAAOD,IAET,MAAOO,GAEPF,GAAOG,UAAW,KAGlB,IAAIH,YAAehB,GAAQ,CACzBC,EAAiBS,MACZ,CAELM,EAAIG,UAAYP,CAGhB,IAAII,YAAehB,GAAQ,CACzBC,EAAiB,SAAUU,EAAQC,GAEjCD,EAAOQ,UAAYP,CACnB,OAAOD,QAEJ,CAGLV,EAAiB,SAAUU,EAAQC,GAEjC,MAAOE,GAAeH,IAElBA,EAAOQ,UAAYP,EAAQD,GAE7BD,EAAcC,EAAQC,MAKhCZ,EAAOC,eAAiBA"} \ No newline at end of file
+{"version":3,"sources":["es6-sham.js"],"names":["root","factory","define","amd","exports","module","returnExports","this","getGlobal","Function","globals","Object","setPrototypeOf","getOwnPropertyNames","getOwnPropertyDescriptor","create","defineProperty","getPrototypeOf","objProto","prototype","copyDescriptors","target","source","forEach","key","createAndCopy","origin","proto","set","call","e","__proto__"],"mappings":";;;;;;;;;CAYC,SAAUA,EAAMC,GAEf,SAAWC,UAAW,YAAcA,OAAOC,IAAK,CAE9CD,OAAOD,OACF,UAAWG,WAAY,SAAU,CAItCC,OAAOD,QAAUH,QACZ,CAELD,EAAKM,cAAgBL,OAEvBM,KAAM,WACN,YAGA,IAAIC,GAAY,GAAIC,UAAS,eAG7B,IAAIC,GAAUF,GACd,IAAIG,GAASD,EAAQC,QAWpB,WACC,GAAIA,EAAOC,eAAgB,CAAE,OAK7B,GAAIC,GAAsBF,EAAOE,mBACjC,IAAIC,GAA2BH,EAAOG,wBACtC,IAAIC,GAASJ,EAAOI,MACpB,IAAIC,GAAiBL,EAAOK,cAC5B,IAAIC,GAAiBN,EAAOM,cAC5B,IAAIC,GAAWP,EAAOQ,SAEtB,IAAIC,GAAkB,SAAUC,EAAQC,GAEtCT,EAAoBS,GAAQC,QAAQ,SAAUC,GAC5CR,EACEK,EACAG,EACAV,EAAyBQ,EAAQE,KAGrC,OAAOH,GAGT,IAAII,GAAgB,SAAUC,EAAQC,GACpC,MAAOP,GAAgBL,EAAOY,GAAQD,GAExC,IAAIE,GAAKhB,CACT,KAGEgB,EAAMd,EAAyBI,EAAU,aAAaU,GACtDA,GAAIC,QAAS,KAGbjB,GAAiB,SAAUc,EAAQC,GACjCC,EAAIC,KAAKH,EAAQC,EACjB,OAAOD,IAET,MAAOI,GAEPF,GAAOG,UAAW,KAGlB,IAAIH,YAAejB,GAAQ,CACzBC,EAAiBa,MACZ,CAELG,EAAIG,UAAYb,CAGhB,IAAIU,YAAejB,GAAQ,CACzBC,EAAiB,SAAUc,EAAQC,GAEjCD,EAAOK,UAAYJ,CACnB,OAAOD,QAEJ,CAGLd,EAAiB,SAAUc,EAAQC,GAEjC,MAAOV,GAAeS,IAElBA,EAAOK,UAAYJ,EAAQD,GAE7BD,EAAcC,EAAQC,MAKhChB,EAAOC,eAAiBA"} \ No newline at end of file
diff --git a/js/vendor/es6-shim/es6-sham.min.js b/js/vendor/es6-shim/es6-sham.min.js
index dba4ecc9e..dffa33876 100644
--- a/js/vendor/es6-shim/es6-sham.min.js
+++ b/js/vendor/es6-shim/es6-sham.min.js
@@ -7,5 +7,5 @@
* Details and documentation:
* https://github.com/paulmillr/es6-shim/
*/
-(function(t,e){if(typeof define==="function"&&define.amd){define(e)}else if(typeof exports==="object"){module.exports=e()}else{t.returnExports=e()}})(this,function(){"use strict";var t=new Function("return this;");var e=t();var r=e.Object;(function(){if(r.setPrototypeOf){return}var t=function(t,e){i(e).forEach(function(r){o(t,r,c(e,r))});return t};var e=function(e,r){return t(n(r),e)};var n=r.create;var o=r.defineProperty;var f=r.getPrototypeOf;var i=r.getOwnPropertyNames;var c=r.getOwnPropertyDescriptor;var u=r.prototype;var a,_;try{a=c(u,"__proto__").set;a.call({},null);_=function(t,e){a.call(t,e);return t}}catch(p){a={__proto__:null};if(a instanceof r){_=e}else{a.__proto__=u;if(a instanceof r){_=function(t,e){t.__proto__=e;return t}}else{_=function(t,r){return f(t)?(t.__proto__=r,t):e(t,r)}}}}r.setPrototypeOf=_})()});
+(function(t,e){if(typeof define==="function"&&define.amd){define(e)}else if(typeof exports==="object"){module.exports=e()}else{t.returnExports=e()}})(this,function(){"use strict";var t=new Function("return this;");var e=t();var r=e.Object;(function(){if(r.setPrototypeOf){return}var t=r.getOwnPropertyNames;var e=r.getOwnPropertyDescriptor;var n=r.create;var o=r.defineProperty;var f=r.getPrototypeOf;var i=r.prototype;var c=function(r,n){t(n).forEach(function(t){o(r,t,e(n,t))});return r};var u=function(t,e){return c(n(e),t)};var a,_;try{a=e(i,"__proto__").set;a.call({},null);_=function(t,e){a.call(t,e);return t}}catch(p){a={__proto__:null};if(a instanceof r){_=u}else{a.__proto__=i;if(a instanceof r){_=function(t,e){t.__proto__=e;return t}}else{_=function(t,e){return f(t)?(t.__proto__=e,t):u(t,e)}}}}r.setPrototypeOf=_})()});
//# sourceMappingURL=es6-sham.map \ No newline at end of file
diff --git a/js/vendor/es6-shim/es6-shim.js b/js/vendor/es6-shim/es6-shim.js
index 6cde64919..1ab73a3ea 100644
--- a/js/vendor/es6-shim/es6-shim.js
+++ b/js/vendor/es6-shim/es6-shim.js
@@ -47,6 +47,46 @@
};
var isCallableWithoutNew = not(throwsError);
+ var arePropertyDescriptorsSupported = function () {
+ // if Object.defineProperty exists but throws, it's IE 8
+ return !throwsError(function () { Object.defineProperty({}, 'x', {}); });
+ };
+ var supportsDescriptors = !!Object.defineProperty && arePropertyDescriptorsSupported();
+
+ var defineProperty = function (object, name, value, force) {
+ if (!force && name in object) { return; }
+ if (supportsDescriptors) {
+ Object.defineProperty(object, name, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: value
+ });
+ } else {
+ object[name] = value;
+ }
+ };
+
+ // Define configurable, writable and non-enumerable props
+ // if they don’t exist.
+ var defineProperties = function (object, map) {
+ Object.keys(map).forEach(function (name) {
+ var method = map[name];
+ defineProperty(object, name, method, false);
+ });
+ };
+
+ // Simple shim for Object.create on ES3 browsers
+ // (unlike real shim, no attempt to support `prototype === null`)
+ var create = Object.create || function (prototype, properties) {
+ function Prototype() {}
+ Prototype.prototype = prototype;
+ var object = new Prototype();
+ if (typeof properties !== 'undefined') {
+ defineProperties(object, properties);
+ }
+ return object;
+ };
var supportsSubclassing = function (C, f) {
if (!Object.setPrototypeOf) { return false; /* skip test on IE < 11 */ }
@@ -63,11 +103,6 @@
});
};
- var arePropertyDescriptorsSupported = function () {
- // if Object.defineProperty exists but throws, it's IE 8
- return !throwsError(function () { Object.defineProperty({}, 'x', {}); });
- };
-
var startsWithRejectsRegex = function () {
return String.prototype.startsWith && throwsError(function () {
/* throws if spec-compliant */
@@ -84,7 +119,6 @@
var globals = getGlobal();
var globalIsFinite = globals.isFinite;
- var supportsDescriptors = !!Object.defineProperty && arePropertyDescriptorsSupported();
var hasStrictMode = (function () { return this === null; }.call(null));
var startsWithIsCompliant = startsWithRejectsRegex() && startsWithHandlesInfinity;
var _indexOf = Function.call.bind(String.prototype.indexOf);
@@ -116,20 +150,6 @@
return typeof value === 'number' && globalIsFinite(value);
};
- var defineProperty = function (object, name, value, force) {
- if (!force && name in object) { return; }
- if (supportsDescriptors) {
- Object.defineProperty(object, name, {
- configurable: true,
- enumerable: false,
- writable: true,
- value: value
- });
- } else {
- object[name] = value;
- }
- };
-
var Value = {
getter: function (object, name, getter) {
if (!supportsDescriptors) {
@@ -167,25 +187,10 @@
}
};
- // Define configurable, writable and non-enumerable props
- // if they don’t exist.
- var defineProperties = function (object, map) {
- Object.keys(map).forEach(function (name) {
- var method = map[name];
- defineProperty(object, name, method, false);
- });
- };
-
- // Simple shim for Object.create on ES3 browsers
- // (unlike real shim, no attempt to support `prototype === null`)
- var create = Object.create || function (prototype, properties) {
- function Prototype() {}
- Prototype.prototype = prototype;
- var object = new Prototype();
- if (typeof properties !== 'undefined') {
- defineProperties(object, properties);
- }
- return object;
+ var overrideNative = function overrideNative(object, property, replacement) {
+ var original = object[property];
+ defineProperty(object, property, replacement, true);
+ Value.preserveToString(object[property], original);
};
// This is a private name in the es6 spec, equal to '[Symbol.iterator]'
@@ -201,13 +206,13 @@
$iterator$ = '@@iterator';
}
var addIterator = function (prototype, impl) {
- if (!impl) { impl = function iterator() { return this; }; }
+ var implementation = impl || function iterator() { return this; };
var o = {};
- o[$iterator$] = impl;
+ o[$iterator$] = implementation;
defineProperties(prototype, o);
if (!prototype[$iterator$] && Type.symbol($iterator$)) {
// implementations are buggy when $iterator$ is a Symbol
- prototype[$iterator$] = impl;
+ prototype[$iterator$] = implementation;
}
};
@@ -367,24 +372,25 @@
var emulateES6construct = function (o) {
if (!ES.TypeIsObject(o)) { throw new TypeError('bad object'); }
+ var object = o;
// es5 approximation to es6 subclass semantics: in es6, 'new Foo'
// would invoke Foo.@@species to allocation/initialize the new object.
// In es5 we just get the plain object. So if we detect an
// uninitialized object, invoke o.constructor.@@species
- if (!o._es6construct) {
- if (o.constructor && ES.IsCallable(o.constructor[symbolSpecies])) {
- o = o.constructor[symbolSpecies](o);
+ if (!object._es6construct) {
+ if (object.constructor && ES.IsCallable(object.constructor[symbolSpecies])) {
+ object = object.constructor[symbolSpecies](object);
}
- defineProperties(o, { _es6construct: true });
+ defineProperties(object, { _es6construct: true });
}
- return o;
+ return object;
};
// Firefox 31 reports this function's length as 0
// https://bugzilla.mozilla.org/show_bug.cgi?id=1062484
if (String.fromCodePoint && String.fromCodePoint.length !== 1) {
var originalFromCodePoint = Function.apply.bind(String.fromCodePoint);
- defineProperty(String, 'fromCodePoint', function fromCodePoint(codePoints) { return originalFromCodePoint(this, arguments); }, true);
+ overrideNative(String, 'fromCodePoint', function fromCodePoint(codePoints) { return originalFromCodePoint(this, arguments); });
}
var StringShims = {
@@ -438,9 +444,7 @@
defineProperties(String, StringShims);
if (String.raw({ raw: { 0: 'x', 1: 'y', length: 2 } }) !== 'xy') {
// IE 11 TP has a broken String.raw implementation
- var origStringRaw = String.raw;
- defineProperty(String, 'raw', StringShims.raw, true);
- Value.preserveToString(String.raw, origStringRaw);
+ overrideNative(String, 'raw', StringShims.raw);
}
// Fast repeat, uses the `Exponentiation by squaring` algorithm.
@@ -457,32 +461,32 @@
repeat: function repeat(times) {
ES.RequireObjectCoercible(this);
var thisStr = String(this);
- times = ES.ToInteger(times);
- if (times < 0 || times >= stringMaxLength) {
+ var numTimes = ES.ToInteger(times);
+ if (numTimes < 0 || numTimes >= stringMaxLength) {
throw new RangeError('repeat count must be less than infinity and not overflow maximum string size');
}
- return stringRepeat(thisStr, times);
+ return stringRepeat(thisStr, numTimes);
},
- startsWith: function startsWith(searchStr) {
+ startsWith: function startsWith(searchString) {
ES.RequireObjectCoercible(this);
var thisStr = String(this);
- if (Type.regex(searchStr)) {
+ if (Type.regex(searchString)) {
throw new TypeError('Cannot call method "startsWith" with a regex');
}
- searchStr = String(searchStr);
+ var searchStr = String(searchString);
var startArg = arguments.length > 1 ? arguments[1] : void 0;
var start = Math.max(ES.ToInteger(startArg), 0);
return thisStr.slice(start, start + searchStr.length) === searchStr;
},
- endsWith: function endsWith(searchStr) {
+ endsWith: function endsWith(searchString) {
ES.RequireObjectCoercible(this);
var thisStr = String(this);
- if (Type.regex(searchStr)) {
+ if (Type.regex(searchString)) {
throw new TypeError('Cannot call method "endsWith" with a regex');
}
- searchStr = String(searchStr);
+ var searchStr = String(searchString);
var thisLen = thisStr.length;
var posArg = arguments.length > 1 ? arguments[1] : void 0;
var pos = typeof posArg === 'undefined' ? thisLen : ES.ToInteger(posArg);
@@ -514,9 +518,7 @@
defineProperties(String.prototype, StringPrototypeShims);
if ('a'.includes('a', Infinity) !== false) {
- var origIncludes = String.prototype.includes;
- defineProperty(String.prototype, 'includes', StringPrototypeShims.includes, true);
- Value.preserveToString(String.prototype.includes, origIncludes);
+ overrideNative(String.prototype, 'includes', StringPrototypeShims.includes);
}
var hasStringTrimBug = '\u0085'.trim().length !== 1;
@@ -569,8 +571,8 @@
if (!startsWithIsCompliant) {
// Firefox (< 37?) and IE 11 TP have a noncompliant startsWith implementation
- defineProperty(String.prototype, 'startsWith', StringPrototypeShims.startsWith, true);
- defineProperty(String.prototype, 'endsWith', StringPrototypeShims.endsWith, true);
+ overrideNative(String.prototype, 'startsWith', StringPrototypeShims.startsWith);
+ overrideNative(String.prototype, 'endsWith', StringPrototypeShims.endsWith);
}
var ArrayShims = {
@@ -741,9 +743,7 @@
return fooArr instanceof Foo && fooArr.length === 2;
}());
if (!arrayOfSupportsSubclassing) {
- var origArrayOf = Array.of;
- defineProperty(Array, 'of', ArrayShims.of, true);
- Value.preserveToString(Array.of, origArrayOf);
+ overrideNative(Array, 'of', ArrayShims.of);
}
var ArrayPrototypeShims = {
@@ -751,10 +751,10 @@
var end = arguments[2]; // copyWithin.length must be 2
var o = ES.ToObject(this);
var len = ES.ToLength(o.length);
- target = ES.ToInteger(target);
- start = ES.ToInteger(start);
- var to = target < 0 ? Math.max(len + target, 0) : Math.min(target, len);
- var from = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);
+ var relativeTarget = ES.ToInteger(target);
+ var relativeStart = ES.ToInteger(start);
+ var to = relativeTarget < 0 ? Math.max(len + relativeTarget, 0) : Math.min(relativeTarget, len);
+ var from = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);
end = typeof end === 'undefined' ? len : ES.ToInteger(end);
var fin = end < 0 ? Math.max(len + end, 0) : Math.min(end, len);
var count = Math.min(fin - from, len - to);
@@ -861,9 +861,8 @@
// Chrome 40 defines Array#values with the incorrect name, although Array#{keys,entries} have the correct name
if (Array.prototype.values && Array.prototype.values.name !== 'values') {
var originalArrayPrototypeValues = Array.prototype.values;
- defineProperty(Array.prototype, 'values', function values() { return originalArrayPrototypeValues.call(this); }, true);
+ overrideNative(Array.prototype, 'values', function values() { return originalArrayPrototypeValues.call(this); });
defineProperty(Array.prototype, $iterator$, Array.prototype.values, true);
- Value.preserveToString(Array.prototype.values, originalArrayPrototypeValues);
}
defineProperties(Array.prototype, ArrayPrototypeShims);
@@ -875,20 +874,18 @@
}
// note: this is positioned here because it relies on Array#entries
- var arrayFromSwallowsNegativeLengths = function () {
+ var arrayFromSwallowsNegativeLengths = (function () {
// Detects a Firefox bug in v32
// https://bugzilla.mozilla.org/show_bug.cgi?id=1063993
return valueOrFalseIfThrows(function () { return Array.from({ length: -1 }).length === 0; });
- };
+ }());
var arrayFromHandlesIterables = (function () {
// Detects a bug in Webkit nightly r181886
var arr = Array.from([0].entries());
return arr.length === 1 && arr[0][0] === 0 && arr[0][1] === 1;
}());
- if (!arrayFromSwallowsNegativeLengths() || !arrayFromHandlesIterables) {
- var origArrayFrom = Array.from;
- defineProperty(Array, 'from', ArrayShims.from, true);
- Value.preserveToString(Array.from, origArrayFrom);
+ if (!arrayFromSwallowsNegativeLengths || !arrayFromHandlesIterables) {
+ overrideNative(Array, 'from', ArrayShims.from);
}
var maxSafeInteger = Math.pow(2, 53) - 1;
@@ -912,6 +909,8 @@
isNaN: numberIsNaN
});
+ // Firefox 37 has a conforming Number.parseInt, but it's not === to the global parseInt (fixed in v40)
+ defineProperty(Number, 'parseInt', globals.parseInt, Number.parseInt !== globals.parseInt);
// Work around bugs in Array#find and Array#findIndex -- early
// implementations skipped holes in sparse arrays. (Note that the
@@ -919,41 +918,72 @@
// methods of Number, so this test has to happen down here.)
/*jshint elision: true */
if (![, 1].find(function (item, idx) { return idx === 0; })) {
- defineProperty(Array.prototype, 'find', ArrayPrototypeShims.find, true);
+ overrideNative(Array.prototype, 'find', ArrayPrototypeShims.find);
}
if ([, 1].findIndex(function (item, idx) { return idx === 0; }) !== 0) {
- defineProperty(Array.prototype, 'findIndex', ArrayPrototypeShims.findIndex, true);
+ overrideNative(Array.prototype, 'findIndex', ArrayPrototypeShims.findIndex);
}
/*jshint elision: false */
- defineProperties(Object, {
+ var isEnumerableOn = Function.bind.call(Function.bind, Object.prototype.propertyIsEnumerable);
+ var sliceArgs = function sliceArgs() {
+ // per https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+ // and https://gist.github.com/WebReflection/4327762cb87a8c634a29
+ var initial = Number(this);
+ var len = arguments.length;
+ var desiredArgCount = len - initial;
+ var args = new Array(desiredArgCount < 0 ? 0 : desiredArgCount);
+ for (var i = initial; i < len; ++i) {
+ args[i - initial] = arguments[i];
+ }
+ return args;
+ };
+ var assignTo = function assignTo(source) {
+ return function assignToSource(target, key) {
+ target[key] = source[key];
+ return target;
+ };
+ };
+ var assignReducer = function (target, source) {
+ var keys = Object.keys(Object(source));
+ var symbols;
+ if (ES.IsCallable(Object.getOwnPropertySymbols)) {
+ symbols = Object.getOwnPropertySymbols(Object(source)).filter(isEnumerableOn(source));
+ }
+ return keys.concat(symbols || []).reduce(assignTo(source), target);
+ };
+
+ var ObjectShims = {
+ // 19.1.3.1
+ assign: function (target, source) {
+ if (!ES.TypeIsObject(target)) {
+ throw new TypeError('target must be an object');
+ }
+ return Array.prototype.reduce.call(sliceArgs.apply(0, arguments), assignReducer);
+ },
+
+ // Added in WebKit in https://bugs.webkit.org/show_bug.cgi?id=143865
is: function is(a, b) {
return ES.SameValue(a, b);
}
- });
+ };
+ var assignHasPendingExceptions = Object.assign && Object.preventExtensions && (function () {
+ // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
+ // which is 72% slower than our shim, and Firefox 40's native implementation.
+ var thrower = Object.preventExtensions({ 1: 2 });
+ try {
+ Object.assign(thrower, 'xy');
+ } catch (e) {
+ return thrower[1] === 'y';
+ }
+ }());
+ if (assignHasPendingExceptions) {
+ overrideNative(Object, 'assign', ObjectShims.assign);
+ }
+ defineProperties(Object, ObjectShims);
if (supportsDescriptors) {
- var isEnumerableOn = Function.bind.call(Function.bind, Object.prototype.propertyIsEnumerable);
- var assignReducer = function (target, source) {
- var keys = Object.keys(Object(source));
- var symbols;
- if (ES.IsCallable(Object.getOwnPropertySymbols)) {
- symbols = Object.getOwnPropertySymbols(Object(source)).filter(isEnumerableOn(source));
- }
- return keys.concat(symbols || []).reduce(function (target, key) {
- target[key] = source[key];
- return target;
- }, target);
- };
- var ObjectShims = {
- // 19.1.3.1
- assign: function (target, source) {
- if (!ES.TypeIsObject(target)) {
- throw new TypeError('target must be an object');
- }
- return Array.prototype.reduce.call(arguments, assignReducer);
- },
-
+ var ES5ObjectShims = {
// 19.1.3.9
// shim from https://gist.github.com/WebReflection/5593554
setPrototypeOf: (function (Object, magic) {
@@ -1008,22 +1038,7 @@
}(Object, '__proto__'))
};
- var assignHasPendingExceptions = Object.assign && Object.preventExtensions && (function () {
- // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
- // which is 72% slower than our shim, and Firefox 40's native implementation.
- var thrower = Object.preventExtensions({ 1: 2 });
- try {
- Object.assign(thrower, 'xy');
- } catch (e) {
- return thrower[1] === 'y';
- }
- }());
- if (assignHasPendingExceptions) {
- var origAssign = Object.assign;
- defineProperty(Object, 'assign', ObjectShims.assign, true);
- Value.preserveToString(Object.assign, origAssign);
- }
- defineProperties(Object, ObjectShims);
+ defineProperties(Object, ES5ObjectShims);
}
// Workaround bug in Opera 12 where setPrototypeOf(x, null) doesn't work,
@@ -1039,8 +1054,8 @@
return result === FAKENULL ? null : result;
};
Object.setPrototypeOf = function (o, p) {
- if (p === null) { p = FAKENULL; }
- return spo(o, p);
+ var proto = p === null ? FAKENULL : p;
+ return spo(o, proto);
};
Object.setPrototypeOf.polyfill = false;
}());
@@ -1049,106 +1064,96 @@
var objectKeysAcceptsPrimitives = !throwsError(function () { Object.keys('foo'); });
if (!objectKeysAcceptsPrimitives) {
var originalObjectKeys = Object.keys;
- defineProperty(Object, 'keys', function keys(value) {
+ overrideNative(Object, 'keys', function keys(value) {
return originalObjectKeys(ES.ToObject(value));
- }, true);
- Value.preserveToString(Object.keys, originalObjectKeys);
+ });
}
if (Object.getOwnPropertyNames) {
var objectGOPNAcceptsPrimitives = !throwsError(function () { Object.getOwnPropertyNames('foo'); });
if (!objectGOPNAcceptsPrimitives) {
var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames;
- defineProperty(Object, 'getOwnPropertyNames', function getOwnPropertyNames(value) {
+ overrideNative(Object, 'getOwnPropertyNames', function getOwnPropertyNames(value) {
return originalObjectGetOwnPropertyNames(ES.ToObject(value));
- }, true);
- Value.preserveToString(Object.getOwnPropertyNames, originalObjectGetOwnPropertyNames);
+ });
}
}
if (Object.getOwnPropertyDescriptor) {
var objectGOPDAcceptsPrimitives = !throwsError(function () { Object.getOwnPropertyDescriptor('foo', 'bar'); });
if (!objectGOPDAcceptsPrimitives) {
var originalObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- defineProperty(Object, 'getOwnPropertyDescriptor', function getOwnPropertyDescriptor(value, property) {
+ overrideNative(Object, 'getOwnPropertyDescriptor', function getOwnPropertyDescriptor(value, property) {
return originalObjectGetOwnPropertyDescriptor(ES.ToObject(value), property);
- }, true);
- Value.preserveToString(Object.getOwnPropertyDescriptor, originalObjectGetOwnPropertyDescriptor);
+ });
}
}
if (Object.seal) {
var objectSealAcceptsPrimitives = !throwsError(function () { Object.seal('foo'); });
if (!objectSealAcceptsPrimitives) {
var originalObjectSeal = Object.seal;
- defineProperty(Object, 'seal', function seal(value) {
+ overrideNative(Object, 'seal', function seal(value) {
if (!Type.object(value)) { return value; }
return originalObjectSeal(value);
- }, true);
- Value.preserveToString(Object.seal, originalObjectSeal);
+ });
}
}
if (Object.isSealed) {
var objectIsSealedAcceptsPrimitives = !throwsError(function () { Object.isSealed('foo'); });
if (!objectIsSealedAcceptsPrimitives) {
var originalObjectIsSealed = Object.isSealed;
- defineProperty(Object, 'isSealed', function isSealed(value) {
+ overrideNative(Object, 'isSealed', function isSealed(value) {
if (!Type.object(value)) { return true; }
return originalObjectIsSealed(value);
- }, true);
- Value.preserveToString(Object.isSealed, originalObjectIsSealed);
+ });
}
}
if (Object.freeze) {
var objectFreezeAcceptsPrimitives = !throwsError(function () { Object.freeze('foo'); });
if (!objectFreezeAcceptsPrimitives) {
var originalObjectFreeze = Object.freeze;
- defineProperty(Object, 'freeze', function freeze(value) {
+ overrideNative(Object, 'freeze', function freeze(value) {
if (!Type.object(value)) { return value; }
return originalObjectFreeze(value);
- }, true);
- Value.preserveToString(Object.freeze, originalObjectFreeze);
+ });
}
}
if (Object.isFrozen) {
var objectIsFrozenAcceptsPrimitives = !throwsError(function () { Object.isFrozen('foo'); });
if (!objectIsFrozenAcceptsPrimitives) {
var originalObjectIsFrozen = Object.isFrozen;
- defineProperty(Object, 'isFrozen', function isFrozen(value) {
+ overrideNative(Object, 'isFrozen', function isFrozen(value) {
if (!Type.object(value)) { return true; }
return originalObjectIsFrozen(value);
- }, true);
- Value.preserveToString(Object.isFrozen, originalObjectIsFrozen);
+ });
}
}
if (Object.preventExtensions) {
var objectPreventExtensionsAcceptsPrimitives = !throwsError(function () { Object.preventExtensions('foo'); });
if (!objectPreventExtensionsAcceptsPrimitives) {
var originalObjectPreventExtensions = Object.preventExtensions;
- defineProperty(Object, 'preventExtensions', function preventExtensions(value) {
+ overrideNative(Object, 'preventExtensions', function preventExtensions(value) {
if (!Type.object(value)) { return value; }
return originalObjectPreventExtensions(value);
- }, true);
- Value.preserveToString(Object.preventExtensions, originalObjectPreventExtensions);
+ });
}
}
if (Object.isExtensible) {
var objectIsExtensibleAcceptsPrimitives = !throwsError(function () { Object.isExtensible('foo'); });
if (!objectIsExtensibleAcceptsPrimitives) {
var originalObjectIsExtensible = Object.isExtensible;
- defineProperty(Object, 'isExtensible', function isExtensible(value) {
+ overrideNative(Object, 'isExtensible', function isExtensible(value) {
if (!Type.object(value)) { return false; }
return originalObjectIsExtensible(value);
- }, true);
- Value.preserveToString(Object.isExtensible, originalObjectIsExtensible);
+ });
}
}
if (Object.getPrototypeOf) {
var objectGetProtoAcceptsPrimitives = !throwsError(function () { Object.getPrototypeOf('foo'); });
if (!objectGetProtoAcceptsPrimitives) {
var originalGetProto = Object.getPrototypeOf;
- defineProperty(Object, 'getPrototypeOf', function getPrototypeOf(value) {
+ overrideNative(Object, 'getPrototypeOf', function getPrototypeOf(value) {
return originalGetProto(ES.ToObject(value));
- }, true);
- Value.preserveToString(Object.getPrototypeOf, originalGetProto);
+ });
}
}
@@ -1236,6 +1241,8 @@
var BINARY_32_EPSILON = Math.pow(2, -23);
var BINARY_32_MAX_VALUE = Math.pow(2, 127) * (2 - BINARY_32_EPSILON);
var BINARY_32_MIN_VALUE = Math.pow(2, -126);
+ var numberCLZ = Number.prototype.clz;
+ delete Number.prototype.clz; // Safari 8 has Number#clz
var MathShims = {
acosh: function acosh(value) {
@@ -1247,57 +1254,63 @@
},
asinh: function asinh(value) {
- value = Number(value);
- if (value === 0 || !globalIsFinite(value)) {
- return value;