aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/eval.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index a8a22e2f2..6d8137d9b 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -48,6 +48,11 @@ LocalNoInlineNoReturn(void throwEvalError(const char * s, const string & s2))
throw EvalError(format(s) % s2);
}
+LocalNoInlineNoReturn(void throwTypeError(const char * s))
+{
+ throw TypeError(s);
+}
+
LocalNoInlineNoReturn(void throwTypeError(const char * s, const string & s2))
{
throw TypeError(format(s) % s2);
@@ -305,9 +310,11 @@ string coerceToString(EvalState & state, Expr e, PathSet & context,
}
ATermList es;
- if (matchAttrs(e, es))
- return coerceToString(state, makeSelect(e, toATerm("outPath")),
- context, coerceMore, copyToStore);
+ if (matchAttrs(e, es)) {
+ Expr e2 = queryAttr(e, "outPath");
+ if (!e2) throwTypeError("cannot coerce an attribute set (except a derivation) to a string");
+ return coerceToString(state, e2, context, coerceMore, copyToStore);
+ }
if (coerceMore) {