diff options
Diffstat (limited to 'src/libexpr')
-rw-r--r-- | src/libexpr/eval-error.hh | 6 | ||||
-rw-r--r-- | src/libexpr/primops.cc | 3 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/libexpr/eval-error.hh b/src/libexpr/eval-error.hh index 4f0e0d24c..19540d612 100644 --- a/src/libexpr/eval-error.hh +++ b/src/libexpr/eval-error.hh @@ -47,12 +47,16 @@ MakeError(MissingArgumentError, EvalError); MakeError(RestrictedPathError, Error); MakeError(InfiniteRecursionError, EvalError); +/** + * Represents an exception due to an invalid path; that is, it does not exist. + * It corresponds to `!Store::validPath()`. + */ struct InvalidPathError : public EvalError { public: Path path; InvalidPathError(EvalState & state, const Path & path) - : EvalError(state, "path '%s' is not valid", path) + : EvalError(state, "path '%s' did not exist in the store during evaluation", path) { } }; diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 3cc2659fb..dba56c011 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -383,7 +383,8 @@ void prim_exec(EvalState & state, const PosIdx pos, Value * * args, Value & v) try { auto _ = state.realiseContext(context); // FIXME: Handle CA derivations } catch (InvalidPathError & e) { - state.error<EvalError>("cannot execute '%1%', since path '%2%' is not valid", program, e.path).atPos(pos).debugThrow(); + e.addTrace(state.positions[pos], "while realising the context for builtins.exec"); + throw; } auto output = runProgram(program, true, commandArgs); |