X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Fpolyfill.es6.js;fp=src%2Fjs%2Fpolyfill.es6.js;h=0000000000000000000000000000000000000000;hb=22f8766947313324c4acda2de4f170475d3c5ded;hp=be05249871a6900d67424173abfb76e9a74e77b8;hpb=8017442c509ef1fa545367e727608bdc91bc1504;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/polyfill.es6.js b/src/js/polyfill.es6.js deleted file mode 100644 index be05249..0000000 --- a/src/js/polyfill.es6.js +++ /dev/null @@ -1,3793 +0,0 @@ -// From -// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js -// Required for ethereumjs-utils.js when run in phantomjs-2.1.1 -// but is not required in any modern browsers. -// For more information, see -// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs - -//---------------------------------------------------------------------- -// -// ECMAScript 2015 Polyfills -// -//---------------------------------------------------------------------- - -(function (global) { - "use strict"; - - // Set this to always override native implementations, for testing - // the polyfill in browsers with partial/full ES2015 support. - var OVERRIDE_NATIVE_FOR_TESTING = false; - - var undefined = (void 0); // Paranoia - - // Helpers - - function strict(o) { - return o === global ? undefined : o; - } - - function hook(o, p, f) { - var op = o[p]; - console.assert(typeof op === 'function', 'Hooking a non-function'); - o[p] = function() { - var o = strict(this); - var r = f.apply(o, arguments); - return r !== undefined ? r : op.apply(o, arguments); - }; - } - - function isSymbol(s) { - return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol); - } - - function getPropertyDescriptor(target, name) { - var desc = Object.getOwnPropertyDescriptor(target, name); - var proto = Object.getPrototypeOf(target); - while (!desc && proto) { - desc = Object.getOwnPropertyDescriptor(proto, name); - proto = Object.getPrototypeOf(proto); - } - return desc; - } - - var enqueue = (function(nativePromise, nativeSetImmediate) { - if (nativePromise) - return function(job) { nativePromise.resolve().then(function() { job(); }); }; - if (nativeSetImmediate) - return function(job) { nativeSetImmediate(job); }; - return function(job) { setTimeout(job, 0); }; - }(global['Promise'], global['setImmediate'])); - - function define(o, p, v, override) { - if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING) - return; - - if (typeof v === 'function') { - // Sanity check that functions are appropriately named (where possible) - console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"'); - Object.defineProperty(o, p, { - value: v, - configurable: true, - enumerable: false, - writable: true - }); - } else { - Object.defineProperty(o, p, { - value: v, - configurable: false, - enumerable: false, - writable: false - }); - } - } - - function set_internal(o, p, v) { - Object.defineProperty(o, p, { - value: v, - configurable: false, - enumerable: false, - writable: true - }); - } - - // Snapshot intrinsic functions - var $isNaN = global.isNaN, - $parseInt = global.parseInt, - $parseFloat = global.parseFloat; - - var E = Math.E, - LOG10E = Math.LOG10E, - LOG2E = Math.LOG2E, - abs = Math.abs, - ceil = Math.ceil, - exp = Math.exp, - floor = Math.floor, - log = Math.log, - max = Math.max, - min = Math.min, - pow = Math.pow, - random = Math.random, - sqrt = Math.sqrt; - - var orig_match = String.prototype.match, - orig_replace = String.prototype.replace, - orig_search = String.prototype.search, - orig_split = String.prototype.split; - - // These are used for implementing the polyfills, but not exported. - - // Inspired by https://gist.github.com/1638059 - /** @constructor */ - function EphemeronTable() { - var secretKey = ObjectCreate(null); - - function conceal(o) { - var oValueOf = o.valueOf, secrets = ObjectCreate(null); - Object.defineProperty(o, 'valueOf', { - value: (function(secretKey) { - return function (k) { - return (k === secretKey) ? secrets : oValueOf.apply(o, arguments); - }; - }(secretKey)), - configurable: true, - writeable: true, - enumerable: false - }); - return secrets; - } - - function reveal(o) { - var v = typeof o.valueOf === 'function' && o.valueOf(secretKey); - return v === o ? null : v; - } - - return { - clear: function() { - secretKey = ObjectCreate(null); - }, - remove: function(key) { - var secrets = reveal(key); - if (secrets && HasOwnProperty(secrets, 'value')) { - delete secrets.value; - return true; - } - return false; - }, - get: function(key, defaultValue) { - var secrets = reveal(key); - return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue; - }, - has: function(key) { - var secrets = reveal(key); - return Boolean(secrets && HasOwnProperty(secrets, 'value')); - }, - set: function(key, value) { - var secrets = reveal(key) || conceal(key); - secrets.value = value; - } - }; - } - - var empty = Object.create(null); - - //---------------------------------------------------------------------- - // - // ECMAScript 2015 - // http://www.ecma-international.org/ecma-262/6.0/ - // - //---------------------------------------------------------------------- - - // --------------------------------------- - // 19.4 Symbol Objects - // --------------------------------------- - - // NOTE: Symbols are defined here - out of spec order - since we need the - // properties and prototype to be populated for other polyfills. - - // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys() - - var symbolForKey; - (function() { - var secret = Object.create(null); - var symbolMap = {}; - symbolForKey = function(k) { - return symbolMap[k]; - }; - - var GlobalSymbolRegistry = []; - - function unique(bits) { - return Array(bits + 1).join('x').replace(/x/g, function() { - return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ - }); - } - - // 19.4.1 The Symbol Constructor - // 19.4.1.1 Symbol ( description=undefined ) - function Symbol(description) { - if (!(this instanceof Symbol)) return new Symbol(description, secret); - if (this instanceof Symbol && arguments[1] !== secret) throw TypeError(); - - var descString = description === undefined ? undefined : String(description); - - set_internal(this, '[[SymbolData]]', unique(128)); - set_internal(this, '[[Description]]', descString); - - symbolMap[this] = this; - return this; - } - - if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING) - global.Symbol = Symbol; - - // 19.4.2 Properties of the Symbol Constructor - - // 19.4.2.1 Symbol.for (key) - define(Symbol, 'for', function for_(key) { - var stringKey = String(key); - for (var i = 0; i < GlobalSymbolRegistry.length; ++i) { - var e = GlobalSymbolRegistry[i]; - if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]']; - } - var newSymbol = Symbol(key); - GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol}); - return newSymbol; - }); - - // 19.4.2.2 Symbol.hasInstance - // 19.4.2.3 Symbol.isConcatSpreadable - - // 19.4.2.4 Symbol.iterator - define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator')); - - // 19.4.2.5 Symbol.keyFor (sym) - define(Symbol, 'keyFor', function keyFor(sym) { - if (!(sym instanceof Symbol)) throw TypeError(); - for (var i = 0; i < GlobalSymbolRegistry.length; ++i) { - var e = GlobalSymbolRegistry[i]; - if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]']; - } - return undefined; - }); - - // 19.4.2.6 Symbol.match - define(global.Symbol, 'match', global.Symbol('Symbol.match')); - - // 19.4.2.7 Symbol.prototype - - // 19.4.2.8 Symbol.replace - define(global.Symbol, 'replace', global.Symbol('Symbol.replace')); - - // 19.4.2.9 Symbol.search - define(global.Symbol, 'search', global.Symbol('Symbol.search')); - - // 19.4.2.10 Symbol.species - - // 19.4.2.11 Symbol.search - define(global.Symbol, 'split', global.Symbol('Symbol.split')); - - // 19.4.2.12 Symbol.toPrimitive - - // 19.4.2.13 Symbol.toStringTag - define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag')); - - // 19.4.2.14 Symbol.unscopables - - // 19.4.3 Properties of the Symbol Prototype Object - // 19.4.3.1 Symbol.prototype.constructor - - // 19.4.3.2 Symbol.prototype.toString ( ) - Object.defineProperty(Symbol.prototype, 'toString', { - value: function toString() { - var s = strict(this); - var desc = s['[[Description]]']; - return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')'; - }, - configurable: true, writeable: true, enumerable: false }); - - // 19.4.3.3 Symbol.prototype.valueOf ( ) - Object.defineProperty(Symbol.prototype, 'valueOf', { - value: function valueOf() { - // To prevent automatic string conversion: - throw TypeError(); - - // Spec has approximately the following: - //var s = strict(this); - //if (Type(s) === 'symbol') return s; - //if (Type(s) !== 'object') throw TypeError(); - //if (!('[[SymbolData]]' in s)) throw TypeError(); - //return s['[[SymbolData]]']; - }, - configurable: true, writeable: true, enumerable: false }); - - // 19.4.3.4 Symbol.prototype [ @@toStringTag ] - // (Done later to polyfill partial implementations) - - // 19.4.4 Properties of Symbol Instances - }()); - - console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x')))); - - // Defined here so that other prototypes can reference it - // 25.1.2 The %IteratorPrototype% Object - var $IteratorPrototype$ = {}; - - //---------------------------------------- - // 6 ECMAScript Data Types and Values - //---------------------------------------- - - // 6.1 ECMAScript Language Types - - // "Type(x)" is used as shorthand for "the type of x"... - function Type(v) { - switch (typeof v) { - case 'undefined': return 'undefined'; - case 'boolean': return 'boolean'; - case 'number': return 'number'; - case 'string': return 'string'; - case 'symbol': return 'symbol'; - default: - if (v === null) return 'null'; - if (v instanceof global.Symbol) return 'symbol'; - return 'object'; - } - } - - // 6.1.5.1 Well-Known Symbols - var $$iterator = global.Symbol.iterator, - $$match = global.Symbol.match, - $$replace = global.Symbol.replace, - $$search = global.Symbol.search, - $$split = global.Symbol.split, - $$toStringTag = global.Symbol.toStringTag; - - //---------------------------------------- - // 7 Abstract Operations - //---------------------------------------- - - //---------------------------------------- - // 7.1 Type Conversion - //---------------------------------------- - - // 7.1.1 ToPrimitive ( input [, PreferredType] ) - // just use valueOf() - - // 7.1.2 ToBoolean ( argument ) - // just use Boolean() - - // 7.1.3 ToNumber ( argument ) - // just use Number() - - // 7.1.4 ToInteger ( argument ) - function ToInteger(n) { - n = Number(n); - if ($isNaN(n)) return 0; - if (n === 0 || n === Infinity || n === -Infinity) return n; - return ((n < 0) ? -1 : 1) * floor(abs(n)); - } - - // 7.1.5 ToInt32 ( argument ) - function ToInt32(v) { return v >> 0; } - - // 7.1.6 ToUint32 ( argument ) - function ToUint32(v) { return v >>> 0; } - - // 7.1.7 ToInt16 ( argument ) - function ToInt16(v) { return (v << 16) >> 16; } - - // 7.1.8 ToUint16 ( argument ) - function ToUint16(v) { return v & 0xFFFF; } - - // 7.1.9 ToInt8 ( argument ) - function ToInt8(v) { return (v << 24) >> 24; } - - // 7.1.10 ToUint8 ( argument ) - function ToUint8(v) { return v & 0xFF; } - - // 7.1.11 ToUint8Clamp ( argument ) - function ToUint8Clamp(argument) { - var number = Number(argument); - if ($isNaN(number)) return 0; - if (number <= 0) return 0; - if (number >= 255) return 255; - var f = floor(number); - if ((f + 0.5) < number) return f + 1; - if (number < (f + 0.5)) return f; - if (f % 2) return f + 1; - return f; - } - - // 7.1.12 ToString ( argument ) - // just use String() - - // 7.1.13 ToObject ( argument ) - function ToObject(v) { - if (v === null || v === undefined) throw TypeError(); - return Object(v); - } - - // 7.1.14 ToPropertyKey ( argument ) - function ToPropertyKey(v) { - return String(v); - } - - // 7.1.15 ToLength ( argument ) - function ToLength(v) { - var len = ToInteger(v); - if (len <= 0) return 0; - if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1 - return min(len, 0x20000000000000 - 1); // 2^53-1 - } - - // 7.1.16 CanonicalNumericIndexString ( argument ) - - //---------------------------------------- - // 7.2 Testing and Comparison Operations - //---------------------------------------- - - // 7.2.1 RequireObjectCoercible ( argument ) - // 7.2.2 IsArray ( argument ) - - // 7.2.3 IsCallable ( argument ) - function IsCallable(o) { return typeof o === 'function'; } - - // 7.2.4 IsConstructor ( argument ) - function IsConstructor(o) { - // Hacks for Safari 7 TypedArray XXXConstructor objects - if (/Constructor/.test(Object.prototype.toString.call(o))) return true; - if (/Function/.test(Object.prototype.toString.call(o))) return true; - // TODO: Can this be improved on? - return typeof o === 'function'; - } - - // 7.2.5 IsExtensible (O) - // 7.2.6 IsInteger ( argument ) - - // 7.2.7 IsPropertyKey ( argument ) - function IsPropertyKey(argument) { - if (Type(argument) === 'string') return true; - if (Type(argument) === 'symbol') return true; - return false; - } - - // 7.2.8 IsRegExp ( argument ) - // 7.2.5 IsConstructor ( argument ) - - // 7.2.9 SameValue(x, y) - function SameValue(x, y) { - if (typeof x !== typeof y) return false; - switch (typeof x) { - case 'undefined': - return true; - case 'number': - if (x !== x && y !== y) return true; - if (x === 0 && y === 0) return 1/x === 1/y; - return x === y; - case 'boolean': - case 'string': - case 'object': - default: - return x === y; - } - } - - // 7.2.10 SameValueZero(x, y) - function SameValueZero(x, y) { - if (typeof x !== typeof y) return false; - switch (typeof x) { - case 'undefined': - return true; - case 'number': - if (x !== x && y !== y) return true; - return x === y; - case 'boolean': - case 'string': - case 'object': - default: - return x === y; - } - } - - //---------------------------------------- - // 7.3 Operations on Objects - //---------------------------------------- - - // 7.3.1 Get (O, P) - // - just use o.p or o[p] - - // 7.3.2 GetV (V, P) - function GetV(v, p) { - var o = ToObject(v); - return o[p]; - } - - // 7.3.3 Set (O, P, V, Throw) - // - just use o.p = v or o[p] = v - - - - - // 7.3.9 GetMethod (O, P) - function GetMethod(o, p) { - var func = GetV(o, p); - if (func === undefined || func === null) return undefined; - if (!IsCallable(func)) throw TypeError(); - return func; - } - - // 7.3.10 HasProperty (O, P) - function HasProperty(o, p) { - while (o) { - if (Object.prototype.hasOwnProperty.call(o, p)) return true; - if (Type(o) !== 'object') return false; - o = Object.getPrototypeOf(o); - } - return false; - } - - // 7.3.11 HasOwnProperty (O, P) - function HasOwnProperty(o, p) { - return Object.prototype.hasOwnProperty.call(o, p); - } - - //---------------------------------------- - // 7.4 Operations on Iterator Objects - //---------------------------------------- - - // 7.4.1 GetIterator ( obj, method ) - function GetIterator(obj, method) { - if (arguments.length < 2) - method = GetMethod(obj, $$iterator); - var iterator = method.call(obj); - if (Type(iterator) !== 'object') throw TypeError(); - return iterator; - } - - // 7.4.2 IteratorNext ( iterator, value ) - function IteratorNext(iterator, value) { - if (arguments.length < 2) - var result = iterator.next(); - else - result = iterator.next(value); - if (Type(result) !== 'object') throw TypeError(); - return result; - } - - // 7.4.3 IteratorComplete ( iterResult ) - function IteratorComplete(iterResult) { - console.assert(Type(iterResult) === 'object'); - return Boolean(iterResult.done); - } - - // 7.4.4 IteratorValue ( iterResult ) - function IteratorValue(iterResult) { - console.assert(Type(iterResult) === 'object'); - return iterResult.value; - } - - // 7.4.5 IteratorStep ( iterator ) - function IteratorStep( iterator, value ) { - var result = IteratorNext(iterator, value); - var done = result['done']; - if (Boolean(done) === true) return false; - return result; - } - - // 7.4.6 IteratorClose( iterator, completion ) - function IteratorClose( iterator, completion ) { - console.assert(Type(iterator) === 'object'); - var _return = GetMethod(iterator, 'return'); - if (_return === undefined) return completion; - try { - var innerResult = _return[iterator](); - } catch (result) { - // TODO: If completion.[[type]] is throw, return completion - return result; - } - if (Type(innerResult) !== 'object') throw TypeError(); - return completion; - } - - // 7.4.7 CreateIterResultObject (value, done) - function CreateIterResultObject(value, done) { - console.assert(Type(done) === 'boolean'); - var obj = {}; - obj["value"] = value; - obj["done"] = done; - return obj; - } - - // 7.4.8 CreateListIterator (list) - // 7.4.8.1 ListIterator next( ) - // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 ) - // 7.4.9.1 CompoundIterator next( ) - - //---------------------------------------- - // 8 Executable Code and Execution Contexts - //---------------------------------------- - - //---------------------------------------- - // 8.4 Jobs and Job Queues - //---------------------------------------- - - // 8.4.1 EnqueueJob ( queueName, job, arguments) - function EnqueueJob(queueName, job, args) { - var fn = function() { job.apply(undefined, args); }; - enqueue(fn); - } - - // 8.4.2 NextJob result - function NextJob(result) { - // no-op - } - - //---------------------------------------- - // 9 Ordinary and Exotic Objects Behaviors - //---------------------------------------- - - // 9.1.11 [[Enumerate]] () - function Enumerate(obj) { - var e = []; - if (Object(obj) !== obj) return e; - var visited = new Set; - while (obj !== null) { - Object.getOwnPropertyNames(obj).forEach(function(name) { - if (!visited.has(name)) { - var desc = Object.getOwnPropertyDescriptor(obj, name); - if (desc) { - visited.add(name); - if (desc.enumerable) e.push(name); - } - } - }); - obj = Object.getPrototypeOf(obj); - } - return e[$$iterator](); - } - - // 9.1.12 [[OwnPropertyKeys]] ( ) - function OwnPropertyKeys(o) { - return Object.getOwnPropertyNames(o); - } - - // 9.1.13 ObjectCreate(proto, internalSlotsList) - function ObjectCreate(proto, internalSlotsList) { - return Object.create(proto, internalSlotsList); - } - - // --------------------------------------- - // 19 Fundamental Objects - // --------------------------------------- - - // --------------------------------------- - // 19.1 Object Objects - // --------------------------------------- - - // 19.1.1 The Object Constructor - // 19.1.1.1 Object ( [ value ] ) - // 19.1.2 Properties of the Object Constructor - // 19.1.2.1 Object.assign ( target, ...sources ) - define( - Object, 'assign', - function assign(target, /*...*/sources) { - var to = ToObject(target); - if (arguments.length < 2) return to; - - var sourcesIndex = 1; - while (sourcesIndex < arguments.length) { - var nextSource = arguments[sourcesIndex++]; - if (nextSource === undefined || nextSource === null) { - var keys = []; - } else { - var from = ToObject(nextSource); - keys = OwnPropertyKeys(from); - } - for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) { - var nextKey = keys[keysIndex]; - var desc = Object.getOwnPropertyDescriptor(from, nextKey); - if (desc !== undefined && desc.enumerable) { - var propValue = from[nextKey]; - to[nextKey] = propValue; - } - } - } - return to; - }); - - // 19.1.2.2 Object.create ( O [ , Properties ] ) - // 19.1.2.3 Object.defineProperties ( O, Properties ) - // 19.1.2.4 Object.defineProperty ( O, P, Attributes ) - // 19.1.2.5 Object.freeze ( O ) - // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P ) - - (function() { - var nativeSymbols = (typeof global.Symbol() === 'symbol'), - $getOwnPropertyNames = Object.getOwnPropertyNames, - $keys = Object.keys, - $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []); - - function isStringKey(k) { return !symbolForKey(k); } - - // 19.1.2.7 Object.getOwnPropertyNames ( O ) - define( - Object, 'getOwnPropertyNames', - function getOwnPropertyNames(o) { - if (Object.prototype.toString.call(o) === '[object Window]') { - // Workaround for cross-realm calling by IE itself. - // https://github.com/inexorabletash/polyfill/issues/96 - try { - return $getOwnPropertyNames(o).filter(isStringKey); - } catch (_) { - return $window_names.slice(); - } - } - return $getOwnPropertyNames(o).filter(isStringKey); - }, !nativeSymbols); - - // 19.1.2.8 Object.getOwnPropertySymbols ( O ) - define( - Object, 'getOwnPropertySymbols', - function getOwnPropertySymbols(o) { - return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey); - }, !nativeSymbols); - - // 19.1.2.14 Object.keys ( O ) - define( - Object, 'keys', - function keys(o) { - return $keys(o).filter(isStringKey); - }, !nativeSymbols); - }()); - - // 19.1.2.9 Object.getPrototypeOf ( O ) - // 19.1.2.10 Object.is ( value1, value2 ) - define( - Object, 'is', - function is(value1, value2) { - return SameValue(value1, value2); - }); - - // 19.1.2.11 Object.isExtensible ( O ) - // 19.1.2.12 Object.isFrozen ( O ) - // 19.1.2.13 Object.isSealed ( O ) - - // 19.1.2.14 Object.keys ( O ) - // see above - - // 19.1.2.15 Object.preventExtensions ( O ) - // 19.1.2.16 Object.prototype - // 19.1.2.17 Object.seal ( O ) - - // 19.1.2.18 Object.setPrototypeOf ( O, proto ) - define( - Object, 'setPrototypeOf', - function setPrototypeOf(o, proto) { - if (Type(o) !== 'object') throw TypeError(); - if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError(); - o.__proto__ = proto; - return o; - } - ); - - // 19.1.3 Properties of the Object Prototype Object - // 19.1.3.1 Object.prototype.constructor - // 19.1.3.2 Object.prototype.hasOwnProperty ( V ) - // 19.1.3.3 Object.prototype.isPrototypeOf ( V ) - // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V ) - // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] ) - // 19.1.3.6 Object.prototype.toString ( ) - hook(Object.prototype, 'toString', - function() { - var o = strict(this); - if (o === Object(o) && $$toStringTag in o) { - return '[object ' + o[$$toStringTag] + ']'; - } - return undefined; - }); - - // 19.1.3.7 Object.prototype.valueOf ( ) - // 19.1.4 Properties of Object Instances - - // --------------------------------------- - // 19.2 Function Objects - // --------------------------------------- - - // 19.2.1 The Function Constructor - // 19.2.1.1 Function ( p1, p2, … , pn, body ) - // 19.2.2 Properties of the Function Constructor - // 19.2.2.1 Function.length - // 19.2.2.2 Function.prototype - // 19.2.3 Properties of the Function Prototype Object - // 19.2.3.1 Function.prototype.apply ( thisArg, argArray ) - // 19.2.3.2 Function.prototype.bind ( thisArg , ...args) - // 19.2.3.3 Function.prototype.call (thisArg , ...args) - // 19.2.3.4 Function.prototype.constructor - // 19.2.3.5 Function.prototype.toString ( ) - // 19.2.3.6 Function.prototype[@@hasInstance] ( V ) - // 19.2.4 Function Instances - // 19.2.4.1 length - // 19.2.4.2 name - // 19.2.4.3 prototype - - // (No polyfillable changes from ES5) - - // --------------------------------------- - // 19.3 Boolean Objects - // --------------------------------------- - - // 19.3.1 The Boolean Constructor - // 19.3.1.1 Boolean ( value ) - // 19.3.2 Properties of the Boolean Constructor - // 19.3.2.1 Boolean.prototype - // 19.3.3 Properties of the Boolean Prototype Object - // 19.3.3.1 Boolean.prototype.constructor - // 19.3.3.2 Boolean.prototype.toString ( ) - // 19.3.3.3 Boolean.prototype.valueOf ( ) - // 19.3.4 Properties of Boolean Instances - - // (No polyfillable changes from ES5) - - // --------------------------------------- - // 19.4 Symbol Objects - // --------------------------------------- - - // Moved earlier in this script, so that other polyfills can depend on them. - - // 19.4.3.4 Symbol.prototype [ @@toStringTag ] - define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol'); - - // --------------------------------------- - // 19.5 Error Objects - // --------------------------------------- - - // 19.5.1 The Error Constructor - // 19.5.1.1 Error ( message ) - // 19.5.1.2 new Error( ...argumentsList ) - // 19.5.2 Properties of the Error Constructor - // 19.5.2.1 Error.prototype - // 19.5.3 Properties of the Error Prototype Object - // 19.5.3.1 Error.prototype.constructor - // 19.5.3.2 Error.prototype.message - // 19.5.3.3 Error.prototype.name - // 19.5.3.4 Error.prototype.toString ( ) - // 19.5.4 Properties of Error Instances - // 19.5.5 Native Error Types Used in This Standard - // 19.5.5.1 EvalError - // 19.5.5.2 RangeError - // 19.5.5.3 ReferenceError - // 19.5.5.4 SyntaxError - // 19.5.5.5 TypeError - // 19.5.5.6 URIError - // 19.5.6 NativeError Object Structure - // 19.5.6.1 NativeError Constructors - // 19.5.6.1.1 NativeError ( message ) - // 19.5.6.1.2 new NativeError ( ...argumentsList ) - // 19.5.6.2 Properties of the NativeError Constructors - // 19.5.6.2.1 NativeError.prototype - // 19.5.6.3 Properties of the NativeError Prototype Objects - // 19.5.6.4 Properties of NativeError Instances - - // (No polyfillable changes from ES5) - - // --------------------------------------- - // 20 Numbers and Dates - // --------------------------------------- - - // --------------------------------------- - // 20.1 Number Objects - // --------------------------------------- - - // 20.1.1 The Number Constructor - // 20.1.1.1 Number ( [ value ] ) - // 20.1.1.2 new Number ( ...argumentsList ) - // 20.1.2 Properties of the Number Constructor - - // 20.1.2.1 Number.EPSILON - define( - Number, 'EPSILON', - (function () { - var next, result; - for (next = 1; 1 + next !== 1; next = next / 2) - result = next; - return result; - }())); - - // 20.1.2.2 Number.isFinite ( number ) - define( - Number, 'isFinite', - function isFinite(number) { - if (Type(number) !== 'number') return false; - if (number !== number || number === +Infinity || number === -Infinity) return false; - return true; - }); - - // 20.1.2.3 Number.isInteger ( number ) - define( - Number, 'isInteger', - function isInteger(number) { - if (Type(number) !== 'number') return false; - if (number !== number || number === +Infinity || number === -Infinity) return false; - var integer = ToInteger(number); - if (integer !== number) return false; - return true; - }); - - // 20.1.2.4 Number.isNaN ( number ) - define( - Number, 'isNaN', - function isNaN(number) { - if (Type(number) !== 'number') return false; - if (number !== number) return true; - return false; - }); - - // 20.1.2.5 Number.isSafeInteger ( number ) - define( - Number, 'isSafeInteger', - function isSafeInteger(number) { - if (Type(number) !== 'number') return false; - if (number !== number || number === +Infinity || number === -Infinity) return false; - var integer = ToInteger(number); - if (integer !== number) return false; - if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1 - return true; - return false; - }); - - // 20.1.2.6 Number.MAX_SAFE_INTEGER - define( - Number, 'MAX_SAFE_INTEGER', - 9007199254740991); // 2^53-1 - - // 20.1.2.7 Number.MAX_VALUE - - // 20.1.2.8 Number.MIN_SAFE_INTEGER - define( - Number, 'MIN_SAFE_INTEGER', - -9007199254740991); // -2^53+1 - - // 20.1.2.9 Number.MIN_VALUE - // 20.1.2.10 Number.NaN - // 20.1.2.11 Number.NEGATIVE_INFINITY - - // 20.1.2.12 Number.parseFloat ( string ) - define(Number, 'parseFloat', $parseFloat); - - // 20.1.2.13 Number.parseInt ( string, radix ) - define(Number, 'parseInt', $parseInt); - - // 20.1.2.14 Number.POSITIVE_INFINITY - // 20.1.2.15 Number.prototype - - // 20.1.3 Properties of the Number Prototype Object - // 20.1.3.1 Number.prototype.constructor - // 20.1.3.2 Number.prototype.toExponential ( fractionDigits ) - // 20.1.3.3 Number.prototype.toFixed ( fractionDigits ) - // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ]) - // 20.1.3.5 Number.prototype.toPrecision ( precision ) - // 20.1.3.6 Number.prototype.toString ( [ radix ] ) - // 20.1.3.7 Number.prototype.valueOf ( ) - // 20.1.4 Properties of Number Instances - - // --------------------------------------- - // 20.2 The Math Object - // --------------------------------------- - - // 20.2.1 Value Properties of the Math Object - // 20.2.1.1 Math.E - // 20.2.1.2 Math.LN10 - // 20.2.1.3 Math.LN2 - // 20.2.1.4 Math.LOG10E - // 20.2.1.5 Math.LOG2E - // 20.2.1.6 Math.PI - // 20.2.1.7 Math.SQRT1_2 - // 20.2.1.8 Math.SQRT2 - - // 20.2.1.9 Math [ @@toStringTag ] - define(Math, $$toStringTag, 'Math'); - - // 20.2.2 Function Properties of the Math Object - // 20.2.2.1 Math.abs ( x ) - // 20.2.2.2 Math.acos ( x ) - - // 20.2.2.3 Math.acosh(x) - define( - Math, 'acosh', - function acosh(x) { - x = Number(x); - return log(x + sqrt(x * x - 1)); - }); - - // 20.2.2.4 Math.asin ( x ) - - // 20.2.2.5 Math.asinh( x ) - define( - Math, 'asinh', - function asinh(x) { - x = Number(x); - if (SameValue(x, -0)) { - return x; - } - var s = sqrt(x * x + 1); - return (s === -x) ? log(0) : log(x + s); - }); - - // 20.2.2.6 Math.atan ( x ) - - // 20.2.2.7 Math.atanh( x ) - define( - Math, 'atanh', - function atanh(x) { - x = Number(x); - return (x === 0) ? x : log((1 + x) / (1 - x)) / 2; - }); - - // 20.2.2.8 Math.atan2 ( y, x ) - - // 20.2.2.9 Math.cbrt ( x ) - define( - Math, 'cbrt', - function cbrt(x) { - x = Number(x); - if ($isNaN(x/x)) { - return x; - } - var r = pow(abs(x), 1/3); - var t = x/r/r; - return r + (r * (t-r) / (2*r + t)); - }); - - // 20.2.2.10 Math.ceil ( x ) - - // 20.2.2.11 Math.clz32 ( x ) - define( - Math, 'clz32', - function clz32(x) { - function clz8(x) { - return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) : - (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8); - } - x = ToUint32(x); - return x & 0xff000000 ? clz8(x >> 24) : - x & 0xff0000 ? clz8(x >> 16) + 8 : - x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24; - }); - - - - // 20.2.2.12 Math.cos ( x ) - - // 20.2.2.13 Math.cosh ( x ) - define( - Math, 'cosh', - function cosh(x) { - x = Number(x); - return (pow(E, x) + pow(E, -x)) / 2; - }); - - // 20.2.2.14 Math.exp ( x ) - - // 20.2.2.15 Math.expm1 ( x ) - define( - Math, 'expm1', - function expm1(x) { - x = Number(x); - // from: http://www.johndcook.com/cpp_log1p.html - if (SameValue(x, -0)) { - return -0; - } else if (abs(x) < 1e-5) { - return x + 0.5 * x * x; // two terms of Taylor expansion - } else { - return exp(x) - 1; - } - }); - - // 20.2.2.16 Math.floor ( x ) - - // 20.2.2.17 Math.fround ( x ) - define( - Math, 'fround', - function fround(x) { - if ($isNaN(x)) { - return NaN; - } - if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) { - return x; - } - return (new Float32Array([x]))[0]; - }); - - // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] ) - define( - Math, 'hypot', - function hypot() { - var values = []; - var m = 0, sawNaN = false; - for (var i = 0; i < arguments.length; ++i) { - var n = abs(Number(arguments[i])); - if (n === Infinity) return n; - if (n !== n) sawNaN = true; - if (n > m) m = n; - values[i] = n; - } - if (sawNaN) return NaN; - if (m === 0) return +0; - var sum = +0; - for (i = 0; i < values.length; ++i) { - var r = values[i] / m; - sum = sum + r * r; - } - return m * sqrt(sum); - }); - - // 20.2.2.19 Math.imul ( x, y ) - define( - Math, 'imul', - function imul(x, y) { - var a = ToUint32(x); - var b = ToUint32(y); - // (slow but accurate) - var ah = (a >>> 16) & 0xffff; - var al = a & 0xffff; - var bh = (b >>> 16) & 0xffff; - var bl = b & 0xffff; - return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0); - }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug - ); - - // 20.2.2.20 Math.log ( x ) - - // 20.2.2.21 Math.log1p ( x ) - define( - Math, 'log1p', - function log1p(x) { - x = Number(x); - // from: http://www.johndcook.com/cpp_expm1.html - if (x < -1) { - return NaN; - } else if (SameValue(x, -0)) { - return -0; - } else if (abs(x) > 1e-4) { - return log(1 + x); - } else { - return (-0.5 * x + 1) * x; - } - }); - - // 20.2.2.22 Math.log10 ( x ) - define( - Math, 'log10', - function log10(x) { - x = Number(x); - return log(x) * LOG10E; - }); - - // 20.2.2.23 Math.log2 ( x ) - define( - Math, 'log2', - function log2(x) { - x = Number(x); - return log(x) * LOG2E; - }); - - // 20.2.2.24 Math.max ( value1, value2 , ...values ) - // 20.2.2.25 Math.min ( value1, value2 , ...values ) - // 20.2.2.26 Math.pow ( x, y ) - // 20.2.2.27 Math.random ( ) - // 20.2.2.28 Math.round ( x ) - - // 20.2.2.29 Math.sign(x) - define( - Math, 'sign', - function sign(x) { - x = Number(x); - return x < 0 ? -1 : x > 0 ? 1 : x; - }); - - // 20.2.2.30 Math.sin ( x ) - - // 20.2.2.31 Math.sinh( x ) - define( - Math, 'sinh', - function sinh(x) { - x = Number(x); - return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2; - }); - - // 20.2.2.32 Math.sqrt ( x ) - // 20.2.2.33 Math.tan ( x ) - - // 20.2.2.34 Math.tanh ( x ) - define( - Math, 'tanh', - function tanh(x) { - x = Number(x); - var n = pow(E, 2 * x) - 1, - d = pow(E, 2 * x) + 1; - if (SameValue(x, -0)) - return x; - return (n === d) ? 1 : n / d; // Handle Infinity/Infinity - }); - - // 20.2.2.35 Math.trunc ( x ) - define( - Math, 'trunc', - function trunc(x) { - x = Number(x); - return $isNaN(x) ? NaN : - x < 0 ? ceil(x) : floor(x); - }); - - // --------------------------------------- - // 20.3 Date Objects - // --------------------------------------- - - // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations - // 20.3.1.1 Time Values and Time Range - // 20.3.1.2 Day Number and Time within Day - // 20.3.1.3 Year Number - // 20.3.1.4 Month Number - // 20.3.1.5 Date Number - // 20.3.1.6 Week Day - // 20.3.1.7 Local Time Zone Adjustment - // 20.3.1.8 Daylight Saving Time Adjustment - // 20.3.1.9 Local Time - // 20.3.1.10 Hours, Minutes, Second, and Milliseconds - // 20.3.1.11 MakeTime (hour, min, sec, ms) - // 20.3.1.12 MakeDay (year, month, date) - // 20.3.1.13 MakeDate (day, time) - // 20.3.1.14 TimeClip (time) - // 20.3.1.15 Date Time String Format - // 20.3.1.15.1 Extended years - // 20.3.2 The Date Constructor - // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ) - // 20.3.2.2 Date ( value ) - // 20.3.2.3 Date ( ) - // 20.3.3 Properties of the Date Constructor - // 20.3.3.1 Date.now ( ) - // 20.3.3.2 Date.parse (string) - // 20.3.3.3 Date.prototype - // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ) - // 20.3.4 Properties of the Date Prototype Object - // 20.3.4.1 Date.prototype.constructor - // 20.3.4.2 Date.prototype.getDate ( ) - // 20.3.4.3 Date.prototype.getDay ( ) - // 20.3.4.4 Date.prototype.getFullYear ( ) - // 20.3.4.5 Date.prototype.getHours ( ) - // 20.3.4.6 Date.prototype.getMilliseconds ( ) - // 20.3.4.7 Date.prototype.getMinutes ( ) - // 20.3.4.8 Date.prototype.getMonth ( ) - // 20.3.4.9 Date.prototype.getSeconds ( ) - // 20.3.4.10 Date.prototype.getTime ( ) - // 20.3.4.11 Date.prototype.getTimezoneOffset ( ) - // 20.3.4.12 Date.prototype.getUTCDate ( ) - // 20.3.4.13 Date.prototype.getUTCDay ( ) - // 20.3.4.14 Date.prototype.getUTCFullYear ( ) - // 20.3.4.15 Date.prototype.getUTCHours ( ) - // 20.3.4.16 Date.prototype.getUTCMilliseconds ( ) - // 20.3.4.17 Date.prototype.getUTCMinutes ( ) - // 20.3.4.18 Date.prototype.getUTCMonth ( ) - // 20.3.4.19 Date.prototype.getUTCSeconds ( ) - // 20.3.4.20 Date.prototype.setDate ( date ) - // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] ) - // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] ) - // 20.3.4.23 Date.prototype.setMilliseconds ( ms ) - // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] ) - // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] ) - // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] ) - // 20.3.4.27 Date.prototype.setTime ( time ) - // 20.3.4.28 Date.prototype.setUTCDate ( date ) - // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] ) - // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] ) - // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms ) - // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] ) - // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] ) - // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] ) - // 20.3.4.35 Date.prototype.toDateString ( ) - // 20.3.4.36 Date.prototype.toISOString ( ) - // 20.3.4.37 Date.prototype.toJSON ( key ) - // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] ) - // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] ) - // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] ) - // 20.3.4.41 Date.prototype.toString ( ) - // 20.3.4.42 Date.prototype.toTimeString ( ) - // 20.3.4.43 Date.prototype.toUTCString ( ) - // 20.3.4.44 Date.prototype.valueOf ( ) - // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint ) - // 20.3.5 Properties of Date Instances - - // (No polyfillable changes from ES5) - - // --------------------------------------- - // 21 Text Processing - // --------------------------------------- - - var string_regexp_dispatch = (function() { - var faux = {}, secret = Symbol(); - faux[Symbol.match] = function() { return secret; }; - return ("").match(faux) === secret; - }()); - - // 21.1 String Objects - // 21.1.1 The String Constructor - // 21.1.1.1 String ( value ) - // 21.1.2 Properties of the String Constructor - // 21.1.2.1 String.fromCharCode ( ...codeUnits ) - - // 21.1.2.2 String.fromCodePoint ( ...codePoints ) - define( - String, 'fromCodePoint', - function fromCodePoint(/*...codePoints*/) { - var codePoints = arguments, - length = codePoints.length, - elements = [], - nextIndex = 0; - while (nextIndex < length) { - var next = codePoints[nextIndex]; - var nextCP = Number(next); - if (!SameValue(nextCP, ToInteger(nextCP)) || - nextCP < 0 || nextCP > 0x10FFFF) { - throw RangeError('Invalid code point ' + nextCP); - } - if (nextCP < 0x10000) { - elements.push(String.fromCharCode(nextCP)); - } else { - nextCP -= 0x10000; - elements.push(String.fromCharCode((nextCP >> 10) + 0xD800)); - elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00)); - } - nextIndex += 1; - } - return elements.join(''); - }); - - // 21.1.2.3 String.prototype - - // 21.1.2.4 String.raw ( template , ...substitutions ) - define( - String, 'raw', - function raw(template /*, ...substitutions*/) { - var substitutions = [].slice.call(arguments, 1); - - var cooked = Object(template); - var rawValue = cooked['raw']; - var raw = Object(rawValue); - var len = raw['length']; - var literalSegments = ToLength(len); - if (literalSegments <= 0) return ''; - var stringElements = []; - var nextIndex = 0; - while (true) { - var next = raw[nextIndex]; - var nextSeg = String(next); - stringElements.push(nextSeg); - if (nextIndex + 1 === literalSegments) - return stringElements.join(''); - next = substitutions[nextIndex]; - var nextSub = String(next); - stringElements.push(nextSub); - nextIndex = nextIndex + 1; - } - }); - - // See https://githib.com/inexorabletash/uate for a more useful version. - - // 21.1.3 Properties of the String Prototype Object - // 21.1.3.1 String.prototype.charAt ( pos ) - // 21.1.3.2 String.prototype.charCodeAt ( pos ) - - // 21.1.3.3 String.prototype.codePointAt ( pos ) - define( - String.prototype, 'codePointAt', - function codePointAt(pos) { - var o = strict(this); - var s = String(o); - var position = ToInteger(pos); - var size = s.length; - if (position < 0 || position >= size) return undefined; - var first = s.charCodeAt(position); - if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first; - var second = s.charCodeAt(position + 1); - if (second < 0xDC00 || second > 0xDFFF) return first; - return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000; - }); - - // 21.1.3.4 String.prototype.concat ( ...args ) - // 21.1.3.5 String.prototype.constructor - - // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] ) - define( - String.prototype, 'endsWith', - function endsWith(searchString) { - var endPosition = arguments[1]; - - var o = strict(this); - var s = String(o); - var searchStr = String(searchString); - var len = s.length; - var pos = (endPosition === undefined) ? len : ToInteger(endPosition); - var end = min(max(pos, 0), len); - var searchLength = searchStr.length; - var start = end - searchLength; - if (start < 0) return false; - if (s.substring(start, start + searchLength) === searchStr) return true; - return false; - }); - - // 21.1.3.7 String.prototype.includes ( searchString [ , position ] ) - define( - String.prototype, 'includes', - function includes(searchString) { - var position = arguments[1]; - - var o = strict(this); - var s = String(o); - var searchStr = String(searchString); - var pos = ToInteger(position); - var len = s.length; - var start = min(max(pos, 0), len); - return s.indexOf(searchStr, start) !== -1; - }); - - // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] ) - // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] ) - // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] ) - // 21.1.3.11 String.prototype.match ( regexp ) - define( - String.prototype, 'match', - function match(regexp) { - var o = strict(this); - var s = String(o); - if (HasProperty(regexp, $$match)) var rx = regexp; - else rx = new RegExp(regexp); - return rx[$$match](s); - }, !string_regexp_dispatch); - - // 21.1.3.12 String.prototype.normalize ( [ form ] ) - - // Not practical due to table sizes; if needed, pull in: - // https://github.com/walling/unorm/ - - // 21.1.3.13 String.prototype.repeat ( count ) - define( - String.prototype, 'repeat', - function repeat(count) { - var o = strict(this); - var s = String(o); - var n = ToInteger(count); - if (n < 0) throw RangeError(); - if (n === Infinity) throw RangeError(); - var t = new Array(n + 1).join(s); - return t; - }); - - // 21.1.3.14 String.prototype.replace (searchValue, replaceValue ) - define( - String.prototype, 'replace', - function replace(searchValue, replaceValue) { - var o = strict(this); - if (HasProperty(searchValue, $$replace)) - return searchValue[$$replace](o, replaceValue); - return orig_replace.call(o, searchValue, replaceValue); - }, !string_regexp_dispatch); - - // 21.1.3.15 String.prototype.search ( regexp ) - define( - String.prototype, 'search', - function search(regexp) { - var o = strict(this); - var string = String(o); - if (HasProperty(regexp, $$search)) var rx = regexp; - else rx = new RegExp(regexp); - return rx[$$search](string); - }, !string_regexp_dispatch); - - // 21.1.3.16 String.prototype.slice ( start, end ) - // 21.1.3.17 String.prototype.split ( separator, limit ) - define( - String.prototype, 'split', - function split(separator, limit) { - var o = strict(this); - if (HasProperty(separator, $$split)) - return separator[$$split](o, limit); - return orig_split.call(o, separator, limit); - }, !string_regexp_dispatch); - - // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] ) - define( - String.prototype, 'startsWith', - function startsWith(searchString) { - var position = arguments[1]; - - var o = strict(this); - var s = String(o); - var searchStr = String(searchString); - var pos = ToInteger(position); - var len = s.length; - var start = min(max(pos, 0), len); - var searchLength = searchStr.length; - if (searchLength + start > len) return false; - if (s.substring(start, start + searchLength) === searchStr) return true; - return false; - }); - - // 21.1.3.19 String.prototype.substring ( start, end ) - // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] ) - // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] ) - // 21.1.3.22 String.prototype.toLowerCase ( ) - // 21.1.3.23 String.prototype.toString ( ) - // 21.1.3.24 String.prototype.toUpperCase ( ) - // 21.1.3.25 String.prototype.trim ( ) - // 21.1.3.26 String.prototype.valueOf ( ) - - // 21.1.3.27 String.prototype [ @@iterator ]( ) - define( - String.prototype, $$iterator, - function entries() { - return CreateStringIterator(this, 'value'); - }); - - // 21.1.4 Properties of String Instances - // 21.1.4.1 length - - // 21.1.5 String Iterator Objects - /** @constructor */ - function StringIterator() {} - - // 21.1.5.1 CreateStringIterator Abstract Operation - function CreateStringIterator(string, kind) { - var s = String(string); - var iterator = new StringIterator; - set_internal(iterator, '[[IteratedString]]', s); - set_internal(iterator, '[[StringIteratorNextIndex]]', 0); - set_internal(iterator, '[[StringIterationKind]]', kind); - return iterator; - } - - // 21.1.5.2 The %StringIteratorPrototype% Object - var $StringIteratorPrototype$ = Object.create($IteratorPrototype$); - StringIterator.prototype = $StringIteratorPrototype$; - - // 21.1.5.2.1 %StringIteratorPrototype%.next ( ) - define( - $StringIteratorPrototype$, 'next', - function next() { - var o = ToObject(this); - var s = String(o['[[IteratedString]]']), - index = o['[[StringIteratorNextIndex]]'], - len = s.length; - if (index >= len) { - set_internal(o, '[[StringIteratorNextIndex]]', Infinity); - return CreateIterResultObject(undefined, true); - } - var cp = s.codePointAt(index); - set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1)); - return CreateIterResultObject(String.fromCodePoint(cp), false); - }); - - // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ] - define($StringIteratorPrototype$, $$toStringTag, 'String Iterator'); - - // 21.1.5.3 Properties of String Iterator Instances - - // --------------------------------------- - // 21.2 RegExp (Regular Expression) Objects - // --------------------------------------- - - // 21.2.1 Patterns - // 21.2.2 Pattern Semantics - // 21.2.2.1 Notation - // 21.2.2.2 Pattern - // 21.2.2.3 Disjunction - // 21.2.2.4 Alternative - // 21.2.2.5 Term - // 21.2.2.6 Assertion - // 21.2.2.7 Quantifier - // 21.2.2.8 Atom - // 21.2.2.9 AtomEscape - // 21.2.2.10 CharacterEscape - // 21.2.2.11 DecimalEscape - // 21.2.2.12 CharacterClassEscape - // 21.2.2.13 CharacterClass - // 21.2.2.14 ClassRanges - // 21.2.2.15 NonemptyClassRanges - // 21.2.2.16 NonemptyClassRangesNoDash - // 21.2.2.17 ClassAtom - // 21.2.2.18 ClassAtomNoDash - // 21.2.2.19 ClassEscape - // 21.2.3 The RegExp Constructor - // 21.2.3.1 RegExp ( pattern, flags ) - // 21.2.3.2 new RegExp( ...argumentsList ) - // 21.2.3.3 Abstract Operations for the RegExp Constructor - // 21.2.4 Properties of the RegExp Constructor - // 21.2.4.1 RegExp.prototype - // 21.2.5 Properties of the RegExp Prototype Object - // 21.2.5.1 RegExp.prototype.constructor - // 21.2.5.2 RegExp.prototype.exec ( string ) - - // 21.2.5.3 get RegExp.prototype.flags - if (!('flags' in RegExp.prototype)) { - Object.defineProperty( - RegExp.prototype, 'flags', { - get: function() { - var s = String(this); - return s.substring(s.lastIndexOf('/') + 1); - } - }); - } - - // 21.2.5.4 get RegExp.prototype.global - // 21.2.5.5 get RegExp.prototype.ignoreCase - - // 21.2.5.6 RegExp.prototype [ @@match ] ( string ) - define(RegExp.prototype, $$match, function(string) { - var o = strict(this); - return orig_match.call(string, o); - }); - - // 21.2.5.7 get RegExp.prototype.multiline - - // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue ) - define(RegExp.prototype, $$replace, function(string, replaceValue) { - var o = strict(this); - return orig_replace.call(string, o, replaceValue); - }); - - // 21.2.5.9 RegExp.prototype [ @@search ] ( string ) - define(RegExp.prototype, $$search, function(string) { - var o = strict(this); - return orig_search.call(string, o); - }); - - // 21.2.5.10 get RegExp.prototype.source - - // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit ) - define(RegExp.prototype, $$split, function(string, limit) { - var o = strict(this); - return orig_split.call(string, o, limit); - }); - - // 21.2.5.12 get RegExp.prototype.sticky - // 21.2.5.13 RegExp.prototype.test( S ) - // 21.2.5.14 RegExp.prototype.toString ( ) - // 21.2.5.15 get RegExp.prototype.unicode - - // 21.2.6 Properties of RegExp Instances - // 21.2.6.1 lastIndex - - // (No polyfillable changes from ES5) - - // --------------------------------------- - // 22 Indexed Collections - // --------------------------------------- - - // --------------------------------------- - // 22.1 Array Objects - // --------------------------------------- - - // 22.1.1 The Array Constructor - // 22.1.1.1 Array ( ) - // 22.1.1.2 Array (len) - // 22.1.1.3 Array (...items ) - - // 22.1.2 Properties of the Array Constructor - - // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] ) - define( - Array, 'from', - function from(items) { - var mapfn = arguments[1]; - var thisArg = arguments[2]; - - var c = strict(this); - if (mapfn === undefined) { - var mapping = false; - } else { - if (!IsCallable(mapfn)) throw TypeError(); - var t = thisArg; - mapping = true; - } - var usingIterator = GetMethod(items, $$iterator); - if (usingIterator !== undefined) { - if (IsConstructor(c)) { - var a = new c(); - } else { - a = new Array(0); - } - var iterator = GetIterator(items, usingIterator); - var k = 0; - while (true) { - var next = IteratorStep(iterator); - if (next === false) { - a.length = k; - return a; - } - var nextValue = IteratorValue(next); - if (mapping) - var mappedValue = mapfn.call(t, nextValue); - else - mappedValue = nextValue; - a[k] = mappedValue; - k += 1; - } - } - var arrayLike = ToObject(items); - var lenValue = arrayLike.length; - var len = ToLength(lenValue); - if (IsConstructor(c)) { - a = new c(len); - } else { - a = new Array(len); - } - k = 0; - while (k < len) { - var kValue = arrayLike[k]; - if (mapping) - mappedValue = mapfn.call(t, kValue, k); - else - mappedValue = kValue; - a[k] = mappedValue; - k += 1; - } - a.length = len; - return a; - }); - - // 22.1.2.2 Array.isArray ( arg ) - - // 22.1.2.3 Array.of ( ...items ) - define( - Array, 'of', - function of() { - var items = arguments; - - var lenValue = items.length; - var len = ToUint32(lenValue); - var c = strict(this), a; - if (IsConstructor(c)) { - a = new c(len); - a = ToObject(a); - } else { - a = new Array(len); - } - var k = 0; - while (k < len) { - a[k] = items[k]; - k += 1; - } - a.length = len; - return a; - }); - - // 22.1.2.4 Array.prototype - // 22.1.2.5 get Array [ @@species ] - // 22.1.3 Properties of the Array Prototype Object - // 22.1.3.1 Array.prototype.concat ( ...arguments ) - // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O ) - // 22.1.3.2 Array.prototype.constructor - // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] ) - define( - Array.prototype, 'copyWithin', - function copyWithin(target, start/*, end*/) { - var end = arguments[2]; - - var o = ToObject(this); - var lenVal = o.length; - var len = ToLength(lenVal); - len = max(len, 0); - var relativeTarget = ToInteger(target); - var to; - if (relativeTarget < 0) - to = max(len + relativeTarget, 0); - else - to = min(relativeTarget, len); - var relativeStart = ToInteger(start); - var from; - if (relativeStart < 0) - from = max(len + relativeStart, 0); - else - from = min(relativeStart, len); - var relativeEnd; - if (end === undefined) - relativeEnd = len; - else - relativeEnd = ToInteger(end); - var final; - if (relativeEnd < 0) - final = max(len + relativeEnd, 0); - else - final = min(relativeEnd, len); - var count = min(final - from, len - to); - var direction; - if (from < to && to < from + count) { - direction = -1; - from = from + count - 1; - to = to + count - 1; - } else { - direction = 1; - } - while (count > 0) { - var fromKey = String(from); - var toKey = String(to); - var fromPresent = HasProperty(o, fromKey); - if (fromPresent) { - var fromVal = o[fromKey]; - o[toKey] = fromVal; - } else { - delete o[toKey]; - } - from = from + direction; - to = to + direction; - count = count - 1; - } - return o; - }); - - // 22.1.3.4 Array.prototype.entries ( ) - var nativeArrayIteratorMethods = - ('entries' in Array.prototype && 'next' in [].entries()); - - define( - Array.prototype, 'entries', - function entries() { - return CreateArrayIterator(this, 'key+value'); - }, !nativeArrayIteratorMethods); - - // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] ) - - // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] ) - define( - Array.prototype, 'fill', - function fill(value/*, start, end*/) { - var start = arguments[1], - end = arguments[2]; - - var o = ToObject(this); - var lenVal = o.length; - var len = ToLength(lenVal); - len = max(len, 0); - var relativeStart = ToInteger(start); - var k; - if (relativeStart < 0) - k = max((len + relativeStart), 0); - else - k = min(relativeStart, len); - var relativeEnd; - if (end === undefined) - relativeEnd = len; - else - relativeEnd = ToInteger(end); - var final; - if (relativeEnd < 0) - final = max((len + relativeEnd), 0); - else - final = min(relativeEnd, len); - while (k < final) { - var pk = String(k); - o[pk] = value; - k += 1; - } - return o; - }); - - // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] ) - - // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] ) - define( - Array.prototype, 'find', - function find(predicate) { - var o = ToObject(this); - var lenValue = o.length; - var len = ToInteger(lenValue); - if (!IsCallable(predicate)) throw TypeError(); - var t = arguments.length > 1 ? arguments[1] : undefined; - var k = 0; - while (k < len) { - var pk = String(k); - var kPresent = HasProperty(o, pk); - if (kPresent) { - var kValue = o[pk]; - var testResult = predicate.call(t, kValue, k, o); - if (Boolean(testResult)) { - return kValue; - } - } - ++k; - } - return undefined; - }); - - // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] ) - define( - Array.prototype, 'findIndex', - function findIndex(predicate) { - var o = ToObject(this); - var lenValue = o.length; - var len = ToLength(lenValue); - if (!IsCallable(predicate)) throw TypeError(); - var t = arguments.length > 1 ? arguments[1] : undefined; - var k = 0; - while (k < len) { - var pk = String(k); - var kPresent = HasProperty(o, pk); - if (kPresent) { - var kValue = o[pk]; - var testResult = predicate.call(t, kValue, k, o); - if (Boolean(testResult)) { - return k; - } - } - ++k; - } - return -1; - }); - - // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] ) - // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] ) - // 22.1.3.12 Array.prototype.join (separator) - - // 22.1.3.13 Array.prototype.keys ( ) - define( - Array.prototype, 'keys', - function keys() { - return CreateArrayIterator(this, 'key'); - }, !nativeArrayIteratorMethods); - - // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] ) - // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] ) - // 22.1.3.16 Array.prototype.pop ( ) - // 22.1.3.17 Array.prototype.push ( ...items ) - // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] ) - // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] ) - // 22.1.3.20 Array.prototype.reverse ( ) - // 22.1.3.21 Array.prototype.shift ( ) - // 22.1.3.22 Array.prototype.slice (start, end) - // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] ) - // 22.1.3.24 Array.prototype.sort (comparefn) - // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items ) - // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] ) - // 22.1.3.27 Array.prototype.toString ( ) - // 22.1.3.28 Array.prototype.unshift ( ...items ) - - // 22.1.3.29 Array.prototype.values ( ) - define( - Array.prototype, 'values', - function values() { - return CreateArrayIterator(this, 'value'); - }, !nativeArrayIteratorMethods); - - // 22.1.3.30 Array.prototype [ @@iterator ] ( ) - define( - Array.prototype, $$iterator, - Array.prototype.values - ); - - // 22.1.3.31 Array.prototype [ @@unscopables ] - // 22.1.4 Properties of Array Instances - // 22.1.4.1 length - - // 22.1.5 Array Iterator Objects - function ArrayIterator() {} - - // 22.1.5.1 CreateArrayIterator Abstract Operation - function CreateArrayIterator(array, kind) { - var o = ToObject(array); - var iterator = new ArrayIterator; - set_internal(iterator, '[[IteratedObject]]', o); - set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0); - set_internal(iterator, '[[ArrayIterationKind]]', kind); - return iterator; - } - - // 22.1.5.2 The %ArrayIteratorPrototype% Object - var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$); - ArrayIterator.prototype = $ArrayIteratorPrototype$; - - // 22.1.5.2.1 %ArrayIteratorPrototype%. next( ) - define( - $ArrayIteratorPrototype$, 'next', - function next() { - var o = strict(this); - if (Type(o) !== 'object') throw TypeError(); - var a = o['[[IteratedObject]]'], - index = o['[[ArrayIteratorNextIndex]]'], - itemKind = o['[[ArrayIterationKind]]'], - lenValue = a.length, - len = ToUint32(lenValue), - elementKey, - elementValue; - if (itemKind.indexOf('sparse') !== -1) { - var found = false; - while (!found && index < len) { - elementKey = String(index); - found = HasProperty(a, elementKey); - if (!found) { - index += 1; - } - } - } - if (index >= len) { - set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity); - return CreateIterResultObject(undefined, true); - } - elementKey = index; - set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1); - if (itemKind.indexOf('value') !== -1) - elementValue = a[elementKey]; - if (itemKind.indexOf('key+value') !== -1) - return CreateIterResultObject([elementKey, elementValue], false); - if (itemKind.indexOf('key') !== -1) - return CreateIterResultObject(elementKey, false); - if (itemKind === 'value') - return CreateIterResultObject(elementValue, false); - throw Error('Internal error'); - }); - - // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ] - define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator'); - - // 22.1.5.3 Properties of Array Iterator Instances - - - // --------------------------------------- - // 22.2 TypedArray Objects - // --------------------------------------- - - // See typedarray.js for TypedArray polyfill - - ['Int8Array', 'Uint8Array', 'Uint8ClampedArray', - 'Int16Array', 'Uint16Array', - 'Int32Array', 'Uint32Array', - 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) { - if (!($TypedArrayName$ in global)) - return; - var $TypedArray$ = global[$TypedArrayName$]; - - // 22.2.1 The %TypedArray% Intrinsic Object - // 22.2.1.1 %TypedArray% ( length ) - // 22.2.1.2 %TypedArray% ( typedArray ) - // 22.2.1.3 %TypedArray% ( object ) - // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] ) - // 22.2.1.5 %TypedArray% ( all other argument combinations ) - // 22.2.2 Properties of the %TypedArray% Intrinsic Object - - // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] ) - define( - $TypedArray$, 'from', - function from(source) { - var mapfn = arguments[1]; - var thisArg = arguments[2]; - - var c = strict(this); - if (!IsConstructor(c)) throw TypeError(); - if (mapfn === undefined) { - var mapping = false; - } else { - if (IsCallable(mapfn)) throw TypeError(); - var t = thisArg; - mapping = true; - } - var usingIterator = GetMethod(source, $$iterator); - if (usingIterator !== undefined) { - var iterator = GetIterator(source, usingIterator); - var values = []; - var next = true; - while (next !== false) { - next = IteratorStep(iterator); - if (next !== false) { - var nextValue = IteratorValue(next); - values.push(nextValue); - } - } - var len = values.length; - var newObj = new c(len); - var k = 0; - while (k < len) { - var kValue = values.shift(); - if (mapping) { - var mappedValue = mapfn.call(t, kValue); - } else { - mappedValue = kValue; - } - newObj[k] = mappedValue; - ++k; - } - console.assert(values.length === 0); - return newObj; - } - var arrayLike = ToObject(source); - var lenValue = arrayLike.length; - len = ToLength(lenValue); - newObj = new c(len); - k = 0; - while (k < len) { - kValue = arrayLike[k]; - if (mapping) { - mappedValue = mapfn.call(t, kValue, k); - } else { - mappedValue = kValue; - } - newObj[k] = mappedValue; - ++k; - } - return newObj; - }); - - // 22.2.2.2 %TypedArray%.of ( ...items ) - define( - $TypedArray$, 'of', - function of() { - var items = arguments; - - var len = items.length; - var c = strict(this); - var newObj = new c(len); - var k = 0; - while (k < len) { - newObj[k] = items[k]; - ++k; - } - return newObj; - }); - - // 22.2.2.3 %TypedArray%.prototype - // 22.2.2.4 get %TypedArray% [ @@species ] - // 22.2.3 Properties of the %TypedArrayPrototype% Object - // 22.2.3.1 get %TypedArray%.prototype.buffer - // 22.2.3.2 get %TypedArray%.prototype.byteLength - // 22.2.3.3 get %TypedArray%.prototype.byteOffset - // 22.2.3.4 %TypedArray%.prototype.constructor - - // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] ) - define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin); - - // 22.2.3.6 %TypedArray%.prototype.entries ( ) - define($TypedArray$.prototype, 'entries', Array.prototype.entries); - - // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] ) - define($TypedArray$.prototype, 'every', Array.prototype.every); - - // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] ) - define( - $TypedArray$.prototype, 'fill', - //Array.prototype.fill // Doesn't work in Safari 7 - function fill(value/*, start, end*/) { - var start = arguments[1], - end = arguments[2]; - - var o = ToObject(this); - var lenVal = o.length; - var len = ToLength(lenVal); - len = max(len, 0); - var relativeStart = ToInteger(start); - var k; - if (relativeStart < 0) k = max((len + relativeStart), 0); - else k = min(relativeStart, len); - var relativeEnd; - if (end === undefined) relativeEnd = len; - else relativeEnd = ToInteger(end); - var final; - if (relativeEnd < 0) final = max((len + relativeEnd), 0); - else final = min(relativeEnd, len); - while (k < final) { - var pk = String(k); - o[pk] = value; - k += 1; - } - return o; - }); - - // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] ) - define( - $TypedArray$.prototype, 'filter', - function filter(callbackfn) { - var thisArg = arguments[1]; - - var o = ToObject(this); - var lenVal = o.length; - var len = ToLength(lenVal); - if (!IsCallable(callbackfn)) throw TypeError(); - var t = thisArg; - var c = o.constructor; - var kept = []; - var k = 0; - var captured = 0; - while (k < len) { - var kValue = o[k]; - var selected = callbackfn.call(t, kValue, k, o); - if (selected) { - kept.push(kValue); - ++captured; - } - ++k; - } - var a = new c(captured); - var n = 0; - for (var i = 0; i < kept.length; ++i) { - var e = kept[i]; - a[n] = e; - ++n; - } - return a; - }); - - // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] ) - define($TypedArray$.prototype, 'find', Array.prototype.find); - - // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] ) - define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex); - - // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] ) - define($TypedArray$.prototype, 'forEach', Array.prototype.forEach); - - // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] ) - define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf); - - // 22.2.3.14 %TypedArray%.prototype.join ( separator ) - define($TypedArray$.prototype, 'join', Array.prototype.join); - - // 22.2.3.15 %TypedArray%.prototype.keys ( ) - define($TypedArray$.prototype, 'keys', Array.prototype.keys); - - // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] ) - define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf); - - // 22.2.3.17 get %TypedArray%.prototype.length - - // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] ) - define( - $TypedArray$.prototype, 'map', - function map(callbackfn) { - var thisArg = arguments[1]; - - var o = ToObject(this); - var lenValue = o.length; - var len = ToLength(lenValue); - if (!IsCallable(callbackfn)) throw TypeError(); - var t = thisArg; - var a = undefined; - var c = o.constructor; - if (IsConstructor(c)) - a = new c(len); - if (a === undefined) - a = new Array(len); - var k = 0; - while (k < len) { - var kPresent = HasProperty(o, k); - if (kPresent) { - var kValue = o[k]; - var mappedValue = callbackfn.call(t, kValue, k, o); - a[k] = mappedValue; - } - ++k; - } - return a; - }); - - // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] ) - define($TypedArray$.prototype, 'reduce', Array.prototype.reduce); - - // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] ) - define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight); - - // 22.2.3.21 %TypedArray%.prototype.reverse ( ) - define($TypedArray$.prototype, 'reverse', Array.prototype.reverse); - - // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ]) - // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] ) - // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] ) - - // 22.2.3.23 %TypedArray%.prototype.slice ( start, end ) - define( - $TypedArray$.prototype, 'slice', - function slice(start, end) { - var o = ToObject(this); - var lenVal = o.length; - var len = ToLength(lenVal); - var relativeStart = ToInteger(start); - var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len); - var relativeEnd = (end === undefined) ? len : ToInteger(end); - var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len); - var count = final - k; - var c = o.constructor; - if (IsConstructor(c)) { - var a = new c(count); - } else { - throw TypeError(); - } - var n = 0; - while (k < final) { - var kValue = o[k]; - a[n] = kValue; - ++k; - ++n; - } - return a; - }); - - // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] ) - define($TypedArray$.prototype, 'some', Array.prototype.some); - - // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn ) - define( - $TypedArray$.prototype, 'sort', - function sort() { - var comparefn = arguments[0]; - - function sortCompare(x, y) { - console.assert(Type(x) === 'number' && Type(y) === 'number'); - if (x !== x && y !== y) return +0; - if (x !== x) return 1; - if (y !== y) return -1; - if (comparefn !== undefined) { - return comparefn(x, y); - } - if (x < y) return -1; - if (x > y) return 1; - return +0; - } - return Array.prototype.sort.call(this, sortCompare); - }); - - // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] ) - // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ]) - // 22.2.3.28 %TypedArray%.prototype.toString ( ) - - // 22.2.3.29 %TypedArray%.prototype.values ( ) - define($TypedArray$.prototype, 'values', Array.prototype.values); - - // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( ) - define( - $TypedArray$.prototype, $$iterator, - $TypedArray$.prototype.values - ); - - // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ] - define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$); - - // 22.2.4 The TypedArray Constructors - // 22.2.4.1TypedArray( ... argumentsList) - // 22.2.5 Properties of the TypedArray Constructors - // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT - // 22.2.5.2 TypedArray.prototype - // 22.2.6 Properties of TypedArray Prototype Objects - // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT - // 22.2.6.2 TypedArray.prototype.constructor - // 22.2.7 Properties of TypedArray Instances - }); - - // --------------------------------------- - // 23 Keyed Collection - // --------------------------------------- - - // --------------------------------------- - // 23.1 Map Objects - // --------------------------------------- - - (function() { - // 23.1.1 The Map Constructor - - // 23.1.1.1 Map ( [ iterable ] ) - /** @constructor */ - function Map(/*iterable*/) { - var map = strict(this); - var iterable = arguments[0]; - - if (Type(map) !== 'object') throw TypeError(); - if ('[[MapData]]' in map) throw TypeError(); - - if (iterable !== undefined) { - var adder = map['set']; - if (!IsCallable(adder)) throw TypeError(); - var iter = GetIterator(ToObject(iterable)); - } - set_internal(map, '[[MapData]]', { keys: [], values: [] }); - if (iter === undefined) return map; - while (true) { - var next = IteratorStep(iter); - if (next === false) - return map; - var nextItem = IteratorValue(next); - if (Type(nextItem) !== 'object') throw TypeError(); - var k = nextItem[0]; - var v = nextItem[1]; - adder.call(map, k, v); - } - - return map; - } - - if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING || - (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) || - (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) || - (new global.Map([['a', 1]]).size !== 1)) - global.Map = Map; - - - function MapDataIndexOf(mapData, key) { - var i; - if (key === key) return mapData.keys.indexOf(key); - // Slow case for NaN - for (i = 0; i < mapData.keys.length; i += 1) - if (SameValueZero(mapData.keys[i], key)) return i; - return -1; - } - - // 23.1.1.2 new Map ( ... argumentsList ) - // 23.1.2 Properties of the Map Constructor - // 23.1.2.1 Map.prototype - var $MapPrototype$ = {}; - Map.prototype = $MapPrototype$; - - // 23.1.2.2 get Map [ @@species ] - - // 23.1.3 Properties of the Map Prototype Object - // 23.1.3.1 Map.prototype.clear () - define( - Map.prototype, 'clear', - function clear() { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - if (!('[[MapData]]' in m)) throw TypeError(); - if (m['[[MapData]]'] === undefined) throw TypeError(); - var entries = m['[[MapData]]']; - entries.keys.length = 0; - entries.values.length = 0; - return undefined; - }); - - // 23.1.3.2 Map.prototype.constructor - - // 23.1.3.3 Map.prototype.delete ( key ) - define( - Map.prototype, 'delete', - function delete_(key) { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - if (!('[[MapData]]' in m)) throw TypeError(); - if (m['[[MapData]]'] === undefined) throw TypeError(); - var entries = m['[[MapData]]']; - var i = MapDataIndexOf(entries, key); - if (i < 0) return false; - entries.keys[i] = empty; - entries.values[i] = empty; - return true; - }); - - // 23.1.3.4 Map.prototype.entries ( ) - define( - Map.prototype, 'entries', - function entries() { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - return CreateMapIterator(m, 'key+value'); - }); - - // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] ) - define( - Map.prototype, 'forEach', - function forEach(callbackfn /*, thisArg*/) { - var thisArg = arguments[1]; - - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - if (!('[[MapData]]' in m)) throw TypeError(); - if (m['[[MapData]]'] === undefined) throw TypeError(); - var entries = m['[[MapData]]']; - - if (!IsCallable(callbackfn)) { - throw TypeError('First argument to forEach is not callable.'); - } - for (var i = 0; i < entries.keys.length; ++i) { - if (entries.keys[i] !== empty) { - callbackfn.call(thisArg, entries.values[i], entries.keys[i], m); - } - } - return undefined; - }); - - // 23.1.3.6 Map.prototype.get ( key ) - define( - Map.prototype, 'get', - function get(key) { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - if (!('[[MapData]]' in m)) throw TypeError(); - if (m['[[MapData]]'] === undefined) throw TypeError(); - var entries = m['[[MapData]]']; - var i = MapDataIndexOf(entries, key); - if (i >= 0) return entries.values[i]; - return undefined; - }); - - // 23.1.3.7 Map.prototype.has ( key ) - define( - Map.prototype, 'has', - function has(key) { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - if (!('[[MapData]]' in m)) throw TypeError(); - if (m['[[MapData]]'] === undefined) throw TypeError(); - var entries = m['[[MapData]]']; - if (MapDataIndexOf(entries, key) >= 0) return true; - return false; - }); - - // 23.1.3.8 Map.prototype.keys ( ) - define( - Map.prototype, 'keys', - function keys() { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - return CreateMapIterator(m, 'key'); - }); - - // 23.1.3.9 Map.prototype.set ( key , value ) - define( - Map.prototype, 'set', - function set(key, value) { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - if (!('[[MapData]]' in m)) throw TypeError(); - if (m['[[MapData]]'] === undefined) throw TypeError(); - var entries = m['[[MapData]]']; - var i = MapDataIndexOf(entries, key); - if (i < 0) i = entries.keys.length; - if (SameValue(key, -0)) key = 0; - entries.keys[i] = key; - entries.values[i] = value; - return m; - }); - - // 23.1.3.10 get Map.prototype.size - Object.defineProperty( - Map.prototype, 'size', { - get: function() { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - if (!('[[MapData]]' in m)) throw TypeError(); - if (m['[[MapData]]'] === undefined) throw TypeError(); - var entries = m['[[MapData]]']; - var count = 0; - for (var i = 0; i < entries.keys.length; ++i) { - if (entries.keys[i] !== empty) - count = count + 1; - } - return count; - } - }); - - // 23.1.3.11 Map.prototype.values ( ) - define( - Map.prototype, 'values', - function values() { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - return CreateMapIterator(m, 'value'); - }); - - // 23.1.3.12 Map.prototype [ @@iterator ]( ) - define( - Map.prototype, $$iterator, - function() { - var m = strict(this); - if (Type(m) !== 'object') throw TypeError(); - return CreateMapIterator(m, 'key+value'); - }); - - // 23.1.3.13 Map.prototype [ @@toStringTag ] - define(global.Map.prototype, $$toStringTag, 'Map'); - - // 23.1.4 Properties of Map Instances - // 23.1.5 Map Iterator Objects - - /** @constructor */ - function MapIterator() {} - - // 23.1.5.1 CreateMapIterator Abstract Operation - function CreateMapIterator(map, kind) { - if (Type(map) !== 'object') throw TypeError(); - if (!('[[MapData]]' in map)) throw TypeError(); - if (map['[[MapData]]'] === undefined) throw TypeError(); - var iterator = new MapIterator; - set_internal(iterator, '[[Map]]', map); - set_internal(iterator, '[[MapNextIndex]]', 0); - set_internal(iterator, '[[MapIterationKind]]', kind); - return iterator; - } - - // 23.1.5.2 The %MapIteratorPrototype% Object - var $MapIteratorPrototype$ = Object.create($IteratorPrototype$); - MapIterator.prototype = $MapIteratorPrototype$; - - // 23.1.5.2.1 %MapIteratorPrototype%.next ( ) - define( - $MapIteratorPrototype$, 'next', - function next() { - var o = strict(this); - if (Type(o) !== 'object') throw TypeError(); - var m = o['[[Map]]'], - index = o['[[MapNextIndex]]'], - itemKind = o['[[MapIterationKind]]'], - entries = m['[[MapData]]']; - while (index < entries.keys.length) { - var e = {key: entries.keys[index], value: entries.values[index]}; - index = index += 1; - set_internal(o, '[[MapNextIndex]]', index); - if (e.key !== empty) { - if (itemKind === 'key') { - return CreateIterResultObject(e.key, false); - } else if (itemKind === 'value') { - return CreateIterResultObject(e.value, false); - } else { - return CreateIterResultObject([e.key, e.value], false); - } - } - } - return CreateIterResultObject(undefined, true); - }); - - // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ] - define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator'); - - // 23.1.5.3 Properties of Map Iterator Instances - }()); - - // --------------------------------------- - // 23.2 Set Objects - // --------------------------------------- - - (function() { - // 23.2.1 The Set Constructor - // 23.2.1.1 Set ( [ iterable ] ) - - /** @constructor */ - function Set(/*iterable*/) { - var set = strict(this); - var iterable = arguments[0]; - - if (Type(set) !== 'object') throw TypeError(); - if ('[[SetData]]' in set) throw TypeError(); - - if (iterable !== undefined) { - var adder = set['add']; - if (!IsCallable(adder)) throw TypeError(); - var iter = GetIterator(ToObject(iterable)); - } - set_internal(set, '[[SetData]]', []); - if (iter === undefined) return set; - while (true) { - var next = IteratorStep(iter); - if (next === false) - return set; - var nextValue = IteratorValue(next); - adder.call(set, nextValue); - } - - return set; - } - - if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING || - (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) || - (new global.Set([1]).size !== 1)) - global.Set = Set; - - function SetDataIndexOf(setData, key) { - var i; - if (key === key) - return setData.indexOf(key); - // Slow case for NaN - for (i = 0; i < setData.length; i += 1) - if (SameValueZero(setData[i], key)) return i; - return -1; - } - - // 23.2.1.2 new Set ( ...argumentsList ) - // 23.2.2 Properties of the Set Constructor - - // 23.2.2.1 Set.prototype - var $SetPrototype$ = {}; - Set.prototype = $SetPrototype$; - - // 23.2.2.2 get Set [ @@species ] - // 23.2.3 Properties of the Set Prototype Object - - // 23.2.3.1 Set.prototype.add (value ) - define( - Set.prototype, 'add', - function add(value) { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - if (!('[[SetData]]' in s)) throw TypeError(); - if (s['[[SetData]]'] === undefined) throw TypeError(); - if (SameValue(value, -0)) value = 0; - var entries = s['[[SetData]]']; - var i = SetDataIndexOf(entries, value); - if (i < 0) i = s['[[SetData]]'].length; - s['[[SetData]]'][i] = value; - - return s; - }); - - // 23.2.3.2 Set.prototype.clear () - define( - Set.prototype, 'clear', - function clear() { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - if (!('[[SetData]]' in s)) throw TypeError(); - if (s['[[SetData]]'] === undefined) throw TypeError(); - var entries = s['[[SetData]]']; - entries.length = 0; - return undefined; - }); - - // 23.2.3.3 Set.prototype.constructor - // 23.2.3.4 Set.prototype.delete ( value ) - define( - Set.prototype, 'delete', - function delete_(value) { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - if (!('[[SetData]]' in s)) throw TypeError(); - if (s['[[SetData]]'] === undefined) throw TypeError(); - var entries = s['[[SetData]]']; - var i = SetDataIndexOf(entries, value); - if (i < 0) return false; - entries[i] = empty; - return true; - }); - - // 23.2.3.5 Set.prototype.entries ( ) - define( - Set.prototype, 'entries', - function entries() { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - return CreateSetIterator(s, 'key+value'); - }); - - // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] ) - define( - Set.prototype, 'forEach', - function forEach(callbackfn/*, thisArg*/) { - var thisArg = arguments[1]; - - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - if (!('[[SetData]]' in s)) throw TypeError(); - if (s['[[SetData]]'] === undefined) throw TypeError(); - var entries = s['[[SetData]]']; - - if (!IsCallable(callbackfn)) { - throw TypeError('First argument to forEach is not callable.'); - } - for (var i = 0; i < entries.length; ++i) { - if (entries[i] !== empty) { - callbackfn.call(thisArg, entries[i], entries[i], s); - } - } - }); - - // 23.2.3.7 Set.prototype.has ( value ) - define( - Set.prototype, 'has', - function has(key) { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - if (!('[[SetData]]' in s)) throw TypeError(); - if (s['[[SetData]]'] === undefined) throw TypeError(); - var entries = s['[[SetData]]']; - return SetDataIndexOf(entries, key) !== -1; - }); - - // 23.2.3.8 Set.prototype.keys ( ) - // See Set.prototype.values - - // 23.2.3.9 get Set.prototype.size - Object.defineProperty( - Set.prototype, 'size', { - get: function() { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - if (!('[[SetData]]' in s)) throw TypeError(); - if (s['[[SetData]]'] === undefined) throw TypeError(); - var entries = s['[[SetData]]']; - var count = 0; - for (var i = 0; i < entries.length; ++i) { - if (entries[i] !== empty) - count = count + 1; - } - return count; - } - }); - - // 23.2.3.10 Set.prototype.values ( ) - define( - Set.prototype, 'values', - function values() { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - return CreateSetIterator(s, 'value'); - }); - // NOTE: function name is still 'values': - Set.prototype.keys = Set.prototype.values; - - // 23.2.3.11 Set.prototype [@@iterator ] ( ) - define( - Set.prototype, $$iterator, - function() { - var s = strict(this); - if (Type(s) !== 'object') throw TypeError(); - return CreateSetIterator(s); - }); - - // 23.2.3.12 Set.prototype [ @@toStringTag ] - define(global.Set.prototype, $$toStringTag, 'Set'); - - // 23.2.4 Properties of Set Instances - // 23.2.5 Set Iterator Objects - /** @constructor */ - function SetIterator() {} - - // 23.2.5.1 CreateSetIterator Abstract Operation - function CreateSetIterator(set, kind) { - if (Type(set) !== 'object') throw TypeError(); - if (!('[[SetData]]' in set)) throw TypeError(); - if (set['[[SetData]]'] === undefined) throw TypeError(); - var iterator = new SetIterator; - set_internal(iterator, '[[IteratedSet]]', set); - set_internal(iterator, '[[SetNextIndex]]', 0); - set_internal(iterator, '[[SetIterationKind]]', kind); - return iterator; - } - - // 23.2.5.2 The %SetIteratorPrototype% Object - var $SetIteratorPrototype$ = Object.create($IteratorPrototype$); - SetIterator.prototype = $SetIteratorPrototype$; - - // 23.2.5.2.1 %SetIteratorPrototype%.next( ) - define( - $SetIteratorPrototype$, 'next', - function next() { - var o = strict(this); - if (Type(o) !== 'object') throw TypeError(); - var s = o['[[IteratedSet]]'], - index = o['[[SetNextIndex]]'], - itemKind = o['[[SetIterationKind]]'], - entries = s['[[SetData]]']; - while (index < entries.length) { - var e = entries[index]; - index = index += 1; - set_internal(o, '[[SetNextIndex]]', index); - if (e !== empty) { - if (itemKind === 'key+value') - return CreateIterResultObject([e, e], false); - return CreateIterResultObject(e, false); - } - } - return CreateIterResultObject(undefined, true); - }); - - // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ] - define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator'); - - // 23.2.5.3 Properties of Set Iterator Instances - - }()); - - // --------------------------------------- - // 23.3 WeakMap Objects - // --------------------------------------- - - (function() { - // 23.3.1 The WeakMap Constructor - // 23.3.1.1 WeakMap ( [ iterable ] ) - /** @constructor */ - function WeakMap(/*iterable*/) { - var map = strict(this); - var iterable = arguments[0]; - - if (Type(map) !== 'object') throw TypeError(); - if ('[[WeakMapData]]' in map) throw TypeError(); - - if (iterable !== undefined) { - var adder = map['set']; - if (!IsCallable(adder)) throw TypeError(); - var iter = GetIterator(ToObject(iterable)); - } - set_internal(map, '[[WeakMapData]]', new EphemeronTable); - if (iter === undefined) return map; - while (true) { - var next = IteratorStep(iter); - if (next === false) - return map; - var nextValue = IteratorValue(next); - if (Type(nextValue) !== 'object') throw TypeError(); - var k = nextValue[0]; - var v = nextValue[1]; - adder.call(map, k, v); - } - - return map; - } - - if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING) - global.WeakMap = WeakMap; - - // 23.3.2 Properties of the WeakMap Constructor - // 23.3.2.1 WeakMap.prototype - var $WeakMapPrototype$ = {}; - WeakMap.prototype = $WeakMapPrototype$; - - - - // 23.3.2.2 WeakMap[ @@create ] ( ) - // 23.3.3 Properties of the WeakMap Prototype Object - - // 23.3.3.1 WeakMap.prototype.constructor - - // 23.3.3.2 WeakMap.prototype.delete ( key ) - define( - WeakMap.prototype, 'delete', - function delete_(key) { - var M = strict(this); - if (Type(M) !== 'object') throw TypeError(); - if (M['[[WeakMapData]]'] === undefined) throw TypeError(); - if (Type(key) !== 'object') throw TypeError('Expected object'); - return M['[[WeakMapData]]'].remove(key); - }); - - // 23.3.3.3 WeakMap.prototype.get ( key ) - define( - WeakMap.prototype, 'get', - function get(key, defaultValue) { - var M = strict(this); - if (Type(M) !== 'object') throw TypeError(); - if (M['[[WeakMapData]]'] === undefined) throw TypeError(); - if (Type(key) !== 'object') throw TypeError('Expected object'); - return M['[[WeakMapData]]'].get(key, defaultValue); - }); - - // 23.3.3.4 WeakMap.prototype.has ( key ) - define( - WeakMap.prototype, 'has', - function has(key) { - var M = strict(this); - if (Type(M) !== 'object') throw TypeError(); - if (M['[[WeakMapData]]'] === undefined) throw TypeError(); - if (Type(key) !== 'object') throw TypeError('Expected object'); - return M['[[WeakMapData]]'].has(key); - }); - - // 23.3.3.5 WeakMap.prototype.set ( key , value ) - define( - WeakMap.prototype, 'set', - function set(key, value) { - var M = strict(this); - if (Type(M) !== 'object') throw TypeError(); - if (M['[[WeakMapData]]'] === undefined) throw TypeError(); - if (Type(key) !== 'object') throw TypeError('Expected object'); - M['[[WeakMapData]]'].set(key, value); - return M; - }); - - // 23.3.3.6 WeakMap.prototype [ @@toStringTag ] - define(global.WeakMap.prototype, $$toStringTag, 'WeakMap'); - - // 23.3.4 Properties of WeakMap Instances - - // Polyfills for incomplete native implementations: - (function() { - var wm = new global.WeakMap(); - var orig = global.WeakMap.prototype.set; - define(global.WeakMap.prototype, 'set', function set() { - orig.apply(this, arguments); - return this; - }, wm.set({}, 0) !== wm); - }()); - }()); - - // --------------------------------------- - // 23.4 WeakSet Objects - // --------------------------------------- - - (function() { - // 23.4.1 The WeakSet Constructor - // 23.4.1.1 WeakSet ( [ iterable ] ) - /** @constructor */ - function WeakSet(/*iterable*/) { - var set = strict(this); - var iterable = arguments[0]; - - if (Type(set) !== 'object') throw TypeError(); - if ('[[WeakSetData]]' in set) throw TypeError(); - - if (iterable !== undefined) { - var adder = set['add']; - if (!IsCallable(adder)) throw TypeError(); - var iter = GetIterator(ToObject(iterable)); - } - set_internal(set, '[[WeakSetData]]', new EphemeronTable); - if (iter === undefined) return set; - while (true) { - var next = IteratorStep(iter); - if (next === false) - return set; - var nextValue = IteratorValue(next); - adder.call(set, nextValue); - } - - return set; - } - - if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING) - global.WeakSet = WeakSet; - - // 23.4.2 Properties of the WeakSet Constructor - // 23.4.2.1 WeakSet.prototype - var $WeakSetPrototype$ = {}; - WeakSet.prototype = $WeakSetPrototype$; - - // 23.4.3 Properties of the WeakSet Prototype Object - // 23.4.3.1 WeakSet.prototype.add (value ) - define( - WeakSet.prototype, 'add', - function add(value) { - var S = strict(this); - if (Type(S) !== 'object') throw TypeError(); - if (S['[[WeakSetData]]'] === undefined) throw TypeError(); - if (Type(value) !== 'object') throw TypeError('Expected object'); - S['[[WeakSetData]]'].set(value, true); - return S; - }); - - // 23.4.3.2 WeakSet.prototype.constructor - // 23.4.3.3 WeakSet.prototype.delete ( value ) - define( - WeakSet.prototype, 'delete', - function delete_(value) { - var S = strict(this); - if (Type(S) !== 'object') throw TypeError(); - if (S['[[WeakSetData]]'] === undefined) throw TypeError(); - if (Type(value) !== 'object') throw TypeError('Expected object'); - return S['[[WeakSetData]]'].remove(value); - }); - - // 23.4.3.4 WeakSet.prototype.has ( value ) - define( - WeakSet.prototype, 'has', - function has(key) { - var S = strict(this); - if (Type(S) !== 'object') throw TypeError(); - if (S['[[WeakSetData]]'] === undefined) throw TypeError(); - if (Type(key) !== 'object') throw TypeError('Expected object'); - return S['[[WeakSetData]]'].has(key); - }); - - // 23.4.3.5 WeakSet.prototype [ @@toStringTag ] - define(global.WeakSet.prototype, $$toStringTag, 'WeakSet'); - - // 23.4.4 Properties of WeakSet Instances - - // Polyfills for incomplete native implementations: - (function() { - var ws = new global.WeakSet(); - var orig = global.WeakSet.prototype.add; - define(global.WeakSet.prototype, 'add', function add() { - orig.apply(this, arguments); - return this; - }, ws.add({}) !== ws); - }()); - }()); - - // --------------------------------------- - // 24 Structured Data - // --------------------------------------- - - // --------------------------------------- - // 24.1 ArrayBuffer Objects - // --------------------------------------- - - // See typedarray.js for TypedArray polyfill - - (function() { - if (!('ArrayBuffer' in global)) - return; - - // 24.1.1 Abstract Operations For ArrayBuffer Objects - // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength ) - // 24.1.1.2 IsDetachedBuffer( arrayBuffer ) - // 24.1.1.3 DetachArrayBuffer( arrayBuffer ) - // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] ) - // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian ) - // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian ) - // 24.1.2 The ArrayBuffer Constructor - // 24.1.2.1 ArrayBuffer( length ) - // 24.1.3 Properties of the ArrayBuffer Constructor - - // 24.1.3.1 ArrayBuffer.isView ( arg ) - define( - ArrayBuffer, 'isView', - function isView(arg) { - if (Type(arg) !== 'object') return false; - if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true; - return false; - }); - - // 24.1.3.2 ArrayBuffer.prototype - // 24.1.3.3 get ArrayBuffer [ @@species ] - // 24.1.4 Properties of the ArrayBuffer Prototype Object - // 24.1.4.1 get ArrayBuffer.prototype.byteLength - // 24.1.4.2 ArrayBuffer.prototype.constructor - // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end) - - // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ] - define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer'); - - // 24.1.5 Properties of the ArrayBuffer Instances - }()); - - // --------------------------------------- - // 24.2 DataView Objects - // --------------------------------------- - - // See typedarray.js for TypedArray polyfill - - (function() { - if (!('DataView' in global)) - return; - - // 24.2.1 Abstract Operations For DataView Objects - // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type) - // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value) - // 24.2.2 The DataView Constructor - // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] ) - // 24.2.3 Properties of the DataView Constructor - // 24.2.3.1 DataView.prototype - // 24.2.4 Properties of the DataView Prototype Object - // 24.2.4.1 get DataView.prototype.buffer - // 24.2.4.2 get DataView.prototype.byteLength - // 24.2.4.3 get DataView.prototype.byteOffset - // 24.2.4.4 DataView.prototype.constructor - // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] ) - // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] ) - // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset ) - // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] ) - // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] ) - // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset ) - // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] ) - // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] ) - // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] ) - // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] ) - // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value ) - // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] ) - // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] ) - // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value ) - // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] ) - // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] ) - - // 24.2.4.21 DataView.prototype[ @@toStringTag ] - define(DataView.prototype, $$toStringTag, 'DataView'); - - // 24.2.5 Properties of DataView Instances - }()); - - // --------------------------------------- - // 24.3 The JSON Object - // --------------------------------------- - - // 24.3.1 JSON.parse ( text [ , reviver ] ) - // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] ) - // 24.3.3 JSON [ @@toStringTag ] - define(JSON, $$toStringTag, 'JSON'); - - // --------------------------------------- - // 25.1 Iteration - // --------------------------------------- - - // 25.1.1 Common Iteration Interfaces - // 25.1.1.1 The Iterable Interface - // 25.1.1.2 The Iterator Interface - // 25.1.1.3 The IteratorResult Interface - - // 25.1.2 The %IteratorPrototype% Object - // Defined earlier, so other prototypes can reference it. - // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( ) - define($IteratorPrototype$, $$iterator, function() { - return this; - }); - - - // --------------------------------------- - // 25.4 Promise Objects - // --------------------------------------- - - (function() { - // 25.4 Promise Objects - - // 25.4.1 Promise Abstract Operations - - // 25.4.1.1 PromiseCapability Records - // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability ) - - function IfAbruptRejectPromise(value, capability) { - var rejectResult = capability['[[Reject]]'].call(undefined, value); - return capability['[[Promise]]']; - } - - // 25.4.1.2 PromiseReaction Records - - // 25.4.1.3 CreateResolvingFunctions ( promise ) - - function CreateResolvingFunctions(promise) { - var alreadyResolved = {'[[value]]': false}; - var resolve = PromiseResolveFunction(); - set_internal(resolve, '[[Promise]]', promise); - set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved); - var reject = PromiseRejectFunction(); - set_internal(reject, '[[Promise]]', promise); - set_internal(reject, '[[AlreadyResolved]]', alreadyResolved); - return { '[[Resolve]]': resolve, '[[Reject]]': reject}; - } - - // 25.4.1.3.1 Promise Reject Functions - - function PromiseRejectFunction() { - var F = function(reason) { - console.assert(Type(F['[[Promise]]']) === 'object'); - var promise = F['[[Promise]]']; - var alreadyResolved = F['[[AlreadyResolved]]']; - if (alreadyResolved['[[value]]']) return undefined; - set_internal(alreadyResolved, '[[value]]', true); - return RejectPromise(promise, reason); - }; - return F; - } - - // 25.4.1.3.2 Promise Resolve Functions - - function PromiseResolveFunction() { - var F = function(resolution) { - console.assert(Type(F['[[Promise]]']) === 'object'); - var promise = F['[[Promise]]']; - var alreadyResolved = F['[[AlreadyResolved]]']; - if (alreadyResolved['[[value]]']) return undefined; - set_internal(alreadyResolved, '[[value]]', true); - - if (SameValue(resolution, promise)) { - var selfResolutionError = TypeError(); - return RejectPromise(promise, selfResolutionError); - } - if (Type(resolution) !== 'object') - return FulfillPromise(promise, resolution); - try { - var then = resolution['then']; - } catch(then) { - return RejectPromise(promise, then); - } - if (!IsCallable(then)) - return FulfillPromise(promise, resolution); - EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]); - return undefined; - }; - return F; - } - - // 25.4.1.4 FulfillPromise ( promise, value ) - - function FulfillPromise(promise, value) { - console.assert(promise['[[PromiseState]]'] === 'pending'); - var reactions = promise['[[PromiseFulfillReactions]]']; - set_internal(promise, '[[PromiseResult]]', value); - set_internal(promise, '[[PromiseFulfillReactions]]', undefined); - set_internal(promise, '[[PromiseRejectReactions]]', undefined); - set_internal(promise, '[[PromiseState]]', 'fulfilled'); - return TriggerPromiseReactions(reactions, value); - } - - // 25.4.1.5 NewPromiseCapability ( C ) - - function NewPromiseCapability(c) { - // To keep Promise hermetic, this doesn't look much like the spec. - return CreatePromiseCapabilityRecord(undefined, c); - } - - // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor ) - - function CreatePromiseCapabilityRecord(promise, constructor) { - // To keep Promise hermetic, this doesn't look much like the spec. - console.assert(IsConstructor(constructor)); - var promiseCapability = {}; - set_internal(promiseCapability, '[[Promise]]', promise); - set_internal(promiseCapability, '[[Resolve]]', undefined); - set_internal(promiseCapability, '[[Reject]]', undefined); - var executor = GetCapabilitiesExecutor(); - set_internal(executor, '[[Capability]]', promiseCapability); - - // NOTE: Differs from spec; object is constructed here - var constructorResult = promise = new constructor(executor); - set_internal(promiseCapability, '[[Promise]]', promise); - - if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError(); - if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError(); - if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError(); - return promiseCapability; - } - - // 25.4.1.5.2 GetCapabilitiesExecutor Functions - - function GetCapabilitiesExecutor() { - var F = function(resolve, reject) { - console.assert(F['[[Capability]]']); - var promiseCapability = F['[[Capability]]']; - if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError(); - if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError(); - set_internal(promiseCapability, '[[Resolve]]', resolve); - set_internal(promiseCapability, '[[Reject]]', reject); - return undefined; - }; - return F; - } - - // 25.4.1.6 IsPromise ( x ) - - function IsPromise(x) { - if (Type(x) !== 'object') return false; - if (!('[[PromiseState]]' in x)) return false; - if (x['[[PromiseState]]'] === undefined) return false; - return true; - } - - // 25.4.1.7 RejectPromise ( promise, reason ) - - function RejectPromise(promise, reason) { - console.assert(promise['[[PromiseState]]'] === 'pending'); - var reactions = promise['[[PromiseRejectReactions]]']; - set_internal(promise, '[[PromiseResult]]', reason); - set_internal(promise, '[[PromiseFulfillReactions]]', undefined); - set_internal(promise, '[[PromiseRejectReactions]]', undefined); - set_internal(promise, '[[PromiseState]]', 'rejected'); - return TriggerPromiseReactions(reactions, reason); - } - - // 25.4.1.8 TriggerPromiseReactions ( reactions, argument ) - - function TriggerPromiseReactions(reactions, argument) { - for (var i = 0, len = reactions.length; i < len; ++i) - EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]); - return undefined; - } - - // 25.4.2 Promise Jobs - - // 25.4.2.1 PromiseReactionJob ( reaction, argument ) - - function PromiseReactionJob(reaction, argument) { - var promiseCapability = reaction['[[Capabilities]]']; - var handler = reaction['[[Handler]]']; - var handlerResult, status; - try { - if (handler === 'Identity') handlerResult = argument; - else if (handler === 'Thrower') throw argument; - else handlerResult = handler.call(undefined, argument); - } catch (handlerResult) { - status = promiseCapability['[[Reject]]'].call(undefined, handlerResult); - NextJob(status); return; - } - status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult); - NextJob(status); - } - - // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then) - - function PromiseResolveThenableJob(promiseToResolve, thenable, then) { - // SPEC BUG: promise vs. promiseToResolve - var resolvingFunctions = CreateResolvingFunctions(promiseToResolve); - try { - var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'], - resolvingFunctions['[[Reject]]']); - } catch (thenCallResult) { - var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult); - NextJob(status); return; - } - NextJob(thenCallResult); - } - - // 25.4.3 The Promise Constructor - - // 25.4.3.1 Promise ( executor ) - - function Promise(executor) { - var config = { configurable: false, enumerable: false, writable: true, value: undefined }; - Object.defineProperty(this, '[[PromiseState]]', config); - Object.defineProperty(this, '[[PromiseConstructor]]', config); - Object.defineProperty(this, '[[PromiseResult]]', config); - Object.defineProperty(this, '[[PromiseFulfillReactions]]', config); - Object.defineProperty(this, '[[PromiseRejectReactions]]', config); - - var promise = this; - if (Type(promise) !== 'object') throw new TypeError(); - if (!('[[PromiseState]]' in promise)) throw TypeError(); - if (promise['[[PromiseState]]'] !== undefined) throw TypeError(); - if (!IsCallable(executor)) throw TypeError(); - - set_internal(promise, '[[PromiseConstructor]]', Promise); - - return InitializePromise(promise, executor); - } - - // 25.4.3.1.1 InitializePromise ( promise, executor ) - - function InitializePromise(promise, executor) { - console.assert('[[PromiseState]]' in promise); - console.assert(IsCallable(executor)); - set_internal(promise, '[[PromiseState]]', 'pending'); - set_internal(promise, '[[PromiseFulfillReactions]]', []); - set_internal(promise, '[[PromiseRejectReactions]]', []); - var resolvingFunctions = CreateResolvingFunctions(promise); - try { - var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'], - resolvingFunctions['[[Reject]]']); - } catch (completion) { - var status = resolvingFunctions['[[Reject]]'].call(undefined, completion); - } - return promise; - } - - // 25.4.4 Properties of the Promise Constructor - // 25.4.4.1 Promise.all ( iterable ) - - define(Promise, 'all', function all(iterable) { - var c = strict(this); - var promiseCapability = NewPromiseCapability(c); - try { - var iterator = GetIterator(iterable); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - var values = []; - var remainingElementsCount = { value: 1 }; - var index = 0; - while (true) { - try { - var next = IteratorStep(iterator); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - if (!next) { - remainingElementsCount.value -= 1; - if (remainingElementsCount.value === 0) { - var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values); - - - } - return promiseCapability['[[Promise]]']; - } - try { - var nextValue = IteratorValue(next); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - try { - var nextPromise = c.resolve(nextValue); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - var resolveElement = PromiseAllResolveElementFunction(); - set_internal(resolveElement, '[[AlreadyCalled]]', { value: false }); - set_internal(resolveElement, '[[Index]]', index); - set_internal(resolveElement, '[[Values]]', values); - set_internal(resolveElement, '[[Capabilities]]', promiseCapability); - set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount); - remainingElementsCount.value += 1; - try { - var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - index += 1; - } - }); - - // 25.4.4.1.1 Promise.all Resolve Element Functions - - function PromiseAllResolveElementFunction() { - var F = function(x) { - var alreadyCalled = F['[[AlreadyCalled]]']; - if (alreadyCalled.value) return undefined; - alreadyCalled.value = true; - var index = F['[[Index]]']; - var values = F['[[Values]]']; - var promiseCapability = F['[[Capabilities]]']; - var remainingElementsCount = F['[[RemainingElements]]']; - try { - values[index] = x; - } catch (result) { - promiseCapability['[[Reject]]'].call(undefined, result); - return promiseCapability['[[Promise]]']; - } - remainingElementsCount.value -= 1; - if (remainingElementsCount.value === 0) - return promiseCapability['[[Resolve]]'].call(undefined, values); - return undefined; - }; - return F; - } - - // 25.4.4.2 Promise.prototype - - Promise.prototype = {}; - - // 25.4.4.3 Promise.race ( iterable ) - - define(Promise, 'race', function race(iterable) { - var c = strict(this); - var promiseCapability = NewPromiseCapability(c); - try { - var iterator = GetIterator(iterable); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - while (true) { - try { - var next = IteratorStep(iterator); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - if (!next) return promiseCapability['[[Promise]]']; - try { - var nextValue = IteratorValue(next); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - try { - var nextPromise = c.resolve(nextValue); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - try { - nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']); - } catch (value) { - promiseCapability['[[Reject]]'].call(undefined, value); - return promiseCapability['[[Promise]]']; - } - } - }); - - // 25.4.4.4 Promise.reject ( r ) - - define(Promise, 'reject', function reject(r) { - var c = strict(this); - var promiseCapability = NewPromiseCapability(c); - var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r); - return promiseCapability['[[Promise]]']; - }); - - // 25.4.4.5 Promise.resolve ( x ) - - define(Promise, 'resolve', function resolve(x) { - var c = strict(this); - if (IsPromise(x)) { - var constructor = x['[[PromiseConstructor]]']; - if (SameValue(constructor, c)) return x; - } - var promiseCapability = NewPromiseCapability(c); - var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x); - return promiseCapability['[[Promise]]']; - }); - - // 25.4.4.6 Promise [ @@create ] ( ) - // 25.4.4.6.1 AllocatePromise ( constructor ) - // 25.4.5 Properties of the Promise Prototype Object - // 25.4.5.1 Promise.prototype.catch ( onRejected ) - - define(Promise.prototype, 'catch', function catch_(onRejected) { - var promise = this; - return promise.then(undefined, onRejected); - }); - - // 25.4.5.2 Promise.prototype.constructor - - Promise.prototype.constructor = Promise; - - // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected ) - - define(Promise.prototype, 'then', function then(onFulfilled, onRejected) { - var promise = this; - if (!IsPromise(promise)) throw TypeError(); - if (!IsCallable(onFulfilled)) onFulfilled = 'Identity'; - if (!IsCallable(onRejected)) onRejected = 'Thrower'; - var c = promise.constructor; - var promiseCapability = NewPromiseCapability(c); - var fulfillReaction = { '[[Capabilities]]': promiseCapability, - '[[Handler]]': onFulfilled }; - var rejectReaction = { '[[Capabilities]]': promiseCapability, - '[[Handler]]': onRejected }; - if (promise['[[PromiseState]]'] === 'pending') { - promise['[[PromiseFulfillReactions]]'].push(fulfillReaction); - promise['[[PromiseRejectReactions]]'].push(rejectReaction); - } else if (promise['[[PromiseState]]'] === 'fulfilled') { - var value = promise['[[PromiseResult]]']; - EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]); - } else if (promise['[[PromiseState]]'] === 'rejected') { - var reason = promise['[[PromiseResult]]']; - EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]); - } - return promiseCapability['[[Promise]]']; - }); - - // 25.4.6 Properties of Promise Instances - - if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING) - global.Promise = Promise; - - // Patch early Promise.cast vs. Promise.resolve implementations - if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast; - }()); - - // 25.4.5.1 Promise.prototype [ @@toStringTag ] - define(Promise.prototype, $$toStringTag, 'Promise'); - - // --------------------------------------- - // 26 Reflection - // --------------------------------------- - - (function() { - // 26.1 The Reflect Object - if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING) - global.Reflect = {}; - - // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList ) - define( - Reflect, 'apply', - function apply(target, thisArgument, argumentsList) { - if (!IsCallable(target)) throw TypeError(); - return Function.prototype.apply.call(target, thisArgument, argumentsList); - }); - - // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] ) - define( - Reflect, 'construct', - function construct(target, argumentsList) { - return __cons(target, argumentsList); - }); - - // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes ) - define( - Reflect, 'defineProperty', - function defineProperty(target, propertyKey, attributes) { - try { - Object.defineProperty(target, propertyKey, attributes); - return true; - } catch (_) { - return false; - } - }); - - // 26.1.4 Reflect.deleteProperty ( target, propertyKey ) - define( - Reflect, 'deleteProperty', - function deleteProperty(target,name) { - try { - delete target[name]; - return !HasOwnProperty(target, name); - } catch (_) { - return false; - } - }); - - // 26.1.5 Reflect.enumerate ( target ) - define( - Reflect, 'enumerate', - function enumerate(target) { - target = ToObject(target); - var iterator = Enumerate(target); - return iterator; - }); - - // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ]) - define( - Reflect, 'get', - function get(target, name, receiver) { - target = ToObject(target); - name = String(name); - receiver = (receiver === undefined) ? target : ToObject(receiver); - var desc = getPropertyDescriptor(target, name); - if (desc && 'get' in desc) - return Function.prototype.call.call(desc['get'], receiver); - return target[name]; - }); - - // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey ) - define( - Reflect, 'getOwnPropertyDescriptor', - Object.getOwnPropertyDescriptor); - - // 26.1.8 Reflect.getPrototypeOf ( target ) - define( - Reflect, 'getPrototypeOf', - Object.getPrototypeOf); - - // 26.1.9 Reflect.has ( target, propertyKey ) - define( - Reflect, 'has', - function has(target,name) { - return String(name) in ToObject(target); - }); - - // 26.1.10 Reflect.isExtensible (target) - define( - Reflect, 'isExtensible', - Object.isExtensible); - - // 26.1.11 Reflect.ownKeys ( target ) - define( - Reflect, 'ownKeys', - function ownKeys(target) { - var obj = ToObject(target); - return Object.getOwnPropertyNames(obj); - }); - - // 26.1.12 Reflect.preventExtensions ( target ) - define( - Reflect, 'preventExtensions', - function preventExtensions(target) { - try { Object.preventExtensions(target); return true; } catch (_) { return false; } - }); - - // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] ) - define( - Reflect, 'set', - function set(target, name, value, receiver) { - target = ToObject(target); - name = String(name); - receiver = (receiver === undefined) ? target : ToObject(receiver); - var desc = getPropertyDescriptor(target, name); - try { - if (desc && 'set' in desc) - Function.prototype.call.call(desc['set'], receiver, value); - else - target[name] = value; - return true; - } catch (_) { - return false; - } - }); - - // 26.1.14 Reflect.setPrototypeOf ( target, proto ) - define( - Reflect, 'setPrototypeOf', - function setPrototypeOf(target, proto) { - try { - target.__proto__ = proto; - return Reflect.getPrototypeOf(target) === proto; - } catch(_) { - return false; - } - }); - - }()); - - // --------------------------------------- - // 26.2 Proxy Objects - // --------------------------------------- - - // Not polyfillable. - -}(self)); - -// This helper is defined outside the main scope so that the use of -// 'eval' does not taint the scope for minifiers. -function __cons(t, a) { - return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')'); -}