From cd9d10d4e3a646b6c0fef9e13a8efb2995fc50cd Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 11 Oct 2007 20:02:08 +0000 Subject: [PATCH] * Caching of parse results for fairer comparisons. --- src/libexpr/eval.hh | 2 ++ src/libexpr/parser.y | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index 08b685fd0..4692bfd27 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -41,6 +41,8 @@ struct EvalState bool cacheTerms; bool strictMode; + ATermMap parsings; /* path -> expr mapping */ + EvalState(); void addPrimOps(); diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y index 82b24cd07..b1284b4b0 100644 --- a/src/libexpr/parser.y +++ b/src/libexpr/parser.y @@ -383,8 +383,13 @@ Expr parseExprFromFile(EvalState & state, Path path) if (S_ISDIR(st.st_mode)) path = canonPath(path + "/default.nix"); + Expr cached = state.parsings.get(toATerm(path)); + if (cached) return cached; + /* 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; }