ALU52WZJLRFVE3V7SLKBM2ENA6CO6LU2MDNUVGPTWXO7ZCXDV2WAC
HNGPGVBTFCEYF4YCAUTDGADAU7IXQBAAUNE6RIFUD3HXFGU5QPBAC
HVXL2XUZTOWJPESBHBFD74B4QXNMG5SX4LOXDLPJ7732IU4SUYWQC
5X6FHW3SHOE5R37WJPLKNVJM6VWFT6SNRMC5OFFCCW3IGC4ORY2QC
4N5APGRGHTKFMEJ7THSJX6TSYYAP3BUZQG73AJBKCQLXOOEHPATQC
DPYJFBXU55M7PFYHARO5FSZ4GFNZQQI4GYV5YTIXC77FUCVUU3PAC
KD5237CUR4X3VRUD46H3CVU22NYS7LOPF3WXENWHNSF7GKEIQZ6QC
Value * v = drv.queryMeta(name);
if (v) {
state.forceValue(*v);
if (v->type == tString)
return v->string.s;
else if (v->isList()) {
string res = "";
for (unsigned int n = 0; n < v->listSize(); ++n) {
Value v2(*v->listElems()[n]);
state.forceValue(v2);
if (v2.type == tString) {
if (res.size() != 0) res += ", ";
res += v2.string.s;
}
}
return res;
Strings res;
std::function<void(Value & v)> rec;
rec = [&](Value & v) {
state.forceValue(v);
if (v.type == tString)
res.push_back(v.string.s);
else if (v.isList())
for (unsigned int n = 0; n < v.listSize(); ++n)
rec(*v.listElems()[n]);
else if (v.type == tAttrs) {
auto a = v.attrs->find(state.symbols.create("shortName"));
if (a != v.attrs->end())
res.push_back(state.forceString(*a->value));