1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-28 22:01:15 +02:00

break() primop; step and go debug commands

This commit is contained in:
Ben Burdette 2022-02-03 13:15:21 -07:00
parent 990bec78d3
commit 412d58f0bb
4 changed files with 40 additions and 2 deletions

View file

@ -417,6 +417,7 @@ EvalState::EvalState(
, repair(NoRepair)
, store(store)
, buildStore(buildStore ? buildStore : store)
, debugStop(true)
, regexCache(makeRegexCache())
, baseEnv(allocEnv(128))
, staticBaseEnv(new StaticEnv(false, 0))
@ -930,7 +931,7 @@ DebugTraceStacker::DebugTraceStacker(EvalState &evalState, DebugTrace t)
:evalState(evalState), trace(t)
{
evalState.debugTraces.push_front(t);
if (debuggerHook)
if (evalState.debugStop && debuggerHook)
debuggerHook(0, t.env, t.expr);
}

View file

@ -115,6 +115,7 @@ public:
RootValue vCallFlake = nullptr;
RootValue vImportedDrvToDerivation = nullptr;
bool debugStop;
std::list<DebugTrace> debugTraces;
private:

View file

@ -710,6 +710,28 @@ static RegisterPrimOp primop_genericClosure(RegisterPrimOp::Info {
.fun = prim_genericClosure,
});
static RegisterPrimOp primop_break({
.name = "break",
.args = {},
.doc = R"(
In debug mode, pause Nix expression evaluation and enter the repl.
)",
.fun = [](EvalState & state, const Pos & pos, Value * * args, Value & v)
{
// PathSet context;
// string s = state.coerceToString(pos, *args[0], context);
if (debuggerHook && !state.debugTraces.empty())
{
auto &dt = state.debugTraces.front();
// std::optional<ErrPos> pos;
// const Expr &expr;
// const Env &env;
// hintformat hint;
debuggerHook(nullptr, dt.env, dt.expr);
}
}
});
static RegisterPrimOp primop_abort({
.name = "abort",
.args = {"s"},