Skip to content

Commit

Permalink
Merge pull request #9399 from edolstra/revert-vlas
Browse files Browse the repository at this point in the history
Revert use of boost::container::small_vector in the evaluator
  • Loading branch information
roberth authored Nov 20, 2023
2 parents fb68699 + 1d6abec commit 6832d18
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
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

0 comments on commit 6832d18

Please sign in to comment.