From 5b58991a71d15123c010bbbd7f08530dbc31173f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 19 Sep 2014 16:49:41 +0200 Subject: Store Attrs inside Bindings This prevents a double allocation per attribute set. --- src/libexpr/common-opts.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/libexpr/common-opts.cc') diff --git a/src/libexpr/common-opts.cc b/src/libexpr/common-opts.cc index 25f1e7117b76..c03d720bde82 100644 --- a/src/libexpr/common-opts.cc +++ b/src/libexpr/common-opts.cc @@ -25,17 +25,19 @@ bool parseAutoArgs(Strings::iterator & i, } -void evalAutoArgs(EvalState & state, std::map & in, Bindings & out) +Bindings * evalAutoArgs(EvalState & state, std::map & in) { - for (auto & i: in) { + Bindings * res = state.allocBindings(in.size()); + for (auto & i : in) { Value * v = state.allocValue(); if (i.second[0] == 'E') state.mkThunk_(*v, state.parseExprFromString(string(i.second, 1), absPath("."))); else mkString(*v, string(i.second, 1)); - out.push_back(Attr(state.symbols.create(i.first), v)); + res->push_back(Attr(state.symbols.create(i.first), v)); } - out.sort(); + res->sort(); + return res; } -- cgit 1.4.1