diff --git a/lix/libcmd/common-eval-args.cc b/lix/libcmd/common-eval-args.cc index a36bdcea6..143b45c7f 100644 --- a/lix/libcmd/common-eval-args.cc +++ b/lix/libcmd/common-eval-args.cc @@ -185,9 +185,7 @@ Bindings * MixEvalArgs::getAutoArgs(Evaluator & state) for (auto & i : autoArgs) { Value v; if (i.second[0] == 'E') - state.evalLazily( - state.parseExprFromString(i.second.substr(1), CanonPath::fromCwd()), v - ); + v = state.evalLazily(state.parseExprFromString(i.second.substr(1), CanonPath::fromCwd())); else v = {NewValueAs::string, ((std::string_view) i.second).substr(1)}; res.insert(state.symbols.create(i.first), v); diff --git a/lix/libexpr/eval.cc b/lix/libexpr/eval.cc index 200cdc259..bdc3d6b84 100644 --- a/lix/libexpr/eval.cc +++ b/lix/libexpr/eval.cc @@ -844,14 +844,12 @@ Value::List * EvalMemory::newList(size_t size) return list; } - -void Evaluator::evalLazily(Expr & e, Value & v) +Value Evaluator::evalLazily(Expr & e) { - v = {NewValueAs::thunk, mem, builtins.env, e}; stats.nrThunks++; + return {NewValueAs::thunk, mem, builtins.env, e}; } - void EvalState::mkPos(Value & v, PosIdx p) { auto origin = ctx.positions.originOf(p); diff --git a/lix/libexpr/eval.hh b/lix/libexpr/eval.hh index 76bb0349b..e5bca7824 100644 --- a/lix/libexpr/eval.hh +++ b/lix/libexpr/eval.hh @@ -554,7 +554,7 @@ public: /** * Creates a thunk that will evaluate the given expression when forced. */ - void evalLazily(Expr & e, Value & v); + Value evalLazily(Expr & e); /** If debugging is enabled, returns the next trace. Otherwise, std::nullopt. */ std::optional nextDebugTrace() const;