mirror of
https://github.com/NixOS/nix.git
synced 2025-11-25 19:51:00 +01:00
* Caching of parse results for fairer comparisons.
This commit is contained in:
parent
c1179badd5
commit
cd9d10d4e3
2 changed files with 8 additions and 1 deletions
|
|
@ -41,6 +41,8 @@ struct EvalState
|
||||||
bool cacheTerms;
|
bool cacheTerms;
|
||||||
bool strictMode;
|
bool strictMode;
|
||||||
|
|
||||||
|
ATermMap parsings; /* path -> expr mapping */
|
||||||
|
|
||||||
EvalState();
|
EvalState();
|
||||||
|
|
||||||
void addPrimOps();
|
void addPrimOps();
|
||||||
|
|
|
||||||
|
|
@ -383,8 +383,13 @@ Expr parseExprFromFile(EvalState & state, Path path)
|
||||||
if (S_ISDIR(st.st_mode))
|
if (S_ISDIR(st.st_mode))
|
||||||
path = canonPath(path + "/default.nix");
|
path = canonPath(path + "/default.nix");
|
||||||
|
|
||||||
|
Expr cached = state.parsings.get(toATerm(path));
|
||||||
|
if (cached) return cached;
|
||||||
|
|
||||||
/* Read and parse the input file. */
|
/* Read and parse the input file. */
|
||||||
return parse(state, readFile(path).c_str(), path, dirOf(path));
|
cached = parse(state, readFile(path).c_str(), path, dirOf(path));
|
||||||
|
state.parsings.set(toATerm(path), cached);
|
||||||
|
return cached;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue