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