aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2014-11-20 22:48:12 -0500
committerShea Levy <shea@shealevy.com>2014-11-20 22:48:12 -0500
commitb0c5c2ac346965f18224b105032df0c679112cab (patch)
treeb740a06be143f9a18a6807088e17f74469d8c49f
parentfe37ed1219bf1c1255b79ef94575a30fff851fe8 (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.
-rw-r--r--src/libexpr/primops.cc19
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;