aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/eval.hh2
-rw-r--r--src/libexpr/parser.y8
-rw-r--r--src/libexpr/primops.cc2
3 files changed, 8 insertions, 4 deletions
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index 78942927f..ed648fba8 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -169,7 +169,7 @@ public:
/* Look up a file in the search path. */
Path findFile(const string & path);
- Path findFile(SearchPath & searchPath, const string & path);
+ Path findFile(SearchPath & searchPath, const string & path, const Pos & pos = noPos);
/* Evaluate an expression to normal form, storing the result in
value `v'. */
diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index ff174815e..7d877cd67 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -626,7 +626,7 @@ Path EvalState::findFile(const string & path)
}
-Path EvalState::findFile(SearchPath & searchPath, const string & path)
+Path EvalState::findFile(SearchPath & searchPath, const string & path, const Pos & pos)
{
foreach (SearchPath::iterator, i, searchPath) {
Path res;
@@ -641,7 +641,11 @@ Path EvalState::findFile(SearchPath & searchPath, const string & path)
}
if (pathExists(res)) return canonPath(res);
}
- throw ThrownError(format("file ‘%1%’ was not found in the Nix search path (add it using $NIX_PATH or -I)") % path);
+ format f = format(
+ "file ‘%1%’ was not found in the Nix search path (add it using $NIX_PATH or -I)"
+ + string(pos ? ", at %2%" : ""));
+ f.exceptions(boost::io::all_error_bits ^ boost::io::too_many_args_bit);
+ throw ThrownError(f % path % pos);
}
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index cd7b287e2..119e71a04 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -775,7 +775,7 @@ static void prim_findFile(EvalState & state, const Pos & pos, Value * * args, Va
% path % e.path % pos);
}
- mkPath(v, state.findFile(searchPath, path).c_str());
+ mkPath(v, state.findFile(searchPath, path, pos).c_str());
}
/* Read a directory (without . or ..) */