ExprAttrs::show(): Show attrs in sorted order

Issue #6160.
This commit is contained in:
Eelco Dolstra 2022-02-25 09:21:04 +01:00
parent 59683733f5
commit 9d4697453f

View file

@ -103,11 +103,18 @@ void ExprAttrs::show(std::ostream & str) const
{ {
if (recursive) str << "rec "; if (recursive) str << "rec ";
str << "{ "; str << "{ ";
for (auto & i : attrs) typedef const decltype(attrs)::value_type * Attr;
if (i.second.inherited) std::vector<Attr> sorted;
str << "inherit " << i.first << " " << "; "; for (auto & i : attrs) sorted.push_back(&i);
std::sort(sorted.begin(), sorted.end(), [](Attr a, Attr b) {
return (const std::string &) a->first < (const std::string &) b->first;
});
for (auto & i : sorted) {
if (i->second.inherited)
str << "inherit " << i->first << " " << "; ";
else else
str << i.first << " = " << *i.second.e << "; "; str << i->first << " = " << *i->second.e << "; ";
}
for (auto & i : dynamicAttrs) for (auto & i : dynamicAttrs)
str << "\"${" << *i.nameExpr << "}\" = " << *i.valueExpr << "; "; str << "\"${" << *i.nameExpr << "}\" = " << *i.valueExpr << "; ";
str << "}"; str << "}";