Optimize empty sets
This reduces the number of Bindings allocations by about 10%.
This commit is contained in:
		
							parent
							
								
									16c9935fa9
								
							
						
					
					
						commit
						c8bb2371eb
					
				
					 3 changed files with 14 additions and 4 deletions
				
			
		|  | @ -29,13 +29,17 @@ Bindings * EvalState::allocBindings(Bindings::size_t capacity) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| void EvalState::mkAttrs(Value & v, unsigned int expected) | ||||
| void EvalState::mkAttrs(Value & v, unsigned int capacity) | ||||
| { | ||||
|     if (capacity == 0) { | ||||
|         v = vEmptySet; | ||||
|         return; | ||||
|     } | ||||
|     clearValue(v); | ||||
|     v.type = tAttrs; | ||||
|     v.attrs = allocBindings(expected); | ||||
|     v.attrs = allocBindings(capacity); | ||||
|     nrAttrsets++; | ||||
|     nrAttrsInAttrsets += expected; | ||||
|     nrAttrsInAttrsets += capacity; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -281,6 +281,10 @@ EvalState::EvalState(const Strings & _searchPath) | |||
|     for (auto & i : paths) addToSearchPath(i); | ||||
|     addToSearchPath("nix=" + settings.nixDataDir + "/nix/corepkgs"); | ||||
| 
 | ||||
|     clearValue(vEmptySet); | ||||
|     vEmptySet.type = tAttrs; | ||||
|     vEmptySet.attrs = allocBindings(0); | ||||
| 
 | ||||
|     createBaseEnv(); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -80,6 +80,8 @@ public: | |||
|        path or to environment variables. */ | ||||
|     bool restricted; | ||||
| 
 | ||||
|     Value vEmptySet; | ||||
| 
 | ||||
| private: | ||||
|     SrcToStore srcToStore; | ||||
| 
 | ||||
|  | @ -227,7 +229,7 @@ public: | |||
|     Bindings * allocBindings(Bindings::size_t capacity); | ||||
| 
 | ||||
|     void mkList(Value & v, unsigned int length); | ||||
|     void mkAttrs(Value & v, unsigned int expected); | ||||
|     void mkAttrs(Value & v, unsigned int capacity); | ||||
|     void mkThunk_(Value & v, Expr * expr); | ||||
|     void mkPos(Value & v, Pos * pos); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue