From 55e207b2dc43e426bd0dfbc2065b8853a1fc59b0 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 31 Mar 2010 16:14:32 +0000 Subject: * Cache parse trees to prevent repeated parsing of imported Nix expressions. --- src/libexpr/eval.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/libexpr/eval.cc') diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index 0296afe60155..b4156ffec101 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -272,7 +272,14 @@ void EvalState::cloneAttrs(Value & src, Value & dst) void EvalState::evalFile(const Path & path, Value & v) { startNest(nest, lvlTalkative, format("evaluating file `%1%'") % path); - Expr e = parseExprFromFile(*this, path); + + Expr e = parseTrees.get(toATerm(path)); + + if (!e) { + e = parseExprFromFile(*this, path); + parseTrees.set(toATerm(path), e); + } + try { eval(e, v); } catch (Error & e) { -- cgit 1.4.1