* Some better error messages.
This commit is contained in:
parent
1d694eef4c
commit
dd300fb48d
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in a new issue