Provide a more useful error message when a dynamic attr lookup fails

This commit is contained in:
Shea Levy 2014-05-15 11:30:46 -04:00 committed by Eelco Dolstra
parent 8d5f472f2c
commit eac5841970

View file

@ -757,8 +757,16 @@ void ExprSelect::eval(EvalState & state, Env & env, Value & v)
} }
} else { } else {
state.forceAttrs(*vAttrs, pos); state.forceAttrs(*vAttrs, pos);
if ((j = vAttrs->attrs->find(name)) == vAttrs->attrs->end()) if ((j = vAttrs->attrs->find(name)) == vAttrs->attrs->end()) {
throwEvalError("attribute `%1%' missing, at %2%", showAttrPath(attrPath), pos); AttrPath staticPath;
AttrPath::const_iterator j;
for (j = attrPath.begin(); j != i; ++j)
staticPath.push_back(AttrName(getName(*j, state, env)));
staticPath.push_back(AttrName(getName(*j, state, env)));
for (j = j + 1; j != attrPath.end(); ++j)
staticPath.push_back(*j);
throwEvalError("attribute `%1%' missing, at %2%", showAttrPath(staticPath), pos);
}
} }
vAttrs = j->value; vAttrs = j->value;
pos2 = j->pos; pos2 = j->pos;