"use strict"; var isValue = require("es5-ext/object/is-value") , setPrototypeOf = require("es5-ext/object/set-prototype-of") , object = require("es5-ext/object/valid-object") , ensureValue = require("es5-ext/object/valid-value") , randomUniq = require("es5-ext/string/random-uniq") , d = require("d") , getIterator = require("es6-iterator/get") , forOf = require("es6-iterator/for-of") , toStringTagSymbol = require("es6-symbol").toStringTag , isNative = require("./is-native-implemented") , isArray = Array.isArray, defineProperty = Object.defineProperty , objHasOwnProperty = Object.prototype.hasOwnProperty, getPrototypeOf = Object.getPrototypeOf , WeakMapPoly; module.exports = WeakMapPoly = function (/* Iterable*/) { var iterable = arguments[0], self; if (!(this instanceof WeakMapPoly)) throw new TypeError("Constructor requires 'new'"); self = isNative && setPrototypeOf && (WeakMap !== WeakMapPoly) ? setPrototypeOf(new WeakMap(), getPrototypeOf(this)) : this; if (isValue(iterable)) { if (!isArray(iterable)) iterable = getIterator(iterable); } defineProperty(self, "__weakMapData__", d("c", "$weakMap$" + randomUniq())); if (!iterable) return self; forOf(iterable, function (val) { ensureValue(val); self.set(val[0], val[1]); }); return self; }; if (isNative) { if (setPrototypeOf) setPrototypeOf(WeakMapPoly, WeakMap); WeakMapPoly.prototype = Object.create(WeakMap.prototype, { constructor: d(WeakMapPoly) }); } Object.defineProperties(WeakMapPoly.prototype, { delete: d(function (key) { if (objHasOwnProperty.call(object(key), this.__weakMapData__)) { delete key[this.__weakMapData__]; return true; } return false; }), get: d(function (key) { if (!objHasOwnProperty.call(object(key), this.__weakMapData__)) return undefined; return key[this.__weakMapData__]; }), has: d(function (key) { return objHasOwnProperty.call(object(key), this.__weakMapData__); }), set: d(function (key, value) { defineProperty(object(key), this.__weakMapData__, d("c", value)); return this; }), toString: d(function () { return "[object WeakMap]"; }) }); defineProperty(WeakMapPoly.prototype, toStringTagSymbol, d("c", "WeakMap"));