Show position info for failing <...> lookups

This commit is contained in:
Eelco Dolstra 2015-01-07 13:43:55 +01:00
parent 6fec43ccb3
commit 153a943de7
3 changed files with 8 additions and 4 deletions

View file

@ -169,7 +169,7 @@ public:
/* Look up a file in the search path. */ /* Look up a file in the search path. */
Path findFile(const string & 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 /* Evaluate an expression to normal form, storing the result in
value `v'. */ value `v'. */

View file

@ -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) { foreach (SearchPath::iterator, i, searchPath) {
Path res; Path res;
@ -641,7 +641,11 @@ Path EvalState::findFile(SearchPath & searchPath, const string & path)
} }
if (pathExists(res)) return canonPath(res); 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);
} }

View file

@ -775,7 +775,7 @@ static void prim_findFile(EvalState & state, const Pos & pos, Value * * args, Va
% path % e.path % pos); % 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 ..) */ /* Read a directory (without . or ..) */