| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 
							- 'use strict';
 
- var setPrototypeOf    = require('es5-ext/object/set-prototype-of')
 
-   , object            = require('es5-ext/object/valid-object')
 
-   , value             = 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
 
-   , hasOwnProperty = 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\'');
 
- 	if (isNative && setPrototypeOf && (WeakMap !== WeakMapPoly)) {
 
- 		self = setPrototypeOf(new WeakMap(), getPrototypeOf(this));
 
- 	} else {
 
- 		self = this;
 
- 	}
 
- 	if (iterable != null) {
 
- 		if (!isArray(iterable)) iterable = getIterator(iterable);
 
- 	}
 
- 	defineProperty(self, '__weakMapData__', d('c', '$weakMap$' + randomUniq()));
 
- 	if (!iterable) return self;
 
- 	forOf(iterable, function (val) {
 
- 		value(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 (hasOwnProperty.call(object(key), this.__weakMapData__)) {
 
- 			delete key[this.__weakMapData__];
 
- 			return true;
 
- 		}
 
- 		return false;
 
- 	}),
 
- 	get: d(function (key) {
 
- 		if (hasOwnProperty.call(object(key), this.__weakMapData__)) {
 
- 			return key[this.__weakMapData__];
 
- 		}
 
- 	}),
 
- 	has: d(function (key) {
 
- 		return hasOwnProperty.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'));
 
 
  |