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.
		
		
		
		
		
			
		
			
				
					28 lines
				
				1001 B
			
		
		
			
		
	
	
					28 lines
				
				1001 B
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | let fastProto = null; | ||
|  | 
 | ||
|  | // Creates an object with permanently fast properties in V8. See Toon Verwaest's
 | ||
|  | // post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62
 | ||
|  | // for more details. Use %HasFastProperties(object) and the Node.js flag
 | ||
|  | // --allow-natives-syntax to check whether an object has fast properties.
 | ||
|  | function FastObject(o) { | ||
|  | 	// A prototype object will have "fast properties" enabled once it is checked
 | ||
|  | 	// against the inline property cache of a function, e.g. fastProto.property:
 | ||
|  | 	// https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63
 | ||
|  | 	if (fastProto !== null && typeof fastProto.property) { | ||
|  | 		const result = fastProto; | ||
|  | 		fastProto = FastObject.prototype = null; | ||
|  | 		return result; | ||
|  | 	} | ||
|  | 	fastProto = FastObject.prototype = o == null ? Object.create(null) : o; | ||
|  | 	return new FastObject; | ||
|  | } | ||
|  | 
 | ||
|  | // Initialize the inline property cache of FastObject
 | ||
|  | FastObject(); | ||
|  | 
 | ||
|  | module.exports = function toFastproperties(o) { | ||
|  | 	return FastObject(o); | ||
|  | }; |