You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							61 lines
						
					
					
						
							2.0 KiB
						
					
					
				| 'use strict';
 | |
| var global = require('./_global');
 | |
| var each = require('./_array-methods')(0);
 | |
| var redefine = require('./_redefine');
 | |
| var meta = require('./_meta');
 | |
| var assign = require('./_object-assign');
 | |
| var weak = require('./_collection-weak');
 | |
| var isObject = require('./_is-object');
 | |
| var validate = require('./_validate-collection');
 | |
| var NATIVE_WEAK_MAP = require('./_validate-collection');
 | |
| var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;
 | |
| var WEAK_MAP = 'WeakMap';
 | |
| var getWeak = meta.getWeak;
 | |
| var isExtensible = Object.isExtensible;
 | |
| var uncaughtFrozenStore = weak.ufstore;
 | |
| var InternalMap;
 | |
| 
 | |
| var wrapper = function (get) {
 | |
|   return function WeakMap() {
 | |
|     return get(this, arguments.length > 0 ? arguments[0] : undefined);
 | |
|   };
 | |
| };
 | |
| 
 | |
| var methods = {
 | |
|   // 23.3.3.3 WeakMap.prototype.get(key)
 | |
|   get: function get(key) {
 | |
|     if (isObject(key)) {
 | |
|       var data = getWeak(key);
 | |
|       if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
 | |
|       return data ? data[this._i] : undefined;
 | |
|     }
 | |
|   },
 | |
|   // 23.3.3.5 WeakMap.prototype.set(key, value)
 | |
|   set: function set(key, value) {
 | |
|     return weak.def(validate(this, WEAK_MAP), key, value);
 | |
|   }
 | |
| };
 | |
| 
 | |
| // 23.3 WeakMap Objects
 | |
| var $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);
 | |
| 
 | |
| // IE11 WeakMap frozen keys fix
 | |
| if (NATIVE_WEAK_MAP && IS_IE11) {
 | |
|   InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
 | |
|   assign(InternalMap.prototype, methods);
 | |
|   meta.NEED = true;
 | |
|   each(['delete', 'has', 'get', 'set'], function (key) {
 | |
|     var proto = $WeakMap.prototype;
 | |
|     var method = proto[key];
 | |
|     redefine(proto, key, function (a, b) {
 | |
|       // store frozen objects on internal weakmap shim
 | |
|       if (isObject(a) && !isExtensible(a)) {
 | |
|         if (!this._f) this._f = new InternalMap();
 | |
|         var result = this._f[key](a, b);
 | |
|         return key == 'set' ? this : result;
 | |
|       // store all the rest on native weakmap
 | |
|       } return method.call(this, a, b);
 | |
|     });
 | |
|   });
 | |
| }
 |