diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-09-03 13:17:51 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-09-03 13:17:51 +0000 |
commit | ef4f5ba85e487f567115d60e3cb4b53d81af6ea1 (patch) | |
tree | c3fe3050c1c9e5404298e72a30a36c0dd9e724ac /src/nix-instantiate | |
parent | 06bb2d95b4d8232ef0cd0059d2609d2211d0e3e6 (diff) | |
download | guix-ef4f5ba85e487f567115d60e3cb4b53d81af6ea1.tar.gz |
Work on Values instead of Exprs
This prevents some duplicate evaluation in nix-env and nix-instantiate. Also, when traversing ~/.nix-defexpr, only read regular files with the extension .nix. Previously it was reading files like .../channels/binary-caches/<name>. The only reason this didn't cause problems is pure luck (namely, <name> shadows an actual Nix expression, the binary-caches files happen to be syntactically valid Nix expressions, and we iterate over the directory contents in just the right order).
Diffstat (limited to 'src/nix-instantiate')
-rw-r--r-- | src/nix-instantiate/nix-instantiate.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/nix-instantiate/nix-instantiate.cc b/src/nix-instantiate/nix-instantiate.cc index 0f0710d680..fd2c04eae4 100644 --- a/src/nix-instantiate/nix-instantiate.cc +++ b/src/nix-instantiate/nix-instantiate.cc @@ -44,9 +44,11 @@ void processExpr(EvalState & state, const Strings & attrPaths, return; } + Value vRoot; + state.eval(e, vRoot); + foreach (Strings::const_iterator, i, attrPaths) { - Value v; - findAlongAttrPath(state, *i, autoArgs, e, v); + Value & v(*findAlongAttrPath(state, *i, autoArgs, vRoot)); state.forceValue(v); PathSet context; |