diff options
author | Shea Levy <shea@shealevy.com> | 2014-11-20 22:48:12 -0500 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2014-11-20 22:48:12 -0500 |
commit | b0c5c2ac346965f18224b105032df0c679112cab (patch) | |
tree | b740a06be143f9a18a6807088e17f74469d8c49f /src/libexpr | |
parent | fe37ed1219bf1c1255b79ef94575a30fff851fe8 (diff) |
import derivation: cleanup
Before this there was a bug where a `find` was being called on a
not-yet-sorted set. The code was just a mess before anyway, so I cleaned
it up while fixing it.
Diffstat (limited to 'src/libexpr')
-rw-r--r-- | src/libexpr/primops.cc | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 6203a11a6..e6edffa46 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -84,16 +84,19 @@ static void prim_scopedImport(EvalState & state, const Pos & pos, Value * * args Derivation drv = readDerivation(path); Value & w = *state.allocValue(); state.mkAttrs(w, 2 + drv.outputs.size()); - mkString(*state.allocAttr(w, state.sDrvPath), path, singleton<PathSet>("=" + path)); - state.mkList(*state.allocAttr(w, state.symbols.create("outputs")), drv.outputs.size()); + Value * v2 = state.allocAttr(w, state.sDrvPath); + mkString(*v2, path, singleton<PathSet>("=" + path)); + Value * outputsVal = + state.allocAttr(w, state.symbols.create("outputs")); + state.mkList(*outputsVal, drv.outputs.size()); unsigned int outputs_index = 0; - Value * outputsVal = w.attrs->find(state.symbols.create("outputs"))->value; - foreach (DerivationOutputs::iterator, i, drv.outputs) { - mkString(*state.allocAttr(w, state.symbols.create(i->first)), - i->second.path, singleton<PathSet>("!" + i->first + "!" + path)); - mkString(*(outputsVal->list.elems[outputs_index++] = state.allocValue()), - i->first); + for (const auto & o : drv.outputs) { + v2 = state.allocAttr(w, state.symbols.create(o.first)); + mkString(*v2, o.second.path, + singleton<PathSet>("!" + o.first + "!" + path)); + outputsVal->list.elems[outputs_index] = state.allocValue(); + mkString(*(outputsVal->list.elems[outputs_index++]), o.first); } w.attrs->sort(); Value fun; |