Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions src/libexpr/eval.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@

#include <sys/resource.h>
#include <nlohmann/json.hpp>
#include <boost/container/small_vector.hpp>

#if HAVE_BOEHMGC

Expand Down Expand Up @@ -1710,7 +1709,7 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value &
/* We have all the arguments, so call the primop with
the previous and new arguments. */

Value * vArgs[maxPrimOpArity];
Value * vArgs[arity];
auto n = argsDone;
for (Value * arg = &vCur; arg->isPrimOpApp(); arg = arg->primOpApp.left)
vArgs[--n] = arg->primOpApp.right;
Expand Down Expand Up @@ -1773,11 +1772,11 @@ void ExprCall::eval(EvalState & state, Env & env, Value & v)
// 4: about 60
// 5: under 10
// This excluded attrset lambdas (`{...}:`). Contributions of mixed lambdas appears insignificant at ~150 total.
boost::container::small_vector<Value *, 4> vArgs(args.size());
Value * vArgs[args.size()];
for (size_t i = 0; i < args.size(); ++i)
vArgs[i] = args[i]->maybeThunk(state, env);

state.callFunction(vFun, args.size(), vArgs.data(), v, pos);
state.callFunction(vFun, args.size(), vArgs, v, pos);
}


Expand Down Expand Up @@ -2016,8 +2015,8 @@ void ExprConcatStrings::eval(EvalState & state, Env & env, Value & v)
return result;
};

boost::container::small_vector<Value, conservativeStackReservation> values(es->size());
Value * vTmpP = values.data();
Value values[es->size()];
Value * vTmpP = values;

for (auto & [i_pos, i] : *es) {
Value & vTmp = *vTmpP++;
Expand Down
7 changes: 4 additions & 3 deletions src/libexpr/primops.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2729,7 +2729,7 @@ static void prim_catAttrs(EvalState & state, const PosIdx pos, Value * * args, V
auto attrName = state.symbols.create(state.forceStringNoCtx(*args[0], pos, "while evaluating the first argument passed to builtins.catAttrs"));
state.forceList(*args[1], pos, "while evaluating the second argument passed to builtins.catAttrs");

boost::container::small_vector<Value *, nonRecursiveStackReservation> res(args[1]->listSize());
Value * res[args[1]->listSize()];
size_t found = 0;

for (auto v2 : args[1]->listItems()) {
Expand Down Expand Up @@ -3064,7 +3064,8 @@ static void prim_filter(EvalState & state, const PosIdx pos, Value * * args, Val

state.forceFunction(*args[0], pos, "while evaluating the first argument passed to builtins.filter");

boost::container::small_vector<Value *, nonRecursiveStackReservation> vs(args[1]->listSize());
// FIXME: putting this on the stack is risky.
Value * vs[args[1]->listSize()];
size_t k = 0;

bool same = true;
Expand Down Expand Up @@ -3453,7 +3454,7 @@ static void prim_concatMap(EvalState & state, const PosIdx pos, Value * * args,
state.forceList(*args[1], pos, "while evaluating the second argument passed to builtins.concatMap");
auto nrLists = args[1]->listSize();

boost::container::small_vector<Value, conservativeStackReservation> lists(nrLists);
Value lists[nrLists];
size_t len = 0;

for (unsigned int n = 0; n < nrLists; ++n) {
Expand Down