Memoize evalFile() lookups under both the original and resolved name
Previously we only used the resolved name, causing repeated resolution (e.g. /dir to /dir/default.nix).
This commit is contained in:
		
							parent
							
								
									3139481822
								
							
						
					
					
						commit
						fe95650487
					
				
					 1 changed files with 9 additions and 4 deletions
				
			
		|  | @ -436,10 +436,14 @@ Value * ExprPath::maybeThunk(EvalState & state, Env & env) | ||||||
| 
 | 
 | ||||||
| void EvalState::evalFile(const Path & path, Value & v) | void EvalState::evalFile(const Path & path, Value & v) | ||||||
| { | { | ||||||
|     Path path2 = resolveExprPath(path); |     FileEvalCache::iterator i; | ||||||
|  |     if ((i = fileEvalCache.find(path)) != fileEvalCache.end()) { | ||||||
|  |         v = i->second; | ||||||
|  |         return; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     FileEvalCache::iterator i = fileEvalCache.find(path2); |     Path path2 = resolveExprPath(path); | ||||||
|     if (i != fileEvalCache.end()) { |     if ((i = fileEvalCache.find(path2)) != fileEvalCache.end()) { | ||||||
|         v = i->second; |         v = i->second; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  | @ -452,8 +456,9 @@ void EvalState::evalFile(const Path & path, Value & v) | ||||||
|         addErrorPrefix(e, "while evaluating the file `%1%':\n", path2); |         addErrorPrefix(e, "while evaluating the file `%1%':\n", path2); | ||||||
|         throw; |         throw; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     fileEvalCache[path2] = v; |     fileEvalCache[path2] = v; | ||||||
|     //if (path != path2) fileEvalCache[path2] = v;
 |     if (path != path2) fileEvalCache[path] = v; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue