diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-08-24 13:39:22 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-08-24 13:39:22 +0000 |
commit | 943ab38a0d0969004de231a6b3e89df88ffc6ccf (patch) | |
tree | 10852ca08d48ce59858ebc64702f1de8b7b51629 /src/nix-instantiate/main.cc | |
parent | f41297fdcecaa1ba12d238d1754457d319426579 (diff) |
* Refactoring: move strictEval to libexpr.
Diffstat (limited to 'src/nix-instantiate/main.cc')
-rw-r--r-- | src/nix-instantiate/main.cc | 45 |
1 files changed, 1 insertions, 44 deletions
diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc index 29a28c3d8..5eaaf5b2a 100644 --- a/src/nix-instantiate/main.cc +++ b/src/nix-instantiate/main.cc @@ -135,56 +135,13 @@ static void printResult(EvalState & state, Expr e, } -Expr strictEval(EvalState & state, Expr e) -{ - e = evalExpr(state, e); - - ATermList as; - - if (matchAttrs(e, as)) { - ATermList as2 = ATempty; - for (ATermIterator i(as); i; ++i) { - ATerm name; Expr e; ATerm pos; - if (!matchBind(*i, name, e, pos)) abort(); /* can't happen */ - as2 = ATinsert(as2, makeBind(name, strictEval(state, e), pos)); - } - return makeAttrs(ATreverse(as2)); - } - - ATermList formals; - ATerm body, pos; - - if (matchFunction(e, formals, body, pos)) { - ATermList formals2 = ATempty; - - for (ATermIterator i(formals); i; ++i) { - Expr name; ValidValues valids; ATerm dummy; - if (!matchFormal(*i, name, valids, dummy)) abort(); - - ATermList valids2; - if (matchValidValues(valids, valids2)) { - ATermList valids3 = ATempty; - for (ATermIterator j(valids2); j; ++j) - valids3 = ATinsert(valids3, strictEval(state, *j)); - valids = makeValidValues(ATreverse(valids3)); - } - - formals2 = ATinsert(formals2, makeFormal(name, valids, dummy)); - } - return makeFunction(ATreverse(formals2), body, pos); - } - - return e; -} - - Expr doEval(EvalState & state, string attrPath, bool parseOnly, bool strict, const ATermMap & autoArgs, Expr e) { e = findAlongAttrPath(state, attrPath, autoArgs, e); if (!parseOnly) if (strict) - e = strictEval(state, e); + e = strictEvalExpr(state, e); else e = evalExpr(state, e); return e; |