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. */
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'. */

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) {
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);
}

View file

@ -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 ..) */