* Some better error messages.

This commit is contained in:
Eelco Dolstra 2006-10-23 16:45:19 +00:00
parent 1d694eef4c
commit dd300fb48d
2 changed files with 12 additions and 5 deletions

View File

@ -54,7 +54,7 @@ void queryAllAttrs(Expr e, ATermMap & attrs, bool withPos)
{
ATermList bnds;
if (!matchAttrs(e, bnds))
throw TypeError("attribute set expected");
throw TypeError(format("value is %1% while an attribute set was expected") % showType(e));
for (ATermIterator i(bnds); i; ++i) {
ATerm name;
@ -77,7 +77,7 @@ Expr queryAttr(Expr e, const string & name, ATerm & pos)
{
ATermList bnds;
if (!matchAttrs(e, bnds))
throw TypeError("attribute set expected");
throw TypeError(format("value is %1% while an attribute set was expected") % showType(e));
for (ATermIterator i(bnds); i; ++i) {
ATerm name2, pos2;

View File

@ -130,12 +130,19 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args)
queryAllAttrs(evalExpr(state, args[0]), attrs, true);
/* Figure out the name already (for stack backtraces). */
ATerm posDrvName;
Expr eDrvName = attrs.get(toATerm("name"));
if (!eDrvName)
throw EvalError("required attribute `name' missing");
ATerm posDrvName;
if (!matchAttrRHS(eDrvName, eDrvName, posDrvName)) abort();
string drvName = evalStringNoCtx(state, eDrvName);
string drvName;
try {
drvName = evalStringNoCtx(state, eDrvName);
} catch (Error & e) {
e.addPrefix(format("while evaluating the derivation attribute `name' at %1%:\n")
% showPos(posDrvName));
throw;
}
/* Build the derivation expression by processing the attributes. */
Derivation drv;
@ -190,7 +197,7 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args)
}
} catch (Error & e) {
e.addPrefix(format("while processing the derivation attribute `%1%' at %2%:\n")
e.addPrefix(format("while evaluating the derivation attribute `%1%' at %2%:\n")
% key % showPos(pos));
e.addPrefix(format("while instantiating the derivation named `%1%' at %2%:\n")
% drvName % showPos(posDrvName));