| '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); | 
 | }; |