diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-23T16·45+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-23T16·45+0000 |
commit | dd300fb48dd2048d056a5f25dda7d4c1f5515d46 (patch) | |
tree | 4f1bb45f6971517b3553ab930e9ec3cc045bcec9 /src | |
parent | 1d694eef4ce022a99a3fb552804a1f26f686cc55 (diff) |
* Some better error messages.
Diffstat (limited to 'src')
-rw-r--r-- | src/libexpr/nixexpr.cc | 4 | ||||
-rw-r--r-- | src/libexpr/primops.cc | 13 |
2 files changed, 12 insertions, 5 deletions
diff --git a/src/libexpr/nixexpr.cc b/src/libexpr/nixexpr.cc index cb006d147e52..a6cde127c3b2 100644 --- a/src/libexpr/nixexpr.cc +++ b/src/libexpr/nixexpr.cc @@ -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; diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 8118f840106f..0f62653b0e9c 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -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)); |