diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-16T15·55+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-16T15·55+0000 |
commit | d7efd7639420f4c840cbfdfcbbb3c45292f3ac54 (patch) | |
tree | d48871893e6d3446b6298b0e5e612086233e3947 /src/libexpr/eval.hh | |
parent | 4c9aa821b985b8e334790a03497a56af3a021f3b (diff) |
* Big cleanup of the semantics of paths, strings, contexts, string
concatenation and string coercion. This was a big mess (see e.g. NIX-67). Contexts are now folded into strings, so that they don't cause evaluation errors when they're not expected. The semantics of paths has been clarified (see nixexpr-ast.def). toString() and coerceToString() have been merged. Semantic change: paths are now copied to the store when they're in a concatenation (and in most other situations - that's the formalisation of the meaning of a path). So "foo " + ./bla evaluates to "foo /nix/store/hash...-bla", not "foo /path/to/current-dir/bla". This prevents accidental impurities, and is more consistent with the treatment of derivation outputs, e.g., `"foo " + bla' where `bla' is a derivation. (Here `bla' would be replaced by the output path of `bla'.)
Diffstat (limited to 'src/libexpr/eval.hh')
-rw-r--r-- | src/libexpr/eval.hh | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index a7f4e69437be..323a82873456 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -60,17 +60,26 @@ Expr strictEvalExpr(EvalState & state, Expr e, bool canonicalise = false); /* Specific results. */ -string evalString(EvalState & state, Expr e); -Path evalPath(EvalState & state, Expr e); +string evalString(EvalState & state, Expr e, PathSet & context); +string evalStringNoCtx(EvalState & state, Expr e); int evalInt(EvalState & state, Expr e); bool evalBool(EvalState & state, Expr e); ATermList evalList(EvalState & state, Expr e); -ATerm coerceToString(Expr e); -/* Contexts. */ -string coerceToStringWithContext(EvalState & state, - ATermList & context, Expr e, bool & isPath); -Expr wrapInContext(ATermList context, Expr e); +/* Flatten nested lists into a single list (or expand a singleton into + a list). */ +ATermList flattenList(EvalState & state, Expr e); + +/* String coercion. Converts strings, paths and derivations to a + string. If `coerceMore' is set, also converts nulls, integers, + booleans and lists to a string. */ +string coerceToString(EvalState & state, Expr e, PathSet & context, + bool coerceMore = false, bool copyToStore = true); + +/* Path coercion. Converts strings, paths and derivations to a path. + The result is guaranteed to be an canonicalised, absolute path. + Nothing is copied to the store. */ +Path coerceToPath(EvalState & state, Expr e, PathSet & context); /* Automatically call a function for which each argument has a default value or has a binding in the `args' map. Note: result is a call, |