summaryrefslogtreecommitdiff
path: root/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es6-set/polyfill.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es6-set/polyfill.js')
-rw-r--r--tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es6-set/polyfill.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es6-set/polyfill.js b/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es6-set/polyfill.js
new file mode 100644
index 0000000000..d272429ffc
--- /dev/null
+++ b/tools/eslint/node_modules/escope/node_modules/es6-map/node_modules/es6-set/polyfill.js
@@ -0,0 +1,79 @@
+'use strict';
+
+var clear = require('es5-ext/array/#/clear')
+ , eIndexOf = require('es5-ext/array/#/e-index-of')
+ , setPrototypeOf = require('es5-ext/object/set-prototype-of')
+ , callable = require('es5-ext/object/valid-callable')
+ , d = require('d')
+ , ee = require('event-emitter')
+ , Symbol = require('es6-symbol')
+ , iterator = require('es6-iterator/valid-iterable')
+ , forOf = require('es6-iterator/for-of')
+ , Iterator = require('./lib/iterator')
+ , isNative = require('./is-native-implemented')
+
+ , call = Function.prototype.call, defineProperty = Object.defineProperty
+ , SetPoly, getValues;
+
+module.exports = SetPoly = function (/*iterable*/) {
+ var iterable = arguments[0];
+ if (!(this instanceof SetPoly)) return new SetPoly(iterable);
+ if (this.__setData__ !== undefined) {
+ throw new TypeError(this + " cannot be reinitialized");
+ }
+ if (iterable != null) iterator(iterable);
+ defineProperty(this, '__setData__', d('c', []));
+ if (!iterable) return;
+ forOf(iterable, function (value) {
+ if (eIndexOf.call(this, value) !== -1) return;
+ this.push(value);
+ }, this.__setData__);
+};
+
+if (isNative) {
+ if (setPrototypeOf) setPrototypeOf(SetPoly, Set);
+ SetPoly.prototype = Object.create(Set.prototype, {
+ constructor: d(SetPoly)
+ });
+}
+
+ee(Object.defineProperties(SetPoly.prototype, {
+ add: d(function (value) {
+ if (this.has(value)) return this;
+ this.emit('_add', this.__setData__.push(value) - 1, value);
+ return this;
+ }),
+ clear: d(function () {
+ if (!this.__setData__.length) return;
+ clear.call(this.__setData__);
+ this.emit('_clear');
+ }),
+ delete: d(function (value) {
+ var index = eIndexOf.call(this.__setData__, value);
+ if (index === -1) return false;
+ this.__setData__.splice(index, 1);
+ this.emit('_delete', index, value);
+ return true;
+ }),
+ entries: d(function () { return new Iterator(this, 'key+value'); }),
+ forEach: d(function (cb/*, thisArg*/) {
+ var thisArg = arguments[1], iterator, result, value;
+ callable(cb);
+ iterator = this.values();
+ result = iterator._next();
+ while (result !== undefined) {
+ value = iterator._resolve(result);
+ call.call(cb, thisArg, value, value, this);
+ result = iterator._next();
+ }
+ }),
+ has: d(function (value) {
+ return (eIndexOf.call(this.__setData__, value) !== -1);
+ }),
+ keys: d(getValues = function () { return this.values(); }),
+ size: d.gs(function () { return this.__setData__.length; }),
+ values: d(function () { return new Iterator(this); }),
+ toString: d(function () { return '[object Set]'; })
+}));
+defineProperty(SetPoly.prototype, Symbol.iterator, d(getValues));
+defineProperty(SetPoly.prototype, Symbol.toStringTag, d('c', 'Set'));